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

dca*_*cas 0 java binary while-loop

我试图弄清楚这个程序是如何工作的,我陷入了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();

}

}
Run Code Online (Sandbox Code Playgroud)

JP *_*mau 6

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

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