如何反转从 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 中,然后在完成时 reverse

样本

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 class 来存储您的字符串值,然后使用 StringBuilder class 的 reverse() 方法。

有关 StringBuilder class 的更多详细信息,请参见下方
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();
    }

}