0

刚开始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."); 
            }
        }
4

5 回答 5

0

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){
        ....
    }
}
于 2013-09-30T18:17:48.780 回答
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();
}
于 2013-09-30T18:28:24.620 回答
0

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

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

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

伪代码:

String input = //
if (containsNonNumerics(input))
    throw error
inputAsInt = castToInt(input)
if (outOfRange(inputAsInt)
    throw error
switch //your current code goes here
于 2013-09-30T18:12:36.907 回答
0

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

于 2013-09-30T18:15:24.130 回答
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。

于 2013-09-30T18:15:24.433 回答