2016-01-22 2 views
1

В настоящее время я работаю над программой Java, которая приносит базовую конфигурацию File Editor, работающую поверх командной строки. У меня проблема 1 ... Некоторые записи должны быть действительными выходами. Я попытался с помощьюКак заставить Scanner.next() вывести значение?

while(!scanner.hasNext()){ 
    System.err.println("Invalid Value"); 
} 
String str = scanner.next(); 

На мой взгляд, это должно работать, потому что каждый раз scanner.hasNext(); называется программой, которая должна приостанавливаться до тех пор, пока в консоли не будет введено что-либо. Но когда я запускаю программу (ввод недопустимых значений), она просто замыкает цикл. Я делаю что-то неправильно или это просто ошибка? Спасибо за помощь!

+1

Вы говорите, что вы получите залиты «недопустимое значение» бесконечно раз, потому что это в то время как петли? – Gendarme

+1

если 'scanner.hasNext()' возвращает false, это означает, что вы достигли конца потока, и вызов его больше раз не поможет. –

+0

@Gendarme в основном да – RoiEX

ответ

1

Для полноты картины здесь является быстрым решением, которое использует while (true) -подход:

public static void main(String[] args) { 
    String input = null; 
    try (Scanner scanner = new Scanner(System.in)) { 
     while (true) { 
      System.out.println("Please enter SOME INFORMATION:"); 
      if (scanner.hasNextLine()) { 
       input = scanner.nextLine(); 
       if (inputIsSane(input)) break; 
       System.out.println("Your input is malformed. Please try again."); 
      } 
     } 
    } 
    System.out.println("Got valid input. Input was: " + input); 
    // continue with the rest of your program here 
} 

private static boolean inputIsSane(String input) { 
    // replace with your actual validation routine 
    return input.equals("let me pass"); 
}