Java do-while循环简单问题
Posted
技术标签:
【中文标题】Java do-while循环简单问题【英文标题】:Java do-while loop simple issue 【发布时间】:2015-02-22 23:27:59 【问题描述】:我已经有几年没有编码了,并且一直在编写简单的 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,我总是必须输入两次。即,控制台将要求输入“输入:”,我将输入“2”,控制台将前进到下一行并等待另一个输入(但不打印任何内容),然后当我输入第二个 int 时输出“您选择 [...]”。
我已经尝试了十几种不同的变体,这些变体变得越来越复杂,while 循环在 do-while 中,在 if-else 中,但我确信我把事情复杂化了,错过了一个简单的概念。非常感谢任何帮助!
【问题讨论】:
1) 如果你捕捉到异常,它不会崩溃(异常是有帮助的,不是麻烦),你可以把你的逻辑放在错误的输入上,2) 调用hasNextInt
在读取 int
之前将值存储在布尔变量中。
【参考方案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://***.com/a/15973109/1063730)。
【讨论】:
【参考方案2】:好吧,为了避免它不是整数时崩溃,先把它加载到String
,然后让你的整数value = parseInt(yourInputAsString);
。
至于循环结构和双重输入,您可能需要查看userInput.hasNextInt();
的确切行为。我会建议 docs.oracle.sun 在 userInput 是什么类型的对象上。
或者您是否需要使用 userInput 对象的方法?我不太确定那是什么,你能澄清一下吗?
希望这至少会有所帮助。
【讨论】:
【参考方案3】:它没有崩溃,当输入的值不是int时会出现异常(你要求int,没有int,所以java只能抛出异常)。 您需要输入两次 int 值,因为您输入的第一个 int 是您在 userOption 语句中读取的,所以 while 条件需要输入一个新的 int 值才能使条件为真并退出。
现在,知道了这一点,您应该能够修复您的程序。
在循环中,检查是否有nextInt,如果它正在使用它(设置你的变量),如果它不是int,读取输入并丢弃它(我猜你使用扫描仪,所以nextLine会完成这项工作),您可以向用户打印提示说需要 int。
我没有写出你想要练习的确切代码。 提示,我会从 while(!input.hasNextInt) ... 祝你好运。
附:我在 Java 代码中看到的唯一一次是有人刚开始。
【讨论】:
以上是关于Java do-while循环简单问题的主要内容,如果未能解决你的问题,请参考以下文章