【问题标题】:How do you include user input in exception message Java?如何在异常消息 Java 中包含用户输入?
【发布时间】:2013-03-24 14:46:03
【问题描述】:

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

【问题讨论】:

  • 你遇到了什么问题?
  • 更新了 o.p.显示错误
  • 嗯,你有很多答案可供选择。他们基本上都说同样的话,所以你应该都准备好了。

标签: java exception-handling io console-application


【解决方案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】:

    这不起作用,因为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");                            
    }
    

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

    【讨论】:

      【解决方案3】:

      在这种情况下 - 不,因为调用 sc.nextLine() 会导致抛出异常,因此不会向变量 value 写入任何值。

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

      【讨论】:

        【解决方案4】:

        它给出的值是找不到符号。

        您已在本地块中声明该值。而你正试图在块外访问它。

        是否可以让消息说“您输入了 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");                            
            }
        }
        

        【讨论】:

          【解决方案5】:

          根据documentationnextDouble()

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

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

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2021-05-08
            • 2012-03-05
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多