Java For-Loop数字系列

时间:2016-10-19 06:22:22

标签: java for-loop

我正在尝试打印一个除以2的数字系列,这将导致输出128,64,32,16,8,4,2,1

int num = 128;
for (int i = 1; i <= 8; i++)
{
    int prevNum = 0;
    prevNum = num / 2;

    System.out.print(prevNum);
    System.out.print(", ");         
}

显然我的当前代码无法正常工作,因为它只输出数字64次。我不确定如何在打印后丢弃初始数字,并且仅在分割后使用存储的数字

5 个答案:

答案 0 :(得分:1)

从您发布的代码中,我觉得您已在代码中的某处初始化num为128。

现在,在循环中,每次在循环中,您将prevNum存储为num/2,换言之128/2。因此,当循环循环8次时,您将64作为输出8次。

我在此代码中建议的更正是您不需要第二个变量prevNum。只需使用num = num/2并打印num变量的值即可。这将解决您的问题。

此循环的更好代码是:

int num = 128;
while (num > 1) // This takes care of the loop. 
                //Also if you write num = 256, then also this loop would work.
{
    num = num / 2;

    System.out.print(num);
    System.out.print(", ");         
}

答案 1 :(得分:1)

尝试将prevNum替换为num,这会更改num的值,但它会有效。

或者以这种方式在循环外宣布prevNumint preNum = num;,并将第4行替换为prevNum = prevNum / 2;

答案 2 :(得分:1)

int num = 128;
        int prevNum = num;
for (int i = 1; i <= 8; i++)
{

    prevNum = prevNum / 2;

    System.out.print(prevNum);
    System.out.print(", ");         
}

这与你的工作方式有关。但是,有更有效的方法可以获得相同的结果。

OP,你在for循环中初始化prevNum = 0并且这样做,对于每次迭代,它被分配给值0.你真正想要的是将前一个除法的商继承到下一个迭代。因此,为了做到这一点,prevNum在循环外被定义为值设置为num(即128)。并且在每次迭代中,prevNum被除以2,结果被分配回prevNum。

答案 3 :(得分:1)

在循环之外没有局部变量:

for (int i = 128; i > 0; i = i / 2) System.out.print(i + (i > 1 ? ", " : ""));

我们从初始值128开始循环,每次迭代除以2(i = i / 2)。 然后,如果满足i,则打印,的当前值并附加i > 1

输出:

128, 64, 32, 16, 8, 4, 2, 1

答案 4 :(得分:0)

int num = 128;
int prevNum = num; // modify here.
for (int i = 1; i <= 8; i++)
{
    prevNum = prevNum / 2;

    System.out.print(prevNum);
    System.out.print(", ");         
}

修改您没有减少实际数量。在每次迭代中,您再次划分相同的数字。但是你应该在每次迭代时将这个prevNum除以2。

希望得到这个帮助。