需要帮忙!用“for”循环替换“while”循环

时间:2017-03-18 21:59:24

标签: java

我需要用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;
        }
    }
}

3 个答案:

答案 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;
        }
    }
}