2014-04-11 80 views
0

這個賦值是讀取ArrayList的最大值並返回它,如果它是0或者空則返回並打印null。但是,當我運行它,輸出爲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

你是否檢查元素是否被添加到列表中? – Kakarot

回答

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

我會使用'addNum = input.nextInt(); while(addNum!= 0){list.add(addNum); addNum = input.nextInt();而不是。 –

+0

@YvesDubois工作,OP的實現已經是多餘的,我甚至不會使用while循環 – rpg711

0

這個錯誤是因爲如果用戶輸入0,它將被添加到列表中,並在下一次迭代中打破while循環。你需要修復它。