请问如何使用java帮助如何打印下面的格式?
0001
0010
0100
1000
下面的代码没有给我所需的输出。
public static void main(String[] args) {
if (args.length > 0) {
int n = Integer.parseInt(args[0]);
int m = 1;
for (int i = 1; i <= n; ++i) {
m *= 2;
}
System.out.println("# bits : " + n);
System.out.println("# values: " + m);
String format = "%" + n + "s";
for (int i = 0; i < m; ++i) {
System.out.println(String.format(format, Integer.toString(i, 2)));
}
} else {
System.out.println("Usage: BinaryDemo <n>");
}
}
答案 0 :(得分:2)
public static void main(String[] args) {
for (int i = 0; i < 4; i++) {
System.out.format("%04d%n", Integer.parseInt(Integer.toString((int) Math.pow(2, i), 2)));
}
}
编辑:
public static void main(String[] args) {
int n = 5, padding = findPadding((int) Math.pow(2, n - 1));
for (int i = 0; i < n; i++) {
printBinary((int) Math.pow(2, i), padding);
}
}
static int findPadding(int value) {
int bitCount = Integer.toString(value, 2).length(), padding;
for (int i = 2; ; i++) {
padding = (int) Math.pow(2, i);
if (padding >= bitCount) {
return padding;
}
}
}
static void printBinary(int value, int padding) {
String binaryString = String.format("%0" + padding + "d", Integer.parseInt(Integer.toString(value, 2)));
int i = 0;
for (char ch : binaryString.toCharArray()) {
System.out.print(ch);
if (++i == 4) {
System.out.print(" ");
i = 0;
}
}
System.out.println();
}
输出:
0000 0001
0000 0010
0000 0100
0000 1000
0001 0000
答案 1 :(得分:2)
您不需要遍历m
来打印模式。您可以使用n
用户输入形成模式,并在第一个循环中打印它。
String format = "%0"+n+"d%n";
for (int i = 0; i < n; ++i) {
System.out.format(format, Integer.parseInt(Integer.toString(m, 2)));
m = m << 1;
}
答案 2 :(得分:0)
我试过了:
for (int i = 0; i < m; ++i) {
// modified this line - format (above) not needed anymore
// n below refers to the number of bits calculated above so it will pad correctly
System.out.format("%0" + n + "d%n", Integer.parseInt(Integer.toString(i, 2)));
}
似乎工作
答案 3 :(得分:0)
String.format
(以及System.out.format
也支持各种各样的模式。您必须查看Javadoc of the Formatter
-Class才能找到它。
你做的几乎是正确的,但标志0
仅适用于Numbers,因此%4s
无效。通过数字转换(d
,f
等),如%04d
它可以工作,如果输出短于4位,输出将有额外的零。它也可以使用空格而不是零。
String pattern = "%04d";
System.out.println(String.format(pattern, 1));
System.out.println(String.format(pattern, 11));
System.out.println(String.format(pattern, 111));
System.out.println(String.format(pattern, 1111));
System.out.println(String.format(pattern, 11111));
输出:
0001
0011
0111
1111
11111