2015-10-07 24 views
1

請問如何使用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>"); 
     } 
    } 
+0

它可以是任何數量的像5 – user755806

+0

是初始0在第一線是必要的。 – YoungHobbit

+0

你在字符串的開始處看着填充零嗎? – ochi

回答

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

OUTPUT:

0000 0001 
0000 0010 
0000 0100 
0000 1000 
0001 0000 
+4

只要args [0] ==「4」,這是正確的。 –

+0

嘗試與args [0] ==「5」 - 它打破 – ochi

+0

我很驚訝,像'int bitCount = Integer.toString(值,2).length(),填充;'工作,並正確地創建一個變量填充。一個單獨的'int padding = -1;'或其他東西會使它更具可讀性。 – hinneLinks

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; 
    } 
+0

「%0」+ n +「d%n」是什麼意思? – user755806

+0

@ user755806這種格式可變大小的「n」。因爲你正在接受程序的輸入。你想要多少個'0',總是有'n'的輸出長度。 – YoungHobbit

+0

感謝您的回答。 – user755806

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

似乎工作

0

String.format(和System.out.format,太)支持各種各樣的圖案。您必須查看Javadoc of the Formatter-Class才能找到它。

你做了差不多正確的事情,但國旗0只適用於數字,所以%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