2017-12-11 12 views
1

誰もが私の第二の出力表示を水平ではなく、最初に作る方法を私を助けることができます....水平に表示第二の出力をが、第一の出力垂直

public static void main(String[] args) { 

    String[][][] storage = 
    {//root 
     {//nested 
      { "Name","Gender","Address","Age","Birth"}, //contains 
      { "Consumer","Vendor","IDE","Certified"} 
     }, 
     { 
      { "Month","Year","Day"}, //contains 
      { "Hours","Minutes","Seconds","Milli","Nano"}, 
      { "Decade","Century"}, 
      { "Water","Earth","Fire","Lightning"} 
     }, 
     { 
      { "Good","Bad","Strong","Weak"}, //contains 
      { "Polite","Honest","Gentle","Courage","Kind"}, 
      { "Kilos","Grams","Tons","Pounds"} 
     } 
    }; 

    for (int i=0; i<=storage.length-1; i++){ 
     System.out.println(i); 
     for (String[] inner : storage[i]){ 
      for (String normal : inner){ 
       System.out.print(normal+" "); 
      } 
      System.out.println(); 
     } 
    } 

私はこのような表示を見て欲しい:

enter image description here

そして、実際の結果はこのように私を与える:

enter image description here

答えて

2

カラムを適切にフォーマットできるように、最初にディメンションを計算する必要があります。maxwidths。最大行数に注意すると、印刷部の制御に役立ちます。

int maxrow = 0; 
List<Integer> maxwidths = new ArrayList<>(); 
for (int i=0; i<=storage.length-1; i++){ 
    int maxwidth = 0; 
    for (String[] inner : storage[i]){ 
     int width = String.join(" ", inner).length(); 
     if(width > maxwidth) maxwidth = width; 
    } 
    if(storage[i].length > maxrow) maxrow = storage[i].length; 
    maxwidths.add(maxwidth); 
} 

for (int i=0; i<=storage.length-1; i++){ 
    System.out.printf("%-" + maxwidths.get(i) + "d ", i); 
} 
System.out.println(); 
for(int row = 0; row < maxrow; ++row){ 
    for (int i=0; i<=storage.length-1; i++){ 
     String normal; 
     if(row < storage[i].length){ 
      normal = String.join(" ", storage[i][row]); 
     } else { 
      normal = ""; 
     } 
     System.out.printf("%-" + maxwidths.get(i) + "s ", normal); 
    } 
    System.out.println(); 
} 
+0

ワウ!できます。ありがとう。 –

関連する問題