0

在 Java 中,是否有可能将用户的输入包含在异常消息中,同时还将值用作intor double?例如,他们应该输入一个数字(例如,5),而不是像 (5r) 这样的胖手指。

是否可以有一条消息说“您输入了 5r,但应该输入了一个数字。”?

我在这里尝试使用传统的获取变量以在 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");                            
}

在这种情况下,我试图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...
4

5 回答 5

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 中获取用户输入,然后只需获取输入,将其放入变量中,并在出错时将其打印出来。

于 2013-03-24T14:50:52.970 回答
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");                            
}

但是,如果由于双精度中的语法错误而引发异常,这将无济于事。要处理这个问题,您需要读取 aString然后转换为 a double

于 2013-03-24T14:50:59.933 回答
1

在这种情况下 - 不,因为调用sc.nextLine()会引发异常,因此不会将值写入 variable value

此外,value在这种情况下,是一个局部变量,并且在其他代码块中不可用。

于 2013-03-24T14:51:09.080 回答
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");                            
    }
}
于 2013-03-24T14:49:15.143 回答
0

根据文档 nextDouble()

将输入的下一个标记扫描为双精度。InputMismatchException如果下一个标记无法转换为有效的双精度值,此方法将抛出。

因此,如果输入无法转换为双精度,则会引发异常。如果您想在异常消息中提供输入的字符串,我建议您将该行作为字符串读取并尝试将其解析为双精度,如果失败,您可以将读取的行包含在异常消息中。

于 2013-03-24T14:53:22.350 回答