繁体   English   中英

使用Java打印模式?

[英]Print pattern using 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>");
        }
    }
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

您无需遍历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;
    }

我尝试了这个:

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)));
}

似乎可以工作

String.format (以及System.out.format )也支持多种模式。 您必须查看Formatter -ClassJavadoc才能找到它。

您所做的事几乎是正确的,但是标志0仅适用于数字,因此%4s将不起作用。 使用%04d之类的数字转换( df等)时,如果输出少于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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM