Java 使用Scanner.nextInt()时出现NullPointerException

Java 使用Scanner.nextInt()时出现NullPointerException,java,Java,我正在创建一个程序来计算a和B之间有多少个数字可以被K整除。这个程序应该允许用户首先输入测试用例的数量,然后根据测试用例的数量获得相应的a、B和K值。 样本输入: 2 1 10 3 8 20 4 产出将是: Case 1: 3 Case 2: 4 然而,在第二行之后,我一直在点击enter之后得到一个NullPointerException。在这种情况下,我只能进入: 2 1 代码如下: i

我正在创建一个程序来计算a和B之间有多少个数字可以被K整除。这个程序应该允许用户首先输入测试用例的数量,然后根据测试用例的数量获得相应的a、B和K值。 样本输入:

    2
    1
    10
    3
    8
    20
    4
产出将是:

    Case 1: 3
    Case 2: 4
然而,在第二行之后,我一直在点击enter之后得到一个NullPointerException。在这种情况下,我只能进入:

     2
     1
代码如下:

    import java.util.Scanner;

public class ABK {

public static void cases(int no, int[] first, int[] second, int[] div){
    int[] outputs = null;
    for(int i = 0; i < no; i++){
        for(int x = first[i]; x <= second[i]; x++){
            if(x%(div[i]) == 0)
                outputs[i]++;
            else continue;
        }
    }

    for(int i = 0; i < no; i++){
        System.out.println("Case " + (i+1) + ": " + outputs[i]);
    }
}
public static void main(String[] args){
    int noOfCases = 0;
    int[] a = null, b = null, k = null;
    Scanner scanner = new Scanner(System.in);
    noOfCases = scanner.nextInt();
    if(noOfCases < 0 || noOfCases > 1000){
        System.out.println("Invalid number of cases. Only numbers from 1 to 100 are allowed.");
        System.exit(0);
    }
    for(int i = 0; i < noOfCases; i++){
        a[i] = scanner.nextInt(); //THIS IS WHERE THE NULLPOINTEREXCEPTION APPEARS
        b[i] = scanner.nextInt();
        k[i] = scanner.nextInt();
    }
    for(int i = 0; i < noOfCases; i++){
        if(a[i] < 1 || a[i] > 1000){
            System.out.println("Invalid value of a. Only numbers from 1 to 1000 are allowed.");
            System.exit(0);
        }
        if(b[i] < 1 || b[i] > 1000){
            System.out.println("Invalid value of b. Only numbers from 1 to 1000 are allowed.");
            System.exit(0);
        }
        else if(a[i] > b[i]){
            System.out.println("Invalid value of b. It must be larger than a.");
            System.exit(0);
        }
        if(k[i] < 1 || k[i] > 1000){
            System.out.println("Invalid value of k. Only numbers from 1 to 9999 are allowed.");
            System.exit(0);
        }
    }
    cases(noOfCases, a, b, k);
}
import java.util.Scanner;
公共类ABK{
公共静态无效案例(int no,int[]first,int[]second,int[]div){
int[]输出=null;
for(int i=0;i1000){
System.out.println(“a的值无效。只允许1到1000之间的数字。”);
系统出口(0);
}
if(b[i]<1 | | b[i]>1000){
System.out.println(“b的值无效。只允许1到1000之间的数字。”);
系统出口(0);
}
如果(a[i]>b[i]){
System.out.println(“b的值无效,必须大于a”);
系统出口(0);
}
if(k[i]<1 | | k[i]>1000){
System.out.println(“k的值无效。只允许1到9999之间的数字”);
系统出口(0);
}
}
例(无病例,a、b、k);
}
}

我尝试过其他“修复”,例如初始化Scanner变量或使用实现Scanner.nextInt()的新类,但没有一个对我有效。
提前感谢您的帮助。

您从未实例化
a
数组。因此,您在尝试访问它时会得到一个NPE

对于
b
k
也会发生同样的异常

您可以通过这种方式实例化数组

a = new int[noOfCases];

嗯,你有没有在调试器中单步检查代码、检查变量等?@SotiriosDelimanolis我知道什么是NullPointerException。我只是不明白为什么它会发生在我的程序中,我无法在你声称的线程中找到与我问到的类似的答案。无论如何,谢谢你的参考。你是对的!我认为这是s行
int[]a=null,b=null,k=null
就足够了。我试着用noOfCases作为大小逐个实例化它们,结果成功了!我现在明白了区别。谢谢你的回答。我会记住这一点。@2562166不客气。