2014-04-09 35 views
0

我有一個問題,弄清楚如何填充從我的數組值打印的字符串。我認爲我有一個很好的方法來做到這一點,但它沒有正確讀取x.length,所以我很好奇替代方法,甚至是對錯誤的解釋。將字符串填充到任意長度的方法

import java.util.Scanner; 
//================================================================ 
public class Array { 
//---------------------------------------------------------------- 
    private static Scanner Keyboard = new Scanner(System.in); 

    public static void main(String[] args) { 
    //---------------------------------------------------------------- 
     char group, rLetter,letter; 
     String choice ; 
     String str = " "; 
     double sum  = 0; 
     int num  = 10; // for test 
     int rows = 10; 
     int columns = 8; 
     double average = 0; 
     int S; 
     int diff = 0; 
     int totalChar=0; 
     int minLen = 20; 
     String x= ""; 

     // creating 2d array 


     System.out.print("Please enter number of rows    : "); 
     rows = Keyboard.nextInt(); 
     Keyboard.nextLine(); 


     double[][] figures = new double[rows][num]; 

     for(int t = 0; t < rows; t++) { 
      rLetter = (char)((t)+'A'); 
      System.out.print("Please enter number of positions in row " + rLetter + " : "); 
       columns = Keyboard.nextInt(); 
       Keyboard.nextLine(); 

      figures[t] = new double[columns]; 
     } 

     // filling the array 
     for(int row = 0; row < figures.length; ++row) { 
      for(int col = 0; col < figures[row].length; ++col) { 
       figures[row][col] = 0.0; 
      } 
     } 

     // printing the array 
     for(int row=0; row<figures.length; ++row) { 
      // printing data row 
      group = (char)((row)+(int)'A'); 
      System.out.print(group+" : "); 
      for(int col=0; col<figures[row].length; ++col) { 
       sum += figures[row][col]; 
       average = sum/figures[row].length; 

       x = " "+figures[row][col]; 
       diff = minLen - x.length(); 
       System.out.printf("%1$" + diff + "s", x); 

       System.out.print(" "); 

      } 
      System.out.print("["+average+"]"); 
      System.out.println(); 


} 
} 
} 

我想產生一個表,看起來像這樣:

A: 0.0 0.0 0.0      -  [ 0.0,  0.0] 

B: 0.0 0.0 0.0 0.0     -  [ 0.0,  0.0] 

C: 0.0 0.0 0.0 0.0 0.0   -   [ 0.0,  0.0] 

凡 - 是我想,以填補空間,直到任意長度。換句話說,我希望我的打印陣列部分能夠打印每一行並將空格添加到一個點。有沒有可能爲此做一個方法?我不熟悉所有的java方法,所以任何幫助表示讚賞。 如果這是一個重複的問題,我希望重定向到原來的,我會嘗試刪除這一個。對於這種情況下的不便,也感到抱歉。

回答

1

我假設你知道如何使用StringBuilder或String concatenation在左側和右側構建字符串。

一旦你建立了你的字符串,你可以像下面那樣使用printf來將右邊的輸出填充到任意數量的空白字符。在下面的示例代碼中,我使用了20作爲要填充的字符數。

public class Pad { 
    public static void main(String[] args) { 
     String a = "0.0 0.0 0.0 "; 
     String b = "0.0 0.0 0.0 0.0"; 
     String c = "[ 0.0, 0.0]"; 
     System.out.printf("%-20s %s\n", a, c); 
     System.out.printf("%-20s %s\n", b, c); 
    } 
} 

您可以通過替換您最後一個循環在代碼中使用這個想法上面:

// printing the array 
    for(int row=0; row<figures.length; ++row) { 
     // printing data row 
     StringBuilder sb = new StringBuilder(); 

     group = (char)((row)+(int)'A'); 
     sb.append(group+" : "); 
     for(int col=0; col<figures[row].length; ++col) { 
      sum += figures[row][col]; 
      average = sum/figures[row].length; 

      x = " "+figures[row][col]; 
      diff = minLen - x.length(); 
      sb.append(String.format("%1$" + diff + "s", x)); 

      sb.append(" "); 

     } 
     System.out.printf("%-75s[%f]\n", sb.toString(), average); 
    } 
+0

那麼有沒有辦法做到這一點在for循環,因爲我有現在? – user3505222

+0

@ user3505222,絕對有辦法做到這一點,但是您還沒有提供完整的可編譯程序,我可以嘗試調試。 – merlin2011

+0

另外,我假設你將使用'for'循環,而不管構建字符串的左邊還是右邊。 – merlin2011

0

你需要找到列大小的最大數量和每行高達最大列在迭代和地點如果長度小於實際行長度,則返回空值。 它會解決這個問題。

我已經添加了改變的代碼:

public class Array { 

    // String result = String.format("The format method is   %s!", "great"); 
    // System.out.println(result); 
    //---------------------------------------------------------------- 
    private static Scanner Keyboard = new Scanner(System.in); 

    public static void main(String[] args) { 
     //---------------------------------------------------------------- 
     char group, rLetter, letter; 
     String choice; 
     String str = " "; 
     double sum = 0; 
     int num = 10; // for test 
     int rows = 10; 
     int columns = 8; 
     double average = 0; 
     int S; 
     int diff = 0; 
     int totalChar = 0; 
     int minLen = 20; 
     String x = ""; 

     // creating 2d array 


     System.out.print("Please enter number of rows    : "); 
     rows = Keyboard.nextInt(); 
     Keyboard.nextLine(); 


     double[][] figures = new double[rows][num]; 
     int maxSize = 0; 
     for (int t = 0; t < rows; t++) { 
      rLetter = (char) ((t) + 'A'); 
      System.out.print("Please enter number of positions in row " + rLetter + " : "); 
      columns = Keyboard.nextInt(); 
      Keyboard.nextLine(); 
      if (columns > maxSize) { 
       maxSize = columns; 
      } 
      figures[t] = new double[columns]; 
     } 

     // filling the array 
     for (int row = 0; row < figures.length; ++row) { 
      for (int col = 0; col < figures[row].length; ++col) { 
       figures[row][col] = 0.0; 
      } 
     } 

     // printing the array 
     for (int row = 0; row < figures.length; ++row) { 
      // printing data row 



      group = (char) ((row) + (int) 'A'); 
      System.out.print(group + " : "); 
      for (int col = 0; col < maxSize; ++col) { 
       if (col < figures[row].length) { 
        sum += figures[row][col]; 
        average = sum/figures[row].length; 

        x = " " + figures[row][col]; 
        diff = minLen - x.length(); 
        System.out.printf("%1$" + diff + "s", x); 

        System.out.print(" "); 
       } else { 
        System.out.print("    "); 
       } 
      } 

      System.out.print("[" + average + "]"); 
      System.out.println(); 


     } 
    } 
} 
相關問題