【问题标题】:How to get rid of output "java.lang.Exception如何摆脱输出“java.lang.Exception
【发布时间】:2019-11-04 20:59:56
【问题描述】:

我写了一些简单的代码,但我不明白为什么输出是这样的。

代码如下:

public static void main( String args[] )
{
    // ADD LOOP CODE, ADD TRY CATCH BLOCK(S) AS NEEDED BELOW
    // BE SURE TO LEAVE THESE 3 LINES IN THERE SOMEWHERE  
    // SINCE THEY CONTAIN THE EXACT EXPECTED OUTPUT TEXT

    Scanner kbd = new Scanner(System.in);
    int a = 0;
    String token;
    do
    {
        try
        {
            System.out.print("Enter int in range 1..100 inclusive: ");
            token = kbd.next();
            a = Integer.parseInt(token);
            if(a < 1 || a > 100) throw new Exception("Number:" + a + " out of range. Must be in 1..100");
        }
        catch(NumberFormatException nfe)
        {
            System.out.println("Input was not an integer");
        }
        catch(Exception e)
        {
            System.out.println(e);
        }
    }
    while(a < 1 || a > 100);
    System.out.format("Thank you. You entered %d\n", a );

    kbd.close();

}

这是输出:

在 1..100 范围内输入 int:-2

java.lang.Exception:数字:-2 超出范围。必须在 1..100

在 1..100 范围内输入 int:f

输入不是整数

在 1..100 范围内输入 int:3

谢谢。您输入了 3

我不明白的是为什么一般异常会在“数字:超出范围。必须在 1..100”的所需输出之前抛出“java.lang.Exception:”有什么方法可以去掉这部分输出?

【问题讨论】:

    标签: java exception throw


    【解决方案1】:

    你正在抛出一个 java.lang.Exception ,所以这就是捕获的内容,并且该输出只是异常标准输出的格式。如果您只是想打印您的字符串,只需执行

    System.out.println("Number:" + a + " out of range. Must be in 1..100");
    

    在 if 语句块中,因为你的 while 循环已经捕获了相同的条件,所以异常是多余的。即您已经检查了数字是否超出范围

    【讨论】:

    • 这是不正确的,因为其他异常会导致输入超出范围的消息,这是具有误导性的。
    • 在 parseInt() 代码行期间会抛出所有其他异常,因此不会到达 if 语句。仅当 parseInt() 返回有效整数时才会输出打印。我编辑了我的答案以澄清我的打印语句将添加到 if 语句块中
    • 这也是不正确的。 try 块还包括kbd.next(),因此可能会抛出一些其他异常,例如某种 IOException。
    • 那也是在 if 语句之前。我很困惑,如果成功输入了数字,我的解决方案中的打印语句将如何与这些其他异常一起打印。
    【解决方案2】:

    改变这个:

    if(a &lt; 1 || a &gt; 100) throw new Exception("Number:" + a + " out of range. Must be in 1..100");

    到这里:

    if(a &lt; 1 || a &gt; 100) throw new IllegalArgumentException("Input was not in range [1,100]");

    然后捕获异常并只打印消息:

    catch(NumberFormatException nfe) {
      System.out.println("Input was not an integer");
    }
    catch(IllegalArgumentException iae) {
      System.out.println(iae.getMessage());
    }
    catch(Exception e) {
      System.out.println(e);
    }
    

    如果您希望显示其他文本,则在创建新的 IllegalArgumentException 时将消息定义为您的参数。如果您不希望异常导致打印任何异常,请从您的 catch 块中删除 System.out.println(iae.getMessage());

    这将允许您为 3 种不同的情况定义不同的行为:

    • 输入不是整数
    • 输入超出范围
    • 所有其他例外情况

    【讨论】:

      猜你喜欢
      • 2015-02-13
      • 2017-02-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-01-03
      • 2016-08-21
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多