【问题标题】:Switch Case Error Validation切换案例错误验证
【发布时间】:2013-10-06 17:01:05
【问题描述】:

刚开始使用 Java,所以这可能是一个简单的问题,但找不到像我这样的问题,所以想我会发布一个。

我正在编写一个带有选项 1-8 的“主菜单”。当有人输入大于 8 且小于 1 的数字时,我想出了如何处理错误,但我不知道如果他们输入字符或字母时如何给他们错误消息...

    while(menuChoice != 8)
        {
        //main menu that loops

        switch(menuChoice)
        {
        case 1: 
            //code
            break;

        case 2:
            //code
            break;

        case 3:
            //code
            break;

        case 4:
                            //code
            break;

        case 5:
            //code
            break;

        case 6:
                            //code
            break;

        case 7:
                            //code
            break;

        case 8:
                            //code
            break; 

        default: 
            System.out.println("Error: Invalid Menu Selection."); 
            }
        }

【问题讨论】:

  • 你的条件也没有按照你的想法做。也许在决定如何处理唯一有效的输入之前检查输入?
  • menuChoice 是什么类型以及如何检索它?
  • menuChoice 是我的扫描仪名称。我应该标记它!

标签: java validation error-handling switch-statement


【解决方案1】:

假设这个编译,你问什么是不可能的。您正在打开一个数字,因此您无法检查该数字是否为字符。如果可能,您的代码将无法编译。

您应该将用户输入作为String 并验证字符串。如果字符串中包含非数字值,则抛出错误。如果没有,请将其转换为数字,然后执行您的切换。

更好的设计是有一个验证层。一旦输入被验证,就假设它此后有效。

伪代码:

String input = //
if (containsNonNumerics(input))
    throw error
inputAsInt = castToInt(input)
if (outOfRange(inputAsInt)
    throw error
switch //your current code goes here

【讨论】:

  • 我不知道 switch 只能处理数值...这是有道理的,因为我已经尝试了一切(到目前为止我知道)让它工作!我会试试你的建议!谢谢!
  • @user2832187 我并不是说它只能处理数值。我的意思是,如果您说x != 2 并且该代码可以编译,则意味着x 必须是某种数字类型,因此它不能具有字符值。我从您提供的代码中推断出一些细节。
【解决方案2】:

首先,使用 while 循环不会为您提供所需的功能。您应该研究如何使用 KeyAdapter 以便能够从键盘接收输入事件,例如按下一个数字,然后您可以验证它实际上是一个数字,如果是,您可以使用您的 switch 语句来确定要执行的正确代码。

【讨论】:

    【解决方案3】:

    我猜 menuChoice 是一个字符。在这种情况下,您可以手动检查

    if('0' <= mc && mc <= '9') {
      // do your regular checks
    }
    

    如果它是一个字符串,那么做一个

    try {
      Integer.parseInt(mc)
    } catch (NumberFormatException e) { // Not a number. Do your error reporting stuff }
    

    HTH。

    【讨论】:

    • 对不起! menuChoice 是我的扫描仪名称。
    • 谢谢!我会试试你的建议!
    【解决方案4】:

    Switch 语句仅适用于数字类型(int、byte、char、short)。如果您尝试添加其他任何东西,编译器通常不会允许您使用。但是,如果你以某种方式(cating 或其他方式)想要添加 switch 语句变量,你必须使用 if 语句检查它,如果该变量是你想要的类型。 示例:

    if(var instanceof String){
        System.out.println("Error we don't acceped type string");
    }
    else{
        switch(var){
            ....
        }
    }
    

    【讨论】:

    • 好吧,我还不知道!我会试试的!
    【解决方案5】:

    在进入while循环之前使用这个函数并显示错误信息。

        public static boolean isNumeric(String str)
    {
      NumberFormat formatter = NumberFormat.getInstance();
      ParsePosition pos = new ParsePosition(0);
      formatter.parse(str, pos);
      return str.length() == pos.getIndex();
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-01-29
      • 1970-01-01
      • 2015-05-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多