使用java打印模式?

时间:2015-10-07 18:38:35

标签: java

请问如何使用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>");
        }
    }

4 个答案:

答案 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无效。通过数字转换(df等),如%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