2015-08-06 3 views
-2

Я пытался создать программу, и сейчас у меня проблемы со сканером в java, потому что в программе пользователь может ввести строку и нажать enter, чтобы ввести ее, и если пользовательские входы «exit», как и тогда, сканер закроется, и цикл остановится, но он просто работает для первого входа и выдает черную линию каждый раз, и если вы входите в exit, он выписывает выход, но продолжает.Проблема со сканером и зацикливание в java

здесь код Snippit:

public static void main(String[] args) { 
    int i = 0; 
    Scanner input = new Scanner(System.in); 
    while(input.hasNext() && i<1){ 
     System.out.println(input.nextLine()); 
     if(input.nextLine() == "exit"){ 
      i++; 
     } 
    } 
    input.close(); 
} 
+0

@MrT Вы все еще делаете 2 раза 'input.nextLine()'! Если я войду в качестве пользовательского ввода «exit», а затем «test», он не остановится, он отобразит только «exit» (и даже не отобразит «test» ...) – HyperZ

+0

вы правы - моя ошибка. я удалю свой ответ :) – MrT

ответ

0

Это работает

public static void main(String[] args) { 
    int i = 0; 
    Scanner input = new Scanner(System.in); 
    while(input.hasNext() && i<1){ 
     String nextLine = input.nextLine(); 
     System.out.println(nextLine); 
     if(nextLine.equals("exit")){ 
      i++; 
     } 
    } 
    input.close(); 
} 

Проблема была сначала сделал System.out.println(input.nextLIne()), а затем сделал это снова в вашей, если заявление (отсюда чтение 2 следующие строки вместо одного).

При вводе «exit» цикл не остановился, потому что вы сравнивали строку с ==, вам нужно сравнить строки с методом equals.

+0

большое спасибо, я буду использовать .equals больше. – eyalp55

0

Я бы сказал, используя break вместо i++, поэтому он не будет ждать до следующего ввода после того, как вы ввели выход.

public static void main(String[] args) { 
    Scanner input = new Scanner(System.in); 
    String s; 
    while (input.hasNext()) { 
     s = input.nextLine(); // input.nextLine(); read single line once. 
           // So you need to assign it to some variable so that you can use it in your if condition. 
     System.out.println(s); 

     if (s.equals("exit")) { // use equals instead of == also use variable 
      break; // so it will not wait for next input to check in while condition hasNext. 
     } 
    } 
    input.close(); 
}