Java 使用Scanner.nextInt()时出现NullPointerException
我正在创建一个程序来计算a和B之间有多少个数字可以被K整除。这个程序应该允许用户首先输入测试用例的数量,然后根据测试用例的数量获得相应的a、B和K值。 样本输入: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
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不客气。