2013-02-25 105 views
0

如何對齊我的數組,使其看起來不那麼糟糕?如何對齊Java中的表格

換句話說,如何格式化可讀的表格?

System.out.print(" ");是間距爲表相當低效的方式...

public class TaylorSin { 
    public static void main(String[] args) { 
    double[][] ArrayX = new double[201][4]; 
    for (int i = 0; i < ArrayX.length; i++) { 
     System.out.print(ArrayX[i][0] = - 1 + (i * 0.01)); 
     System.out.print(" "); 
     System.out.print(ArrayX[i][1] = Math.sin(- 1 + (i * 0.01))); 
     System.out.print(" "); 
     System.out.print(ArrayX[i][2] = taylorSin(- 1 + (i * 0.01))); 
     System.out.print(" "); 
     System.out.print(ArrayX[i][3] = Math.abs(Math.sin(- 1 + (i * 0.01)) - taylorSin(- 1 + (i * 0.01)))); 

      System.out.println(); 
     }  
    } 

     public static int calculateFactorial(int n)    
     {  
      int facto = 1;  
      for (int i = 1; i <= n; i++)   
      {facto = facto * i;}   
      return facto;   
     } 

     public static double calculateExponent(double base, int exponent)   
     { 
      if(exponent == 0){return 1;} 
      else {return base * calculateExponent(base, exponent - 1);}      
     }  

     public static double calculateTerm(double base, int exponent, int n)    
     {   
      double term = 0.0;   
      term = (calculateExponent(base, exponent)/calculateFactorial(n));    
      return term;    
     } 

     public static double sumOfTerms(double base, int exponent, int n)   
     {    
      double summation = 0;    
      for (int i = 1; i <= 21; i = i +2)   
      {    
       if (i == 3 || i == 7 || i == 11 || i == 15 || i == 19)    
       {     
       summation = summation - calculateTerm(base, i, i);          
       }     
       else      
       {     
       summation = summation + calculateTerm(base, i, i);     
       }    
      }   
     return summation;   
     } 

     public static double taylorSin(double base)   
     {   
     double result = 0;   
     int exponent = 1; 
     int n = 1;   
     result = sumOfTerms(base, exponent, n);      
     return result;   
     }   
} 
+2

使用'System.out.printf'或'System.out.format',它與C'printf'函數類似(但不等於)。 – 2013-02-25 06:39:21

+0

你怎麼得到輸出。嘗試使用'\ t' – asifsid88 2013-02-25 06:45:30

+0

@ asifsid88如果您想使其像表格一樣工作,則不使用'\ t',而是像'%20d'或'%15s'那樣爲每個列設置特定的大小。 – 2013-02-25 06:47:54

回答

2

您可以使用System.out.printf到您的輸出格式是這樣的:

public class TaylorSin { 
    public static void main(String[] args) 
    { 
     // How to align my Array so it does not look that awful? 
     // In other words, How do I format a table that is readable? 
     // The System.out.print(" "); is a pretty inefficient manner for spacing 
     // for a table... 
     double[][] ArrayX = new double[201][4]; 

     for (int i = 0; i < ArrayX.length; i++) 

     { 
      System.out.printf("%-15f", ArrayX[i][0] = -1 + (i * 0.01)); 
      System.out.print(" "); 

      System.out 
        .printf("%-15f", ArrayX[i][1] = Math.sin(-1 + (i * 0.01))); 
      System.out.print(" "); 

      System.out.printf("%-15f", 
        ArrayX[i][2] = taylorSin(-1 + (i * 0.01))); 
      System.out.print(" "); 

      System.out.printf(
        "%-15f", 
        ArrayX[i][3] = Math.abs(Math.sin(-1 + (i * 0.01)) 
          - taylorSin(-1 + (i * 0.01)))); 

      System.out.println(); 
     } 

    } 

    public static int calculateFactorial(int n) 

    { 

     int facto = 1; 

     for (int i = 1; i <= n; i++) 

     { 
      facto = facto * i; 
     } 

     return facto; 

    } 

    public static double calculateExponent(double base, int exponent) 

    { 

     if (exponent == 0) { 
      return 1; 
     } 

     else { 
      return base * calculateExponent(base, exponent - 1); 
     } 

    } 

    public static double calculateTerm(double base, int exponent, int n) 

    { 

     double term = 0.0; 

     term = (calculateExponent(base, exponent)/calculateFactorial(n)); 

     return term; 

    } 

    public static double sumOfTerms(double base, int exponent, int n) 

    { 

     double summation = 0; 

     for (int i = 1; i <= 21; i = i + 2) 

     { 

      if (i == 3 || i == 7 || i == 11 || i == 15 || i == 19) 

      { 

       summation = summation - calculateTerm(base, i, i); 

      } 

      else 

      { 

       summation = summation + calculateTerm(base, i, i); 

      } 

     } 

     return summation; 

    } 

    public static double taylorSin(double base) 

    { 

     double result = 0; 

     int exponent = 1; 
     int n = 1; 

     result = sumOfTerms(base, exponent, n); 

     return result; 

    } 
} 
+0

感謝您的幫助:) – user2058291 2013-02-25 17:22:25

0

試試這個。此外,如果可以這樣做,您可能需要格式化數字。

{ 
     System.out.print(ArrayX[i][0] = - 1 + (i * 0.01)); 
     System.out.print("\t"); 

     System.out.print(ArrayX[i][1] = Math.sin(- 1 + (i * 0.01))); 
     System.out.print("\t"); 

     System.out.print(ArrayX[i][2] = taylorSin(- 1 + (i * 0.01))); 
     System.out.print("\t"); 

     System.out.print(ArrayX[i][3] = Math.abs(Math.sin(- 1 + (i * 0.01)) - taylorSin(- 1 + (i * 0.01)))); 
     System.out.print("\t"); 
     System.out.println("\n"); 
    } 
+0

請參閱@LuiggiMendoza對問題的評論 – 2013-02-25 06:54:23

+0

@Iswanto San同意。它發生在幾分鐘內:) – Vickym 2013-02-25 07:01:34

+0

謝謝,非常感激! – user2058291 2013-02-25 17:22:03

0

您可以使用Java的BUIT-在System.out.printf(),並採取看看Formatter類。你可以做這樣的事情。

System.out.printf("%f %f %f %f\n", ArrayX[i][0], ArrayX[i][1], ArrayX[i][1], ArrayX[i][2], ArrayX[i][3]);