Java do-while循环简单问题

时间:2015-02-22 23:28:00

标签: java while-loop do-while

我几年没有编码,并且一直在编写简单的Java程序来重新熟悉基本原理。但是,我在执行do-while循环时无法按照我的意愿行事。我想我并不完全理解do-while循环是如何工作的,但我想要的是将System.in中的用户输入作为int收集,并且如果他们输入其他数据形式则继续请求有效的int输入。我所拥有的是:

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

    userOption = userInput.nextInt();

} while (!userInput.hasNextInt());

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

这有两个原因无效。首先,如果我输入一个非int值,它会立即崩溃抛出输入不匹配异常。其次,如果我输入有效的int,我总是要输入两次。 IE,控制台将要求"输入:",我将输入说" 2",控制台将前进到下一行并等待另一个输入(但没有打印任何东西),然后当我输入第二个int时,它输出"你选择了[...]"。

我已经尝试过十几个不同的变体,这些变化只会变得越来越复杂,而内部循环则在内部,如果 - 其他,但我确定我在复杂的事情上并且错过了一个简单的事情概念。非常感谢任何帮助!

3 个答案:

答案 0 :(得分: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(),另请参阅:{ {3}})。

答案 1 :(得分:0)

好吧,为了避免在不是整数时崩溃,首先将其加载到String,然后让你的整数value = parseInt(yourInputAsString);

对于循环结构和双输入,您可能需要查看userInput.hasNextInt();的确切行为。对于userInput的任何类型的对象,我建议docs.oracle.sun

或者您是否需要使用userInput对象的方法?我不确定那是什么,你能澄清一下吗?

希望这至少有点帮助。

答案 2 :(得分:0)

它没有崩溃,当输入的值不是int时你得到异常(你要求int,没有int,所以java只能抛出异常)。 你需要输入两次int值,因为你输入的第一个int是在userOption语句中读取的,所以当条件需要输入一个新的int值来获得条件为真并退出时。

现在,了解它,你应该能够修复你的程序。

在循环中,检查是否有nextInt,如果它是消耗它(设置你的变量),如果它不是int,读取输入并丢弃它(我猜你使用扫描仪,所以nextLine将完成这项工作),你可以打印出提示给用户说需要int。

我不是在编写确切的代码,因为显然你想练习。 提示,我会先说 while(!input.hasNextInt){...} 祝你好运。

P.S。我在Java代码中看到的唯一一次是当有人刚开始时。