2013-04-25 11 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(); 
     } 
    } 

Zastanawiasz się, w jaki sposób mogę zakończyć program po zakończeniu wprowadzania danych wejściowych? Jako skaner będzie nadal po kilka "Enter", zakładając, mam zamiar kontynuować wprowadzanie wejść ... Próbowałem:Jak zakończyć skaner po zakończeniu wprowadzania?

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

i

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

Oni nie działa .... Program kontynuuje i komunikuje się z pierwotną intencją:

Odpowiedz

18

Problem polega na tym, że program (taki jak twój) nie wie, że użytkownik zakończył wprowadzanie danych wejściowych, chyba że użytkownik ... jakoś ... mówi to.

Istnieją dwa sposoby, aby użytkownik mógł to zrobić:

  • wprowadzić „koniec pliku” marker. W systemie UNIX to (zazwyczaj) CTRL + D, a na Windows CTRL + Z. To spowoduje, że hasNextLine() zwróci false.

  • Wprowadź specjalne wejście, które jest rozpoznawane przez program jako "Gotowe". Na przykład może to być pusta linia lub specjalna wartość, np. "Exit". Program musi specjalnie to przetestować.

(Można też niewykluczone użyć timera, i zakładamy, że użytkownik zakończył jeśli nie wprowadzić żadnych danych na n sekund lub n minut. Ale to nie jest przyjazny dla użytkownika sposób, aby zrobić ten.)


powodem aktualna wersja zawodzi to, że używasz == przetestować na pusty ciąg. Powinieneś użyć metod equals lub isEmpty.

Inne kwestie do rozważenia to rozróżnianie wielkości liter (na przykład "wyjście" w stosunku do "Wyjście") i efekty wiodących lub końcowych białych znaków (np. "Wyjście" a "wyjście").

0

Przy takim podejściu konieczne jest jawne utworzenie polecenia wyjścia lub warunku wyjścia. Na przykład:

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

Dodatkowo trzeba obsłużyć ciąg równa przypadki z .equals() nie ==. == porównuje adresy dwóch ciągów, które, o ile nie są faktycznie tym samym obiektem, nigdy nie będą prawdziwe.

3

Porównanie łańcuchów odbywa się za pomocą .equals(), a nie ==.

Więc spróbuj scan.nextLine().equals("").

1

Trzeba będzie poszukać konkretnego wzoru, który wskazuje koniec swojego wejścia powiedzieć na przykład „##”

// 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

Dziękuję bardzo :) – user2318175

0

W tym przypadku polecam użyć zrobić, a pętlę zamiast chwilę.

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

Aby wyjść z programu, wystarczy przypisać nagłówek, np. wyjście. Jeśli wejście jest równe wyjściu, program wyjdzie. Ponadto użytkownicy mogą naciskać control + c, aby opuścić program.

0

Możesz sprawdzić następny wiersz wprowadzania danych z konsoli i sprawdzić wpis zakończenia (jeśli taki istnieje).

Załóżmy, że Twój zakończyć wpis „quit”, to powinieneś wypróbować ten kod: -

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(); 
    } 

Spróbuj to linia code.Your wypowiedzenia powinna być wprowadzona przez Ciebie, jeśli chcesz, aby zamknąć/zakończyć skaner.

Powiązane problemy