2015-02-22 3 views
0

Я не кодировал через несколько лет и писал простые Java-программы, чтобы переоценить основные принципы. Тем не менее, у меня возникли проблемы с получением цикла do-while, чтобы действовать так, как я этого хочу. Я предполагаю, что я не понимаю, как работают циклы while, но я хочу, чтобы пользовательский ввод из System.in как int и продолжал запрашивать действительный ввод int, если они вводят другую форму данных. Что у меня есть:Java do-while loop simple issue

do { 
    System.out.print("Input: "); 

    userOption = userInput.nextInt(); 

} while (!userInput.hasNextInt()); 

System.out.println("You chose to: " + menuItems.get((userOption - 1))); 

Это не работает по двум причинам. Во-первых, если я ввожу значение non-int, он сразу же бросает вызов исключению входного несоответствия. Во-вторых, если я действительно вхожу в действительный int, мне всегда нужно вводить его дважды. IE, консоль спросит «Вход:», я введу «2», консоль перейдет на следующую строку и ждет другого ввода (но ничего не печатает), а затем, когда я ввожу второй int, выводит «Вы выбрали [...]».

Я пробовал более дюжины различных вариантов, которые только продолжают усложняться, а внутри - внутри, внутри - внутри, но я уверен, что я слишком усложняю вопросы, и я пропустил простую концепцию. Любая помощь очень ценится!

+0

1) Если вы поймаете исключение, это не сработает (исключения могут помочь, а не быть помехой), и там вы можете поместить свою логику на неправильный ввод и 2) вызвать 'hasNextInt' перед чтением 'int' и сохранить значение в булевой переменной. – m0skit0

ответ

0

Ну, во избежание сбоев, когда это не целое число, сначала загрузите его в String, а затем введите свое целое число value = parseInt(yourInputAsString);.

Что касается структуры цикла и двойного ввода, вы можете посмотреть точное поведение userInput.hasNextInt();. Я бы предложил docs.oracle.sun на любом объекте, который имеет userInput.

Или вы хотите использовать метод userInput? Я не совсем уверен, что это такое, вы можете уточнить?

Надеюсь, это поможет хотя бы немного.

0

Это не сбой, вы получаете исключение, когда введенное значение не было int (вы запрашивали int, не было int, поэтому java мог только генерировать исключение). Вам нужно ввести значение int дважды, becauce first int, которое вы вводите, вы читаете в инструкции userOption, поэтому, пока условия требуют ввода нового значения int, чтобы получить условие true и выйти.

Теперь, зная это, вы сможете исправить свою программу arround.

В цикле проверьте, есть ли nextInt, если он потребляет его (установите переменную), если он не является int, прочитайте ввод и отбросьте его (я полагаю, вы используете сканер, поэтому nextLine выполнит задание), вы можете распечатать приглашение пользователю, указав, что int требуется.

Я не пишу точный код, поскольку, очевидно, вы хотите попрактиковаться. Подсказка, я бы начал с while (! Input.hasNextInt) {...} Удачи.

P.S. Единственный раз, когда я вижу, в то время как в Java-коде, когда кто-то только начинается.

1

Вот одна позиция Пример:

import java.util.*; 

public class Foo { 
    public static void main(String args[]){ 
     int userOption; 
     Scanner userInput = new Scanner(System.in); 

     System.out.print("Input: "); 
     while(!userInput.hasNextInt()){ 
      userInput.next(); 
      System.out.print("Error: Please enter an integer\nInput: "); 
     } 
     userOption = userInput.nextInt(); 

     System.out.println("You chose to: " +userOption); 
    } 
} 

Мы просим ввести первый раз и пока мы не можем найти целое число мы будем выводить сообщение об ошибке и отбросить все, что было введено пользователем (userInput.next(), см. Также: https://stackoverflow.com/a/15973109/1063730).