这个While循环如何退出? (Java)的

时间:2015-06-29 14:37:01

标签: java while-loop binary

我试图弄清楚这个程序是如何工作的,我陷入了While循环,我不明白第二个循环如何退出,因为v永远不会等于0或负数。既然它是退出该循环的唯一条件,还是我错过了更深层次的东西?该代码将整数(> 0)转换为二进制。

public class Binary { 
public static void main(String[] args) { 

    // read in the command-line argument
    int n = Integer.parseInt(args[0]);

    // set v to the largest power of two that is <= n
    int v = 1;
    while (v <= n/2) {
        v = v * 2;
    }

    // check for presence of powers of 2 in n, from largest to smallest
    while (v > 0) {

        // v is not present in n 
        if (n < v) {
            System.out.print(0);
        }

        // v is present in n, so remove v from n
        else {
            System.out.print(1);
            n = n - v;
        }

        // next smallest power of 2
        v = v / 2;
    }

    System.out.println();

}

}

3 个答案:

答案 0 :(得分:6)

v是一个int,在Java 1/2中作为int给出0.你的循环遍历所有2的幂,所以将达到1,然后是0。

在调试器中运行它以查看!

答案 1 :(得分:0)

想一想

  

N = 10

所以

  

V = 8

系统将打印

  

1010

,迭代次数为:

1 - 10> 8 else语句,因此打印1和:n = 2,v = 4

2 - 2&lt; 4 if语句,因此打印0和:v = 2

3 - 2 = 2 else语句,因此打印1和:n = 0,v = 1

4 - 0&lt; 1 if语句,因此打印0和:n = 0,v = 1/2,0为整数

在下一次迭代期间,条件不再满足,代码结束。

答案 2 :(得分:0)

我觉得你在理解 Integer Division 时遇到了问题。在整数除法中,3/2不等于1.5,而是1。因此,类似1/2不等于0.5,而是0。由于变量v是整数,因此除以整数2始终是整数除法。因此,您的变量v最终会达到0