繁体   English   中英

如何在 while 循环后打印 userNum = 1 并带有空格?

[英]How can I make a while loop print userNum = 1 with whitespace after it?

我的作业(来自 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”,但是当我成功地在上述数字序列的末尾添加一个空格时,当 userNum = 1 时它不会将空格添加到 1。例如:“1” userNum = 1 而不是“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;
   }
}

您可以将这个块移出while循环 -

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

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


要使用您现有的代码,请更改为——

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

在这个初学者程序上工作了 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;
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()函数来确保它向下舍入。

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

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

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

您使用了错误类型的循环; for循环比while循环更合适。 您的代码可以是:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM