2013-01-03 1 views
49

Come posso verificare se un elenco è vuoto? In tal caso, il sistema deve fornire un messaggio che dice L'elenco è vuoto. In caso contrario, il sistema deve fornire un messaggio che dice L'elenco non è vuoto. Gli utenti possono immettere i numeri, -1 per interrompere il programma. Questo è il codice che ora ho, ma questo non funziona, dice sempre 'Lista non è vuota'.Java ArrayList - Controlla se l'elenco è vuoto

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

La ragione si è sempre trovato la "Lista non è vuoto" il messaggio è perché si sta verificando dopo si crea un'istanza di esso e aggiungere un numero ad esso . Anche se l'utente immette -1, viene comunque aggiunto all'elenco. – jonhopkins

+1

'null' e una lista vuota non è la stessa cosa. – SLaks

+1

Tu [leggi i javadocs] (http://docs.oracle.com/javase/7/docs/api/java/util/List.html#isEmpty (% 29) ... tuttavia, sembra che tu non capire cosa vuol dire "null", che è un problema più grande –

risposta

151

quanto semplicemente come:

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

Nota che un rapido sguardo alla documentation ti avrebbe dato quelle informazioni.

+13

è meglio usare if ((null == numeri) && (numbers.isEmpty())) {...} – Jacky

+7

@Jacky è meglio assicurarsi di non passare mai una lista nulla secondo me ... – assylias

+0

@Jacky è corretto, o si garantisce l'inizializzazione, o si DEVE controllare per null, altrimenti si è soggetti a una NullPointerException. –

16

Si dovrebbe utilizzare il metodo listName.isEmpty()

3

Il tuo problema originale era che stavano controllando se la lista fosse nulla, che non sarebbe mai essere perché istanziato con List<Integer> numbers = new ArrayList<Integer>();. Tuttavia, è stato aggiornato il codice per utilizzare il metodo List.isEmpty() per verificare correttamente se l'elenco è vuoto.

Il problema ora è che non si sta effettivamente inviando una lista vuota a giveList(). Nel ciclo do-while, aggiungi qualsiasi numero di input all'elenco, anche se è -1. Per evitare che venga aggiunto -1, modifica il ciclo do-while per aggiungere solo numeri se non sono -1. Quindi, l'elenco sarà vuoto se il primo numero di input dell'utente è -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

In alternativa, si potrebbe anche voler controllare con il metodo .size(). La lista che non è vuota avrà una dimensione superiore a zero

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