赋值是读取ArrayList的最大值并返回它,如果它是0或空返回并打印null。但是当我运行它时,对于负数而言输出为空,而它应该仅为0返回null。
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
ArrayList<Integer> list = new ArrayList<Integer>();
int addNum = -1;
//User inputs numbers for the list until they input 0
while (addNum != 0) {
addNum = input.nextInt();
list.add(addNum);
}
//Sends it to the method to check for the biggest number
Integer i = max(list);
//It returns null if it's negative for some reason
if (i == null) {
System.out.println((String) null);
} else {
System.out.println("The greatest number is " + i);
}
}
public static Integer max(ArrayList<Integer> list) {
Integer i = Collections.max(list);
//Even though the if statement says only if it is equal to 0
if (i == 0) {
return (null);
} else {
return i;
}
}
示例运行
-12
-151
-1221
-2121
-61
-42
0
null
答案 0 :(得分:5)
你的问题在这里:
//User inputs numbers for the list until they input 0
while (addNum != 0) {
addNum = input.nextInt();
list.add(addNum);
}
当你得到0时,你也将它添加到列表中。按字母顺序,0大于所有负整数,因此max()
函数始终返回null。
你可以像这样解决它(这是一个hackjob,有更好的方法,你可能想要考虑你是如何做的,目前它是非常多余的):
//User inputs numbers for the list until they input 0
while (addNum != 0) {
addNum = input.nextInt();
if(addNum == 0)
break;
list.add(addNum);
}
答案 1 :(得分:0)
错误是因为如果用户输入0,它将被添加到列表中,并在下一次迭代中断开while循环。你需要解决它。