Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/375.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 这个While循环如何退出?(爪哇)_Java_While Loop_Binary - Fatal编程技术网

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

Java 这个While循环如何退出?(爪哇),java,while-loop,binary,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]);

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

}

}
公共类二进制{
公共静态void main(字符串[]args){
//读入命令行参数
int n=Integer.parseInt(args[0]);

//将v设置为二的最大幂,即v是一个int,在Java 1/2中,当int为0时,循环将遍历二的所有幂,因此将达到一,然后为0


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

v是一个int,在Java 1/2中,int的值为0。您的循环经过了2的所有幂,因此将达到1,然后是0

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

开始时考虑

n=10

所以

v=8

系统将打印

1010

迭代是:

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

2-2首先考虑

n=10

所以

v=8

系统将打印

1010

迭代是:

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


2-2我觉得你在理解整数除法时遇到了问题。在整数除法中,
3/2
不等于
1.5
,而是
1
。因此同样地,
1/2
不等于
0.5
,而是
0
。因为变量
v
是整数,所以它是整数除以整数
2
始终是整数除法。因此您的变量
v
最终将达到
0
我觉得您在理解整数除法时遇到了问题。在整数除法中,
3/2
不等于
1.5
而是
1
。因此类似地,
1/2
也不等于
因为变量
v
是整数,所以被整数
2
除法总是整数除法。所以变量
v
最终会达到
0

n=2
,然后调试打印
v
每个循环,这将解释一切。你知道int吗eger divisions?如果不搜索它,你会找到答案哦好的!我明白了!我会记住“打印”的东西说
n=2
,然后调试打印
v
每个循环,这会解释一切。你知道整数除法吗?如果不搜索它,你会找到答案哦好的!我明白了!我会记住的“印刷”的东西