Java数组删除元素遇cannot find symbol错误,求问题原因
问题原因分析
你遇到的"cannot find symbol"错误,核心原因很直白:Java里的普通数组(比如你定义的String[] names)根本没有remove()方法!这个方法是ArrayList这类动态集合类的专属功能,编译器找不到数组的remove方法,自然就抛出错误啦。
两种解决方案
方案1:改用ArrayList(推荐,更简洁)
ArrayList是Java专门为动态增删元素设计的集合类,完全适配你的需求。修改后的代码如下:
import java.util.Scanner; import java.util.ArrayList; public class Assignment6APt2 { public static void main(String[] args) { int n = 10; Scanner scan = new Scanner(System.in); System.out.println("Enter 10 names: "); // 用ArrayList替代固定长度的普通数组 ArrayList<String> namesList = new ArrayList<>(); for (int i = 0; i < n; i++){ namesList.add(scan.nextLine()); } // 直接调用remove方法删除索引4的元素 namesList.remove(4); // 转成数组传给原方法,也可以直接遍历ArrayList输出 arrayMethod(namesList.toArray(new String[0])); } private static void arrayMethod(String[] names) { for (String a : names) { System.out.printf("%s ", a); // 加个空格分隔,可读性更好 } } }
方案2:手动操作普通数组(如果必须用数组)
普通数组的长度是固定的,没法直接删除元素,只能创建一个新数组,把需要保留的元素逐一复制进去:
import java.util.Scanner; public class Assignment6APt2 { public static void main(String[] args) { int n = 10; Scanner scan = new Scanner(System.in); System.out.println("Enter 10 names: "); String [] names = new String[n]; for (int i = 0; i < names.length; i++){ names[i] = scan.nextLine(); } // 创建长度比原数组少1的新数组 String[] newNames = new String[names.length - 1]; int newIndex = 0; for (int i = 0; i < names.length; i++) { // 跳过索引4的元素,把其他元素复制到新数组 if (i != 4) { newNames[newIndex++] = names[i]; } } // 传入处理后的新数组 arrayMethod(newNames); } private static void arrayMethod(String[] names) { for (String a : names) { System.out.printf("%s ", a); } } }
小提醒
如果你的场景需要频繁增删元素,优先用ArrayList这类集合类,比手动操作数组省心太多啦!
内容的提问来源于stack exchange,提问作者brady morgan
相关产品推荐
相关产品推荐

