0

如何对齐我的阵列,使其看起来不那么糟糕?

换句话说,我如何格式化一个可读的表格?

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

4 回答 4

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;

    }
}
于 2013-02-25T06:52:50.387 回答
1

使用java.io.PrintStream.printf( format , data... )格式化打印

格式字符串在格式字符串语法中描述

您可以使用的标志格式是width%-20s%12.4f

于 2013-02-25T06:51:48.663 回答
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");
    }
于 2013-02-25T06:53:45.623 回答
0

您可以使用 Java 的内置 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]);
于 2013-02-25T06:56:25.813 回答