在Java中,是否可以将用户的输入包含在异常消息中,同时将valuse用作int
或double
?例如,他们应该输入一个数字(例如5),而不是像(5r)那样的胖手指。
是否可能有一条消息说“您输入了5r,但应输入了一个号码。”?
我尝试使用传统方式在Java中使用Java进行打印:
try {
System.out.println();
System.out.println("Value: ");
double value = sc.nextDouble();sc.nextLine();
exec.ds.push(value);
}
catch (Exception e1) {
System.out.println(e1+ "You entered: " + value + ": You must enter a number");
}
在这种情况下,我试图在Exception消息中显示value
,其中value是用户的无效输入。
在value
,它会显示错误cannot find symbol
。
以下是我提出的答案。我选择这个答案的原因是因为你的大部分答案产生了输出,“你输入了0.0 ......”因为答案必须首先是要在控制台中打印的字符串。另外,要在程序的其他地方使用数字,String已经强制转换为Double或Integer类型的Object:
String value = null; //declared variable outside of try/catch block and initialize.
try {
System.out.println();
System.out.println("Value: ");
value = sc.nextLine(); //Accept String as most of you suggested
Double newVal = new Double(value); //convert the String to double for use elsewhere
exec.ds.push(newVal); //doulbe is getting used where it would be a 'number' instead of string
}
catch (Exception e1) {
System.out.println(e1+ "You entered: " + value + ": You must enter a number"); //the String valuse is received and printed as a String here, not a 'number'
} //now prints what the users inputs...
答案 0 :(得分:1)
它给出的值错误找不到符号。
您已在本地块中声明了值。你试图在街区外访问它。
是否可能有一条消息说“您输入了5r,但应输入了一个号码。
更好的选择是使用标志变量并循环,直到用户输入正确的数字。
boolean flag = true;
double value = 0;
while(flag)
{
try {
System.out.println();
System.out.println("Value: ");
value = sc.nextDouble();
exec.ds.push(value);
flag = false;
}
catch (Exception e1) {
System.out.println(e1+ "You entered: " + value + ": You must enter a number");
}
}
答案 1 :(得分:1)
获取用户输入:
String input = '';
try{
Console console = System.console();
input = console.readLine("Enter input:");
}
...然后在你的捕获中你可以做到:
catch (Exception e1) {
System.out.println(e1+ "You entered: " + input + ": You must enter a number");
}
除了上述内容,我看不出问题所在。您可以谷歌如何在Java中获取用户输入,然后只需输入,将其放入变量中,并在出错时将其打印出来。
答案 2 :(得分:1)
这不起作用,因为value
不再位于catch块的范围内。相反,您可以在尝试之前声明它:
double value = 0;
try {
System.out.println();
System.out.println("Value: ");
value = sc.nextDouble();sc.nextLine();
exec.ds.push(value);
} catch (Exception e1) {
System.out.println(e1+ "You entered: " + value + ": You must enter a number");
}
但是,如果由于double中的语法错误而引发异常,则无效。要解决此问题,您需要阅读String
,然后转换为double
。
答案 3 :(得分:1)
在这种情况下 - 不,因为调用sc.nextLine()
会导致抛出异常,因此没有值写入变量value
。
此外,在这种情况下,value
是一个局部变量,并且在其他代码块中不可用。
答案 4 :(得分:0)
根据documentation nextDouble()
:
将输入的下一个标记扫描为double。如果下一个标记无法转换为有效的双精度值,则此方法将抛出
InputMismatchException
。
因此,如果输入无法转换为double,则抛出异常。如果你想在异常消息中提供输入的字符串,我建议你把这行读作字符串并尝试将其解析为double,如果失败,你可以在异常消息中包含读取行。