【发布时间】:2016-09-06 08:59:28
【问题描述】:
我试图编写一个代码来回答另一个人的问题......但我又遇到了另一个问题。
这个想法是一个程序,它要求您输入数字,以便对它们进行排序并从高到低打印出来。
这是我带来的:
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.println("Input: ");
Integer input = new Integer(Integer.parseInt(scanner.nextLine()));
scanner.close();
Integer[] numbers = new Integer[input.toString().length()];
for (Integer value : numbers) {
while (input > 1) {
value = input % 10;
input /= 10;
}
}
Arrays.sort(numbers, Collections.reverseOrder());
int a = 0;
for (Integer value : numbers) {
if (a < numbers.toString().length()) {
System.out.print(value + ", ");
a++;
} else {
System.out.println(value + ".");
}
}
}
但是,作为Input: 292816374 输入,控制台是这样说的:
Exception in thread "main" java.lang.NullPointerException
at java.util.Collections$ReverseComparator.compare(Unknown Source)
at java.util.Collections$ReverseComparator.compare(Unknown Source)
at java.util.TimSort.countRunAndMakeAscending(Unknown Source)
at java.util.TimSort.sort(Unknown Source)
at java.util.Arrays.sort(Unknown Source)
at StartingPoint.main(StartingPoint.java:21)
问题是它试图对null 整数进行排序,但我不知道为什么它在已经初始化时将numbers 检测为空数组。
如果我将 Integers 更改为 ints 没有例外,但它会打印出零。
为什么会这样?
【问题讨论】:
-
它不能重复,因为我确实初始化了数组。
-
您正在使用 forecah 迭代数字,但您已将长度分配给 input[](好的部分),而您的 number[] 为空(坏部分)
-
问题是因为我试图通过引用而不是明确提及它们来分配每个
numbers的字段。这就是为什么numbers是空的。
标签: java sorting nullpointerexception