簡體   English   中英

如何反轉從while循環生成的一系列數字的順序?

[英]How do I reverse the order of a series of numbers that are generated from a while loop?

我有一些代碼可以將十進制轉換為二進制,但是使用轉換方法時,這里的數字將以正確二進制的相反順序打印。 如何在不更改轉換方法或刪除while循環的情況下反轉得到的結果? 我當時正在考慮在循環中創建一個數組,然后在for循環中創建一個數組,該數組將以相反的順序打印出數字,但是我不知道如何使用Java進行此操作。

    System.out.println("Enter a number: ");
    int num = user.nextInt();

    while (num > 0) {
        int remainder = num % 2;
        num = num / 2;

         if(remainder > 0) {
             System.out.print("1");
         }else if (remainder == 0) {
            System.out.print("0");
         }else {

         }
    }

無需立即將其打印出來,而是將輸出保存到StringBuilder,然后在完成時將其反轉

樣品

System.out.println("Enter a number: ");
StringBuilder buf = new StringBuilder ();
int num = user.nextInt();

while (num > 0) {
    int remainder = num % 2;
    num = num / 2;

     if(remainder > 0) {
         buf.append("1");
     }else if (remainder == 0) {
        buf.append("0");
     }else {
         // not sure what your logic is here
     }
}
buf.reverse();
System.out.println (buf.toString());

要么

因為@billk暗示您可以在零位置插入“ 0”或“ 1”字符串,因此實際上您是在prepending加上字符串而不是在后面。 然后,您將不需要reverse StringBuilder對象

    while (num > 0) {
    int remainder = num % 2;
    num = num / 2;

     if(remainder > 0) {
         buf.insert(0, "1");
     }else if (remainder == 0) {
        buf.insert(0, "0");
     }else {
         // not sure what your logic is here
     }
}
System.out.println (buf.toString());

最簡單的事情就是隨手構建字符串:

String result = "";
while (num > 0) {
    if (num % 2 == 0)
        result = "0" + result;
    else
        result = "1" + result;
    num /= 2;
}
System.out.println(result);

以下代碼可用於轉換8位整數,8位二進制字符串

String.format(”%8s”, Integer.toBinaryString(x)).replace(’ ’, ’0’))


如果您已經有代碼,但是只需要反轉它,則使用StringBuilder類存儲您的字符串值,然后使用StringBuilder類的reverse()方法。

可以在下面找到有關StringBuilder類的更多詳細信息
https://docs.oracle.com/javase/7/docs/api/java/lang/StringBuilder.html#reverse()

使用數組的工作代碼:如果要使用數組,可以使用類似的方法。

import java.util.Scanner;

public class Rev {
    private Scanner user;

    Rev() {
        user = new Scanner(System.in);
        System.out.println("Enter a number: ");
        int num = user.nextInt();

        int binary[] = new int[40]; // you can use an array like this
        int index = 0;

        while (num > 0) {
            binary[index++] = num % 2;
            num = num / 2;
        }
        if (binary.length != 0) {
            for (int i = index - 1; i >= 0; i--) {
                System.out.print(binary[i]);
            }
        }

    }

    public static void main(String args[]) {
        new Rev();
    }

}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM