【问题标题】:How to make a user re-input data if input does not equal a case in the switch?如果输入不等于开关中的大小写,如何让用户重新输入数据?
【发布时间】:2017-07-03 04:06:31
【问题描述】:

我最近学习了 Java,我有一个 switch 语句从另一个类获取用户输入,我想知道如何为我的 switch 语句制作 default case用户重新输入数据。

目前我有以下基本代码

static int getMonthInt(String monthName) 
{
    switch(monthName.trim()) 
    {
        case "January":
            return 1;
        case "Febuary":
            return 2;
        case "March":
            return 3;
        case "April":
            return 4;
        case "May":
            return 5;
        case "June":
            return 6;
        case "July":
            return 7;
        case "August":
            return 8;
        case "September":
            return 9;
        case "October":
            return 10;
        case "November":
            return 11;
        case "December":
            return 12;
        default:
            // what do i put here
    }
    
}

我从另一个类调用的输入类中获取用户输入,如下所示:

public static void main(String[] args) {

    String monthName;
    int dayNumber;
    int yearNumber;
    
    monthName = Input.getString("Please enter the current month name with a capital letter!");
    dayNumber = Input.getInt("Please enter the current day!");
    yearNumber = Input.getInt("Please enter the current year!"); }

这一切都有效。但是,我的问题是 如果有人输入了无效的输入,例如“ovtomber”,我希望重新提示用户输入数据。我会将其放在开关的默认情况下还是在main 方法(我在哪里获得用户输入)以及我将如何做到这一点(我尝试了两种方法并且无法获得预期的行为并且我找不到任何关于输入验证的主题)?

【问题讨论】:

  • switch 放入一个循环中。
  • 还是想到recursing
  • 返回一个无效值(例如-1),并在方法外检查它。如果值无效,请再次询问用户。
  • 任何整数值都会给出错误,因为通过 getMonthInt 方法调用开关(具有讽刺意味的是)将字符串作为参数。因此,任何非字符串输入都会导致程序以错误消息结束。但是,如果用户输入的字符串不是带有大写字母的月份名称,我想让用户重新输入数据
  • @Ian 谢谢这是一个很好的解决这个问题的方法你介意把它作为一个答案并且不接受吗? (很抱歉重新激活一个旧线程,因为我的帖子历史记录中有一些像这样被否决的帖子,我被禁止提出新问题,直到我编辑这些问题以使它们不再被否决为负总数:/)

标签: java switch-statement default


【解决方案1】:

在您的 switch 语句中,您默认返回明显无效的月份(通常为 -1):

default:
    return -1;

然后在你的逻辑中,如果结果是-1,你可以要求澄清,例如:

int validatedMonth;
do
{
    monthName = Input.getString("Please enter the current month name with a capital letter!");
    validatedMonth = getMonthInt(monthName);
    if(validatedMonth == -1)
        System.out.println("Invalid month name, please try again");
} while (validatedMonth == -1);

(示例代码,我没有检查它是否编译)

【讨论】:

    【解决方案2】:

    也许你可以在默认情况下返回 0。

    在主函数中

    while(getMonthInt(String monthName) ==0){
    /*get user input here*/
    }
    

    如果是默认的,它会让用户继续输入

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-09-25
      • 1970-01-01
      • 2021-06-24
      • 1970-01-01
      • 2019-10-17
      • 2021-08-07
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多