如何反转从 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();
}
}
我有一些代码可以将十进制转换为二进制,但是使用我这里的转换方法,数字将以正确二进制的相反顺序打印。如何在不更改转换方法或删除 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();
}
}