切换案例错误验证

时间:2013-09-30 18:07:14

标签: java validation error-handling switch-statement

刚刚启动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."); 
            }
        }

5 个答案:

答案 0 :(得分:0)

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

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

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

伪代码:

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

答案 1 :(得分:0)

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

答案 2 :(得分:0)

我猜是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。

答案 3 :(得分:0)

切换语句仅适用于数字类型(int,byte,char,short)。如果你尝试添加切换开关,那么一般情况下,讽刺者会让你满意。但是,如果你以某种方式(cating或其他方式)想要添加switch语句varible,你必须检查它是否如果varible是你想要的类型的statment。 示例:

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

答案 4 :(得分:0)

在进入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();
}