2013-04-25 7 views
7
public static void main(String[] args) { 

     Scanner scan = new Scanner(System.in); 
     try { 
      while (scan.hasNextLine()){ 

       String line = scan.nextLine().toLowerCase(); 
       System.out.println(line); 
      } 

     } finally { 
      scan.close(); 
     } 
    } 

Mi chiedo solo come posso terminare il programma dopo aver completato l'immissione degli input? Come lo scanner sarebbe ancora continuare dopo diversi "Enter" assumendo ho intenzione di continuare a inserire gli ingressi ... ho provato:Come terminare Scanner quando l'input è completo?

if (scan.nextLine() == null) System.exit(0); 

e

if (scan.nextLine() == "") System.exit(0); 

non ha funzionato .... Il programma continua e crea problemi con l'intenzione originale,

risposta

18

Il problema è che un programma (come il tuo) non sa che l'utente ha completato l'inserimento degli input a meno che l'utente ... in qualche modo ... non lo dica.

Ci sono due modi in cui l'utente potrebbe fare questo:

  • inserire una "fine del file" marcatore. In UNIX che è (tipicamente) CTRL +D, e su Windows CTRL +Z. Ciò comporterà hasNextLine() restituendo false.

  • Immettere un input speciale riconosciuto dal programma come "I'm done". Ad esempio, potrebbe essere una linea vuota o un valore speciale come "exit". Il programma deve verificarlo appositamente.

(Si potrebbe anche concettualmente, utilizzare un timer, e supponiamo che l'utente ha terminato se non entrano in alcun input per N secondi, o N minuti. Ma non è un modo facile da usare per fare questo.)


La ragione per la versione corrente sta fallendo è che si sta utilizzando == per verificare una stringa vuota. È necessario utilizzare i metodi equals o isEmpty.

Altre cose da considerare sono la distinzione tra maiuscole e minuscole (ad esempio "uscita" rispetto a "Esci") e gli effetti degli spazi bianchi iniziali o finali (ad esempio "uscita" e "uscita").

0

Con questo approccio, è necessario creare in modo esplicito un comando di uscita o una condizione di uscita. Per esempio:

String str = ""; 
while(scan.hasNextLine() && !((str = scan.nextLine()).equals("exit")) { 
    //Handle string 
} 

Inoltre, è necessario gestire stringa è uguale a casi con .equals() non ==. == confronta gli indirizzi di due stringhe, che, a meno che non siano effettivamente lo stesso oggetto, non saranno mai veri.

3

Il confronto delle stringhe viene eseguito utilizzando .equals() e non ==.

Quindi, prova scan.nextLine().equals("").

1

Si dovrà cercare modello specifico, che indica la fine del vostro input dire per esempio "##"

// TODO Auto-generated method stub 
    Scanner scan = new Scanner(System.in); 
    try { 
     while (scan.hasNextLine()){ 

      String line = scan.nextLine().toLowerCase(); 
      System.out.println(line); 
      if (line.equals("##")) { 
       System.exit(0); 
       scan.close(); 
      } 
     } 

    } finally { 
     if (scan != null) 
     scan.close(); 
    } 
+0

Grazie mille :) – user2318175

0

In questo caso, vi consiglio di utilizzare fare, ciclo while al posto del tempo.

Scanner sc = new Scanner(System.in); 
    String input = ""; 
    do{ 
     input = sc.nextLine(); 
     System.out.println(input); 
    } while(!input.equals("exit")); 
sc.close(); 

Per uscire dal programma, è sufficiente assegnare un'intestazione di stringa, ad es. Uscita. Se l'input è uguale all'uscita, il programma sta per uscire. Inoltre, gli utenti possono premere control + c per uscire dal programma.

0

È possibile controllare la riga successiva di input dalla console e verificare la voce terminata (se presente).

Supponiamo che la vostra voce di sospendere è "quit" allora si dovrebbe provare questo codice: -

Scanner scanner = new Scanner(System.in); 
    try { 
     while (scanner.hasNextLine()){ 

      // do your task here 
      if (scanner.nextLine().equals("quit")) { 
       scanner.close(); 
      } 
     } 

    }catch(Exception e){ 
     System.out.println("Error ::"+e.getMessage()); 
     e.printStackTrace(); 
}finally { 
     if (scanner!= null) 
     scanner.close(); 
    } 

Prova questa linea code.Your interrompere deve essere inserito da voi, quando si vuole chiudere/terminare lo scanner.

Problemi correlati