2015-01-26 4 views
-1

Я пытаюсь сделать функцию java, которая возвращает введенный пользователем int, но не вернется, пока пользователь не введет действительный номер. Вот моя первая модель функции:Функция Java для ввода данных от сканера до int?

public int getChoice(){ 
     try{ 
      return scan.nextInt(); 
     }catch(Exception e){ 
      return getChoice(); 
     } 
    } 

scan объявлен Scanner scan = new Scanner(System.in);

Эта функция привела в Java.lang.stackOverflowError (хмм ... это, кажется, соответствующий веб-сайт для этого ...). Я полагаю, это потому, что функция постоянно называется.

Я как-то подумал, используя Integer.valueOf(scan.nextLine())', но причина, по которой я на самом деле ничего не сделал с этим, заключается в том, что в некоторых случаях я не могу понять, что определяет, происходит это или нет, но нажатие «Enter» когда программа вызывает nextLine(), пропустит следующий nextLine(). Я не могу разобраться в этом.

Итак, если кто-то может предоставить мне функцию Java, которая будет зацикливаться до тех пор, пока пользователь не вводит действительное целое число, а затем верните это целое число, пожалуйста, сделайте это, спасибо.

+0

Вы можете переписать код без рекурсии, чтобы увидеть, что происходит: вставить его в 'то время (правда)' петли и удалить вызов 'getChoice()' - возвращение будет разорвать петлю, и если есть исключение просто повторится. – John3136

ответ

1

Вы получаете плохую рекурсию, потому что вызов getChoice внутри блока catch. Чтобы повторить код на неопределенный срок, пока пользователь не предоставит вам действительное число, используйте while(true) бесконечный цикл. Код, который вы должны прочитать в строке и преобразовать в Integer, это просто отлично.

public int getChoice() {  
    while (true) { 
     try {         
      return Integer.valueOf(scan.nextLine()); 
     } catch (Exception e) { 
      System.out.println("Enter a valid number"); 
     } 
    } 
} 
Смежные вопросы