向方法传递ArrayList中的10个名称时出现Null Error,求解决方案
搞定你的Java空值问题~
首先得说,你提到要传递ArrayList,但实际代码里用的是String数组,而且你遇到的空值问题(应该是打印出一堆null)原因很明确,咱们一步步来梳理:
问题出在哪?
你在for循环的每一次迭代里,刚给数组的第i个位置赋值,就立刻调用arrayMethod打印整个数组。这时候数组里只有当前输入的那个元素有值,剩下的9个位置都是Java数组默认的null,所以打印的时候就会把这些null也输出出来,看起来就像是出现了空值错误。
解决思路&修正代码
方案1:继续用数组,调整方法调用时机
只需要把打印方法的调用移到循环外面,等10个名字全部输入完成后再打印整个数组就行:
import java.util.Scanner; public class JavaApplication17 { public static void main(String[] args) { Scanner scan = new Scanner(System.in); String [] names = new String[10]; System.out.println("Enter 10 names: "); for (int i = 0; i < 10; i++){ names[i] = scan.nextLine(); // 把方法调用从循环里移出去! } // 所有名字输入完再打印 arrayMethod(names); } private static void arrayMethod(String arr[]) { for (String a : arr) { System.out.printf("%s ", a); // 加个空格,名字之间更清晰 } } }
方案2:换成你原本想使用的ArrayList
如果你的需求确实是用ArrayList而不是数组,那可以改成下面这样,ArrayList不会有默认空值的问题,而且长度是动态的:
import java.util.ArrayList; import java.util.Scanner; public class JavaApplication17 { public static void main(String[] args) { Scanner scan = new Scanner(System.in); ArrayList<String> names = new ArrayList<>(); System.out.println("Enter 10 names: "); for (int i = 0; i < 10; i++){ names.add(scan.nextLine()); } arrayListMethod(names); } private static void arrayListMethod(ArrayList<String> nameList) { for (String name : nameList) { System.out.printf("%s ", name); } } }
额外小提示
Java里的引用类型数组(比如String数组)创建时,每个元素默认都是null,这就是你之前打印出一堆null的原因。而ArrayList是动态集合,只有你主动添加的元素才会存在,不会有默认的空值。
内容的提问来源于stack exchange,提问作者Brady Morgan
相关产品推荐
相关产品推荐

