2010-10-21 66 views
1

我已經矩陣打印表格在cmd中使用Java

1 2 3 4 5 6 
2 3 4 5 6 1 
3 4 5 6 1 2 
4 5 6 1 2 3 
5 6 1 2 3 4 
6 1 2 3 4 5 

下......,我希望把它在一個表

| 1 2 3 4 5 6 
--------------- 
1| 1 2 3 4 5 6 
2| 2 3 4 5 6 1 
3| 3 4 5 6 1 2 
4| 4 5 6 1 2 3 
5| 5 6 1 2 3 4 
6| 6 1 2 3 4 5 

有n個元素是它可以打印這樣的動態表嗎?

public static void main (String [ ] args) { 
     int n = Integer.parseInt(args[0]); 
     for(int w = 1; w <= n; w++){ 
      System.out.println(""); 
      for(int p = w; p <= n + w - 1; p++){ 
       System.out.print((p-1)%n+1 + " "); 
      }   
     } 
    } 
+0

是的我相信你的代碼塊顯示它是動態的,授予我沒有運行代碼 – Woot4Moo 2010-10-21 15:07:13

+0

雅,它是什麼Q.? – 2010-10-21 15:11:09

+0

如何動態地在表格佈局中包裝表格內容 – 2010-10-21 15:12:14

回答

1

取決於數組,假設你事先知道數組的大小。在Java數組可以又名子陣被吉格舞不必是相同的大小,記住什麼:

測試用例:

public static void main(String[] args) { 
    System.out.println(toTableString(new int[][] { { 1, 2, 3, 4, 5, 6 }, 
      { 2, 3, 4, 5, 6, 1 }, { 3, 4, 5, 6, 1, 2 }, 
      { 4, 5, 6, 1, 2, 3 }, { 5, 6, 1, 2, 3, 4 }, 
      { 6, 1, 2, 3, 4, 5 } })); 
    System.out.println(); 
    System.out.println(toTableString(new int[][] { { 1 }, { 2, 3 }, 
      { 3, 4, 5 }, { 4, 5, 6, 1 }, { 5, 6, 1, 2, 3 }, 
      { 6, 1, 2, 3, 4, 5 } })); 
    System.out.println(); 
    System.out.println(toTableString(new int[][] { { 1 }, { 20, 300 }, 
      { 3000, 40000, 50000 }})); 
} 

輸出:

| 0 1 2 3 4 5 
—————————————— 
0| 1 2 3 4 5 6 
1| 2 3 4 5 6 1 
2| 3 4 5 6 1 2 
3| 4 5 6 1 2 3 
4| 5 6 1 2 3 4 
5| 6 1 2 3 4 5 

| 0 1 2 3 4 5 
—————————————— 
0| 1 
1| 2 3 
2| 3 4 5 
3| 4 5 6 1 
4| 5 6 1 2 3 
5| 6 1 2 3 4 5 

    | 00000 00001 00002 
———————————————————————— 
00000| 00001 
00001| 00020 00300 
00002| 03000 40000 50000 

運行在線:link

+0

但'toTableString'不是Java標準方法... – 2010-10-21 17:37:33

+0

您可以在「在線運行:鏈接」下看到它。 – Margus 2010-10-21 18:52:56

0

如果我是你,我會看看像OpenCSV這樣的圖書館。雖然不是特別適合您的需要,但它們會很有用。

事實上,您的表格顯示可以被視爲打印CSV文件的一種方式。因此,構建適合該CSV文件並將其打印到System.out的結構可以使用乾淨的佈局來完成工作(儘管在依賴性方面絕對不是最佳的)。

1

原油,但應該工作。

//This method adds required number spaces for alignment. 
private static String formatString(String s, int in) { 
     return String.format("%1$-" + (in + 1) + "s", s); 
    } 

    public static void main(String[] args) {  

     int n = Integer.parseInt(args[0]);   
     int in = args[0].length(); 
     System.out.print(formatString(" ", in)); 
     System.out.print("| "); 

     for (int w = 1; w <= n; w++) {    
      System.out.print(formatString(w + "", in)); 
     } 
     System.out.println(""); 
     for (int w = 1; w <= n + 2; w++) { 
      System.out.print(formatString("-", in)); 
     } 

     for (int w = 1; w <= n; w++) { 
      System.out.println(""); 
      System.out.print(formatString((w + ""), in)); 
      System.out.print("| "); 
      for (int p = w; p <= n + w - 1; p++) { 

       System.out.print(formatString(((p - 1) % n + 1) + "", in)); 
      } 
     } 

    } 

編輯:編輯代碼以考慮對齊問題。

1

這可能需要相當多的東西,你可以扔掉它:

public static void main(String[] args) { 
    int[][] matrix = { 
     { 1, 2, 3, 4, 5, 6 }, 
     { 2, 3, 4, 5, 6, 1 }, 
     { 3, 4, 5, 6, 1, 2 }, 
     { 4, 5, 6, 11, 2, 3 }, 
     { 5, 116, 1, 2, 3, 4 }, 
     { 5, 116, 1, 2, 3, 4 }, 
     { 5, 116, 1, 2, 3, 4 }, 
     { 5, 116, 1, 2, 3, 4 }, 
     { 5, 223523526, 1, 2, 3, 4 }, 
     { 5, 116, 1, 2, 3, 4 }, 
     { 5, 116, 1, 2, 3, 4 }, 
     { 5, 116, 1, 2, 3, 4 }, 
     { 5, 116, 1, 2, 3, 4 }, 
     { 6, 1, 2, 3, 4, 5 } 
    }; 

    //compute the maximum header width (the number of columns) 
    int rows = matrix.length; 
    int cols = rows > 0 ? matrix[0].length : 0; 
    int maxRowHeaderWidth = Integer.toString(rows).length(); 

    int maxCellWidth = 1; 
    //compute the maximum cell width 
    for (int[] row : matrix) { 
     for (int cell : row) { 
      maxCellWidth = Math.max(Integer.toString(cell).length(), maxCellWidth); 
     } 
    } 
    maxCellWidth = Math.max(maxCellWidth, Integer.toString(cols).length()); 

    StringBuilder patternBuilder = new StringBuilder(); 

    //the header 
    for (int i = 0; i < maxRowHeaderWidth; i++) { 
     patternBuilder.append(' '); 
    } 
    patternBuilder.append('|'); 
    for (int i = 0; i < cols; i++) { 
     patternBuilder.append(String.format("%" + (maxCellWidth+1) + "d", i+1)); 
    } 
    patternBuilder.append('\n'); 


    //the line of dashes 
    int rowWidth = patternBuilder.length(); 
    for (int i = 0; i < rowWidth; i++) { 
     patternBuilder.append('-'); 
    } 
    patternBuilder.append('\n'); 

    //each row 
    for (int i = 0; i < matrix.length; i++) { 
     patternBuilder.append(String.format("%" + (maxRowHeaderWidth) + "d|", i+1)); 
     for (Integer cell : matrix[i]) { 
      patternBuilder.append(String.format("%" + (maxCellWidth+1) + "d", cell)); 
     } 
     patternBuilder.append('\n'); 
    } 

    System.out.println(patternBuilder); 
} 

它尺寸爲每一個細胞都一視同仁,無論在細胞數量的長度。它可以佔用任意數量的行或列。