我需要用while
循环替换for
循环。如果将6作为参数给出,请确保它产生相同的输出:java PowersOfTwo 6
。
但我的答案不能很好。始终输出:
线程中的异常" main" java.lang.ArrayIndexOutOfBoundsException:0
以下是上一个例子:
public class PowersOfTwo {
public static void main(String[] args) {
int N = Integer.parseInt(args[0]); // last power of two to print
int i = 0; // loop control counter
int v = 1; // current power of two
while (i <= N) {
System.out.println(i + " " + v);
i = i + 1;
v = 2 * v;
}
}
}
以下是我的回答:
public class PowersOfTwo {
public static void main(String[] args) {
int N = Integer.parseInt(args[0]); // last power of two to print
int v = 1; // current power of two
for (int i = 0; i <= N; i ++) {
System.out.println(i + " " + v);
i = i + 1;
v = 2 * v;
}
}
}
答案 0 :(得分:2)
我强烈建议您使用像this这样的工具 - 在大多数与您类似的情况下,它会有所帮助。
尝试迭代一个空数组时发生java.lang.ArrayIndexOutOfBoundsException:0 - 所以检查你是否正确地将params传递给了app并且没有忘记 6 这里:
java PowersOfTwo 6
另外我想你应该删除 i = i + 1; 行。
答案 1 :(得分:1)
您可以使用,
分隔多个变量(和增量命令)。所以你可以做点什么,
for (int i = 0, v = 1; i <= N; i++, v *= 2) {
System.out.println(i + " " + v);
}
最后,当您运行程序时,传递值N
。
java -cp . PowersOfTwo 4
哪个输出
0 1
1 2
2 4
3 8
4 16
对于相同的结果,您可以消除v
,而1
留下的位移i
就像
for (int i = 0; i <= N; i++) {
System.out.println(i + " " + (1 << i));
}
答案 2 :(得分:1)
你在循环中添加了i = i + 1
,这里没有必要,因为它已经由for循环完成了
您可以这样修复:
public class PowersOfTwo {
public static void main(String[] args) {
int N = Integer.parseInt(args[0]); // last power of two to print
int v = 1; // current power of two
for (int i = 0; i <= N; i ++) {
System.out.println(i + " " + v);
//i = i + 1; // you dont need this line
v = 2 * v;
}
}
}
或者这样:
public class PowersOfTwo {
public static void main(String[] args) {
int N = Integer.parseInt(args[0]); // last power of two to print
int v = 1; // current power of two
for (int i = 0; i <= N;) { //no need to i++
System.out.println(i + " " + v);
i = i + 1;
v = 2 * v;
}
}
}