2013-01-03 232 views
49

如何檢查列表是否爲空?如果是這樣,則系統必須給出消息列表爲空。如果不是,則系統必須給出消息列表不爲空。 用戶可以輸入號碼-1來停止程序。 這是我現在的代碼,但這不起作用,它總是說'列表不是空的'。Java ArrayList - 檢查列表是否爲空

import java.util.*; 
import javax.swing.JOptionPane; 

public class ArrayListEmpty 
{ 
    public static void main(String[] args) 
    { 
     List<Integer> numbers = new ArrayList<Integer>(); 
     int number; 
     do { 
      number = Integer.parseInt(JOptionPane.showInputDialog("Enter a number (-1 to stop)")); 
      numbers.add(number); 
     } while (number != -1); 
     giveList(numbers); 
    } 

    public static void giveList(List<Integer> numbers) 
    { 
     if (numbers != null) 
      JOptionPane.showMessageDialog(null, "List isn't empty"); 
     else 
      JOptionPane.showMessageDialog(null, "List is empty!"); 
    } 
} 
+1

你總是得到的原因「列表不爲空」的消息是,因爲你是你實例,並添加了一些給它檢查後。即使用戶輸入-1,它仍然會被添加到列表中。 – jonhopkins

+1

'null'和一個空列表不是一回事。 – SLaks

+1

您[閱讀javadocs](http://docs.oracle.com/javase/7/docs/api/java/util/List.html#isEmpty(%29)...但是,似乎你沒有明白'null'是什麼意思,這是一個更大的問題。 –

回答

151

簡單,如:

if (numbers.isEmpty()) {...} 

注意,一個快速瀏覽一下documentation就會給你的信息。

+13

if((null == numbers) &&(numbers.isEmpty())){...} – Jacky

+7

@Jacky最好確保你永遠不要在我看來通過一個空列表... – assylias

+0

@Jacky是正確的,要麼你保證初始化,要麼你必須檢查null,否則你將受到NullPointerException的影響。 –

16

您應該使用方法listName.isEmpty()

3

你原來的問題是,你檢查,如果該列表爲空,它絕不會因爲你List<Integer> numbers = new ArrayList<Integer>();實例化它。但是,您已更新代碼以使用List.isEmpty()方法來正確檢查列表是否爲空。

現在的問題是,你從來沒有真的發送一個空列表giveList()。在你的do-while循環中,你可以添加任何輸入數字到列表中,即使它是-1。要防止添加-1,請將do-while循環更改爲僅添加數字(如果它們不是-1)。然後,如果用戶的第一個輸入號碼是-1,則列表將爲空。

do { 
    number = Integer.parseInt(JOptionPane.showInputDialog("Enter a number (-1 to stop)")); 
    /* Change this line */ 
    if (number != -1) numbers.add(number); 
} while (number != -1); 
0

或者,您可能還希望通過.size()方法進行檢查。不爲空名單將有一個規模超過零

if (numbers.size()>0){ 
//execute your code 
}