簡體   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