如果我想从args[0]
数组中获取用户输入怎么办,但是如果我(用户)忘记定义它,我想要提示 - 是否最好使用{{ 1}}阻止确定数组项是否为空,或者捕获异常?那么,这是
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;
}
}
答案 0 :(得分:6)
你的第一个例子仍然会抛出异常,因为在if语句中你仍然在访问一个不存在的索引。
如果你想使用if语句,那么你应该检查数组的长度是否大于你试图访问的索引,例如:
if(args.length > 0)
foo = args[0];
答案 1 :(得分:4)
IMO,if-else在这种情况下更好/更快。
如果您在某个方法中并且想要向调用方说出某些问题,并且您无法使用返回值执行该操作,则会使用抛出异常。
但正如乔恩泰勒所说,你的if语句将无法正常运作。
答案 2 :(得分:4)
您需要测试args.length
而不是阅读args[0]
但除了该错误之外,最好使用if/else
,原因如下:
答案 3 :(得分:2)
您真正需要的只是一行代码。
final String foo = args.length > 0? args[0] : getString("Input? ");
答案 4 :(得分:1)
使用if来检查数组是否为空是容易且更快。
答案 5 :(得分:1)
鉴于Jon Taylor所证明的更正,我更倾向于使用if。
不仅速度增益(在你的例子中我认为不会引人注意),而是因为带有if的代码解释了它的意图,简化了代码的未来维护。