您好,我被困在一个简单的 Java 练习中,我希望有人能提供帮助。
抱歉,如果这真的很简单,我是一个 java 新手。
我遇到的问题是:如果用户输入“help”以外的字符串,例如“foo”,则会收到以下错误:
Exception in thread "main" java.lang.NumberFormatException: For input string: "foo"
at java.lang.NumberFormatException.forInputString(NumberFormatException.java:48)
at java.lang.Integer.parseInt(Integer.java:447)
at java.lang.Integer.parseInt(Integer.java:497)
at NumberGuess.main(NumberGuess.java:10)
我认为正在发生的事情:“foo”没有被“else”捕获,因为 args[0] 是一个对象引用,而不是真正的字符串。
我想知道的是:如何捕获除“help”或数字“1”到“5”之外的所有内容?
这是代码...
public class NumberGuess {
public static void main(String args[]){
int r;
int g;
if ((args[0].compareTo("help")) == 0){
System.out.println("Enter a number between 1-5 to play.");
} else if (Integer.parseInt(args[0]) > 0 && Integer.parseInt(args[0]) <= 5){
r = ((int)(Math.random()));
g = Integer.parseInt(args[0]);
if (r == g){
System.out.println("YOU WON!");
} else {
System.out.println("Wrong: number was " + r);
}
} else {
System.out.println("Something went horribly wrong.");
}}}
最佳答案
程序逻辑本质上是,“如果参数零不是'help',则将其解析为整数......”此时,会抛出异常,因为“foo”不是有效的整数。
最简单的方法是捕获 NumberFormatException
并打印更有用的消息。
if ("help".equals(args[0])) {
System.out.println("Enter a number between 1 and 5 to play.");
}
else {
int number;
try {
number = Integer.parseInt(args[0]);
}
catch (NumberFormatException ex) {
System.out.println("Input is not an integer: " + args[0]);
return;
}
if ((number < 1) || (number > 5)) {
System.out.println("Number out of bounds: " + number);
return;
}
int r = new java.util.Random().nextInt(5) + 1;
if (number == r)
System.out.println("You won!");
else
System.out.println("You lost!");
}
关于java - 解析 java main args[] 数组错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/989545/