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循环简单问题的主要内容,如果未能解决你的问题,请参考以下文章

Java基础第九节(do-while循环)

Java基础第九节(do-while循环)

Java基础第九节(do-while循环)

JAVA大数据的第六天——while循环do-while循环以及for循环

java_do-while循环和while循环区别

Java do-while循环