Java 开关盒错误验证

Java 开关盒错误验证,java,validation,error-handling,switch-statement,Java,Validation,Error Handling,Switch Statement,刚刚启动Java,所以这可能是一个简单的问题,但找不到像我这样的问题,所以我想我会发布一个 我正在写一个带有选项1-8的“主菜单”。当有人键入大于8小于1的数字时,我知道如何处理错误,但当他们键入字符或字母时,我不知道如何向他们发送错误消息 while(menuChoice != 8) { //main menu that loops switch(menuChoice) { case 1:

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

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

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

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

伪代码:

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

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

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

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

HTH.

开关状态仅适用于数字类型(int、byte、char、short)。如果您尝试加载项切换任何其他内容,公司通常不会允许您。但是,如果您不知何故(通过cating或其他方式)希望添加switch Station Variable,则必须在之前使用if Station检查该Variable是否为您想要的类型。 例如:

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

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

你的条件也不是做你认为它是什么。在决定仅使用有效输入之前,请检查输入?什么类型是
menuChoice
,以及如何检索它?menuChoice是我的扫描仪名称。。我应该给它贴上标签!很抱歉menuChoice是我的扫描仪名称。谢谢!我会试试你的建议!好吧,我还不知道呢!我会试试的!我不知道开关只能处理数值。。。这是有道理的,因为我已经尝试了一切(我知道到目前为止)让它工作!我会试试你的建议!谢谢@User2831287我并不是说它只能处理数值。我是说如果你说
x!=2
并且该代码是编译的,这意味着
x
必须是某种数字类型,因此不能有字符值。我从你提供的代码中推断出了一些细节。
    public static boolean isNumeric(String str)
{
  NumberFormat formatter = NumberFormat.getInstance();
  ParsePosition pos = new ParsePosition(0);
  formatter.parse(str, pos);
  return str.length() == pos.getIndex();
}