Java 开关盒错误验证
刚刚启动Java,所以这可能是一个简单的问题,但找不到像我这样的问题,所以我想我会发布一个 我正在写一个带有选项1-8的“主菜单”。当有人键入大于8小于1的数字时,我知道如何处理错误,但当他们键入字符或字母时,我不知道如何向他们发送错误消息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:
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();
}