我正在尝试打印一个除以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次。我不确定如何在打印后丢弃初始数字,并且仅在分割后使用存储的数字
答案 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
的值,但它会有效。
或者以这种方式在循环外宣布prevNum
:int 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。
希望得到这个帮助。