如何在while循环之后用空格打印userNum = 1?

时间:2017-02-02 02:54:09

标签: java while-loop

我的任务(来自Zybooks的Java课程简介)说:"写一个while循环,打印userNum除以2(整数除法),直到达到1.按空格跟踪每个数字。 userNum = 20的示例输出: 20 10 5 2 1

注意:此活动将执行四项测试,其中userNum = 20,然后使用userNum = 1,然后使用userNum = 0,然后使用userNum = -1。"

我可以打印" 20 10 5 2 1",但是当我成功地在上面的数字序列的末尾添加一个空格时,它不会添加空格到1当userNum = 1时。例如:" 1"而不是" 1" for userNum = 1.我现在只关注1和0和-1之后。此外,下面注释掉的while循环只运行一个无限循环,但我认为无论如何添加它都会很有用,对不起这个混乱。到目前为止,这是我的代码,非常感谢您提前:

import java.util.Scanner;

public class DivideByTwo {
   public static void main (String [] args) {
      int userNum = 0;

      userNum = 20;

      System.out.print(userNum);

      while (userNum > 1) { 
         System.out.print(" " + (userNum/2));
         userNum = userNum/2;


      if (userNum == 1) {
         System.out.print(" ");
      }
   }
    /*  while (userNum <= 1) {
        System.out.print(" ");
        userNum = userNum + 1; 
      }*/

      System.out.println("");

      return;
   }
}

5 个答案:

答案 0 :(得分:2)

您可以将此块移出while循环 -

} // end of the while loop
if (userNum == 1) {
     System.out.print(" ");
}

或者,您不需要ifwhile (userNum > 1)确保检查得到处理。

要使用现有代码,请更改为 -

while (userNum > 1) { 
    System.out.print(" " + (userNum/2));
    userNum = userNum/2;
}
System.out.println(" ");

答案 1 :(得分:1)

在这个初学者计划工作5天后,我终于找到了解决方案。它首先检查userNum是否大于或等于1(如果它是-1或0(-1 / 2,0 / 2,没有打印),则打印出原始的userNum值(20,1然后,它将此值添加到空格中,重复该过程,然后打印新的userNum值(userNum / 2).while循环使此过程重复,直到该值不再是> = 1。它终于结束并打印了一个换行符。比我原来的想法简单得多:

while (userNum >= 1) {
        System.out.print(userNum + " ");
        userNum = userNum / 2;
     }

  System.out.println("");

  return;

答案 2 :(得分:1)

public class DivideByTwo {
   public static void main (String [] args) {
      int userNum = 20;

      while (userNum >= 1) { 
         System.out.print(userNum+" ");
         userNum = userNum/2;
      }

      return;
   }
}

如果您将userNum硬设置为20,则无需声明它然后分配值,您可以在同一行中执行此操作。

所以改变: 如果您更改while循环以检查(userNum >= 1),则循环将在其操作中包含数字1(如果我没有弄错,Java将向下舍入整数设置)。

所以会发生的事情是它会看到userNum大于或等于1,然后打印userNum和一个空格,直到该值小于1.

这应输出您之后的字符串。

但是如果它最后连续输出一个1 1 1 1 1 1 1 1的字符串,你可以使用floor()函数来确保它向下舍入。

答案 3 :(得分:1)

这个while循环应该可以解决问题,而且非常简单。

while(true){
    System.out.print(number + " ");
    number = number / 2;

    if(number==1){
        break;
    }
}

答案 4 :(得分:1)

你正在使用错误的循环; for循环比while循环更恰当。您的代码可以是:

System.out.print(userNum)
for (;userNum > 1; userNum /= 2)
    System.out.print(" " + usernum);