【发布时间】:2012-06-29 09:38:47
【问题描述】:
如果我想从 args[0] 数组中获取用户输入,但万一我(用户)忘记定义它,我想要一个提示 - 使用 if 块更好吗确定数组项是否为空,或捕获异常?那么,这是
public class Stuff {
static Scanner input = new Scanner(System.in);
public static void main(String[] args) {
String foo;
if(args.length > 0) {
foo = args[0];
}
else {
foo = getString("Input? ");
}
}
public static String getString(String prompt) {
System.out.print(prompt + " ");
String answer = input.nextLine();
return answer;
}
}
更好或更差
public class Stuff {
static Scanner input = new Scanner(System.in);
public static void main(String[] args) {
String foo;
try {
foo = args[0];
}
catch(ArrayIndexOutOfBoundsException e) {
foo = getString("Input? ");
}
}
public static String getString(String prompt) {
System.out.print(prompt + " ");
String answer = input.nextLine();
return answer;
}
}
【问题讨论】:
-
行为不一样。 if 示例仍然会抛出 ArrayOutOfBoundException,因为您正在尝试访问 args[0]。您应该使用 args.length 来检查数组是否为空,然后检查数组的第一个元素是否为空。
-
“if 示例仍然会抛出
ArrayOutOfBoundException,因为您正在尝试访问args[0]。” OP 已将数组检查更改为if(args.length > 0) {。原来的问题仍然存在。哪个结构更好?if-else还是try-catch?以何种方式更好,为什么?
标签: java if-statement try-catch