如何在异常消息Java中包含用户输入?

时间:2013-03-24 14:46:04

标签: java exception-handling io console-application

在Java中,是否可以将用户的输入包含在异常消息中,同时将valuse用作intdouble?例如,他们应该输入一个数字(例如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...

5 个答案:

答案 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,如果失败,你可以在异常消息中包含读取行。