为什么这会返回null?

时间:2014-04-11 20:54:02

标签: java

赋值是读取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    

2 个答案:

答案 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循环。你需要解决它。