我的2D数组的列的值与无序输入平均错误

时间:2014-04-09 03:52:05

标签: java arrays multidimensional-array

我正在处理代码以生成用于保存用户输入值的2D数组。我在"打印数组中为循环&#34做了一个平均函数;但是当列输入(3 1 2)的平均输出为(2 6 4)时,它会混乱。将数组的所有值设置为2以进行测试。我无法弄清楚循环有什么问题。我是java的新手,所以如果答案显而易见,我很抱歉。

打印的表格应如下所示:第(3)行和第3列(3 1 2):

A:2.0 2.0 2.0 [3.0]

B:2.0 [2.0]

C:2.0 2.0 [2.0]

其中括号内的术语表示平均值,2.0表示列中的值。

代码:

        // creating 2d array

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

        while (rows < 0 || rows >= 10) {
            System.out.print("ERROR:Out of range, try again              : ");
            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(); 

            while((columns < 0) || (columns >= 8)) { 
                System.out.print("ERROR:Out of range, try again : "); 
                    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] = 2.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;

                System.out.print("   "+figures[row][col]);

                System.out.print(" ");
            }

            System.out.printf("%1$5s","["+average+"]");
            System.out.println();
    }

}
PS:它是一个小问题,我使用%1 $ 5s来保持括号术语与打印列的5个空格,但我想知道是否有办法让它们保持相同的长度。

2 个答案:

答案 0 :(得分:0)

要填充字符串,这里已经有How can I pad a String in Java?的答案。看看第二个答案。

int minLen = 20;
String s = myformat(value, length);
int diff = minLen - s.length;
System.out.printf("%1$" + diff + "s", s);

String s是使用上述&#34; [&#34; +平均值+&#34;]&#34;东西。我们的想法是,您可以使用最小长度字符串,以便您的定位始终相同。

答案 1 :(得分:0)

您需要添加

sum = 0;

for(int row=0; row<figures.length; ++row) {

否则在计算平均值时总计是错误的。