用while循环计算两个因子?

时间:2014-03-23 01:22:38

标签: java loops while-loop

我希望这个while循环打印所提交数字下面的每两个中的两个(例如,如果100提交它将打印2 4 8 16 32 64)。这就是我所拥有的(我只会包括一部分课程,因为其中有其他内容与此部分无关)

    i = 1;
    Scanner myScanner = new Scanner(System.in);
    System.out.print("Would thoughst be inclined to enter a number fair sir/madam: ");
    String answer = myScanner.nextLine();
    int number = Integer.parseInt(answer);
    System.out.print("Your number set is: ");
    while(i <= number)
    {
    i = 2*i;
    System.out.print(" " + i + " ");
    } 

如果输入100,则打印的内容为:2 4 8 16 32 64 128

如何摆脱最后一个号码?

4 个答案:

答案 0 :(得分:3)

您可以通过修改匹配的逻辑来摆脱这个数字。您的代码正是按照它所说的完成。一个选项是从2开始,并在循环的 end 处增加i,而不是在打印之前。您还可以使用for循环:

for (int i = 2; i < 100; i *= 2)
    ...

如果您想保存最后一个电量,您可以选择一些选项,例如:

int k = 2;
for (int i = k; i < 100; i *= 2) {
    k = i;
    ...
}

或撤消上一次操作:

int i;
for (i = 2; i < 100; i *= 2)
    ...;
i /= 2;

或者检查下一个:

int i;
for (i = 2; i * 2 < 100; i *= 2)
    ...;

以原始格式检查下一个:

while (i * 2 <= number)
    ...;

顺便说一下,你的标题是“因素”,你的描述是“倍数”,你的代码是“权力”......

答案 1 :(得分:2)

在您的代码中

while(i <= number)
{
i = 2*i;
System.out.print(" " + i + " ");
} 

问题是,i当等于64时,确实小于100,因此循环继续。

如果您将其更改为

 i = 2*i;
 while(i <= number)  
 {
    System.out.print(" " + i + " ");
    i = 2*i;
 }

它可以按照您的意愿执行,因为在被分析为while-loop终结符之前预先计算值。

答案 2 :(得分:1)

尝试

while( i <= number / 2)

答案 3 :(得分:1)

  1. 这些是2的幂,而不是2的因子。
  2. “虽然”不是一个字。它应该是“你”。
  3. 在打印之后更新i 的值。