【发布时间】:2020-03-01 06:28:59
【问题描述】:
课程简介要求我将可选的 cmd 参数分配给静态最终变量。
我尝试在 main() 中执行此操作,但编译器抱怨“无法为最终变量赋值”。我尝试在 main() 调用的静态方法中执行此操作,但同样的错误。我听说过在其他答案中使用了静态块,但是当我决定分配什么时,我需要能够访问 cmd args。我对参数解析也有些头疼,因为两个参数都应该有默认值,除非提供了一个。非常欢迎任何奖金建议。
public class FibonacciNim {
private static Scanner myScanner = new Scanner(System.in);
private static final int NO_OF_HEAPS;
private static final int TOKENS_PER_HEAP;
public static void main(String[] args) {
// set heaps and tokens using args
if (args.length == 0) {
NO_OF_HEAPS = 3;
TOKENS_PER_HEAP = 9;
} else {
boolean usageCorrect = false;
for (int i = 0; i < args.length-1; i++) {
if (args[i].equals("-heaps")) {
try {
NO_OF_HEAPS = Integer.parseInt(args[i+1]));
usageCorrect = true;
} catch (NumberFormatException e) {
usageCorrect = false;
}
} else if (args[i].equals("-tokens")) {
try {
TOKENS_PER_HEAP = Integer.parseInt(args[i+1]);
usageCorrect = true;
} catch (NumberFormatException e) {
usageCorrect = false;
}
}
}
}
...
}
...
}
感谢阅读!
【问题讨论】:
-
静态变量真的需要是final的吗?
-
嘿看起来是个好问题!欢迎!所以 final 可能是 Java 中预先使用的关键字,你也可以尝试在 main 中定义这些变量,因为它们在这里看起来超出了范围。
标签: java static command-line-arguments final