【问题标题】:do while loop validation and try again做while循环验证,然后再试一次
【发布时间】:2020-10-24 10:31:13
【问题描述】:

我对 java 还很陌生,想知道如何强制用户在 do...while 循环中输入有效选项? 我在这里想要实现的是显示一个菜单,只要用户没有选择退出选项,在我的例子中是“4”(它是一个字符而不是一个整数)。但是如果选择无效,我想显示一条错误消息并提示用户进行新的选择,这次不会再次显示菜单。

到目前为止,在我的 do...while 循环中,我正在根据用户选择显示不同的信息。如果他们输入 1-4 以外的任何内容,他们会在我的最后一个 else if 中显示错误消息,但同时他们会离开 if/else if 循环并最终回到主菜单。

不知道这是否清楚,但我们将不胜感激。我也用 switch 尝试过同样的事情,但遇到了同样的问题。

谢谢。

do { 
    // display main menu

    if (menu == '1') { ... }
    else if (menu == '2') { ... }
    else if (menu == '3') { ... }
    else if (menu == '4') { ... }
    else if (menu != '4') { // display error message }
} while (menu != '4')

【问题讨论】:

  • 只需将菜单显示代码移到do之前?

标签: java


【解决方案1】:

好的,所以你有一份工作,我们可以用一个自包含的方式来描述一个简短的参数列表:

  • 要求用户输入。
  • 检查输入是否有效。
  • 如果没有,请继续询问。

就是这样。这是我们可以写的工作。轻松搞定。

那么,就这样吧!制定一种方法来完成这项工作。您只需要一个参数,即:“什么构成有效输入”。如果我们可以简化为只需要一个字符,并且从'1' 到这个字符的所有内容都是有效的,那么:

public char askUser(char maxValid) {
    do {
        char in = askUserForInput(); // however you get that char.
        if (in >= '1' || in <= maxValid) return in;
        System.out.println("Enter a value between 1 and " + maxValid + "> ");
    } while (true);
}

那么你可以在需要输入的时候调用这个方法。

您可以将这个逻辑(因此,这将是您的 do/while 循环中的一个 do/while 循环)滚动到主循环中,但是编写好的代码的两个相当重要的方面是找到易于隔离的方面,以及,好吧,隔离它们(无论是创建新方法、类型、模块还是子系统 - 它适用于整个层次结构),并避免重复自己。

【讨论】:

  • 不使用方法也能达到类似的效果吗?只是想更好地理解。这个解决方案虽然有效。
  • 是的,这就是“您可以将此逻辑放入主循环,但这是一个非常愚蠢的想法”的全部意义所在。方法很好。制作更多。
猜你喜欢
  • 2021-03-27
  • 2019-06-06
  • 2021-03-12
  • 2011-11-28
  • 1970-01-01
  • 1970-01-01
  • 2013-07-12
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多