将10个名称传递给arraylist中的方法时出现Null错误

时间:2018-04-20 03:12:13

标签: java

我想简单地将10个名字传递给arraylist中的方法,但我得到了一个null错误。有什么想法吗?

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);
        }    
    }
}

3 个答案:

答案 0 :(得分:1)

在读取数组的一个元素之后,你试图打印所有这些元素(一个字符串数组被初始化为一个空数组,我猜)并且将null格式化为字符串可能会引发异常?

答案 1 :(得分:0)

其他一切都很好。你只需要在for循环之外进行方法调用:

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);
}

当方法调用在循环中时,调用该方法,并在数组中仍有未初始化的值时迭代整个List。从for循环中取出方法调用解决了这个问题。

答案 2 :(得分:0)

初始化具有大小的数组时,未分配的索引将包含String的默认值 null 。然后你尝试在每次输入后打印整个数组,这将打印输入值,并为数组的其余部分输出 null

如果您需要一次打印所有内容,只需将arrayMethod(names)移出循环,如下所示:

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);
}

如果您需要在输入后打印名称,请按如下所示更改代码:

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[i]);
    }
}
private static void arrayMethod(String name)

{

    System.out.println(name);
}