如何摆脱输出“java.lang.Exception
How to get rid of output "java.lang.Exception
我写了一些简单的代码,但我不明白为什么输出是这样的。
代码如下:
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 范围内输入整数:-2
java.lang.Exception:数字:-2 超出范围。必须在 1..100
在 1..100 范围内输入整数:f
输入的不是整数
在 1..100(含)范围内输入整数:3
谢谢。您输入了 3
我不明白的是为什么一般异常会在 "Number: a out of range. Must be in 1..100" 的所需输出之前抛出 "java.lang.Exception: " 有什么方法可以摆脱这部分输出吗?
您正在抛出一个 java.lang.Exception,所以这就是被捕获的内容,并且输出只是异常标准输出的格式。如果您只是想打印字符串,只需执行
System.out.println("Number:" + a + " out of range. Must be in 1..100");
在 if 语句块中,因为你的 while 循环已经捕获了相同的条件,所以异常是多余的。也就是说,您已经检查了数字是否超出范围
改变这个:
if(a < 1 || a > 100) throw new Exception("Number:" + a + " out of range. Must be in 1..100");
对此:
if(a < 1 || a > 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 种不同的情况定义不同的行为:
- 输入的不是整数
- 输入超出范围
- 所有其他例外情况
我写了一些简单的代码,但我不明白为什么输出是这样的。
代码如下:
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 范围内输入整数:-2
java.lang.Exception:数字:-2 超出范围。必须在 1..100
在 1..100 范围内输入整数:f
输入的不是整数
在 1..100(含)范围内输入整数:3
谢谢。您输入了 3
我不明白的是为什么一般异常会在 "Number: a out of range. Must be in 1..100" 的所需输出之前抛出 "java.lang.Exception: " 有什么方法可以摆脱这部分输出吗?
您正在抛出一个 java.lang.Exception,所以这就是被捕获的内容,并且输出只是异常标准输出的格式。如果您只是想打印字符串,只需执行
System.out.println("Number:" + a + " out of range. Must be in 1..100");
在 if 语句块中,因为你的 while 循环已经捕获了相同的条件,所以异常是多余的。也就是说,您已经检查了数字是否超出范围
改变这个:
if(a < 1 || a > 100) throw new Exception("Number:" + a + " out of range. Must be in 1..100");
对此:
if(a < 1 || a > 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 种不同的情况定义不同的行为:
- 输入的不是整数
- 输入超出范围
- 所有其他例外情况