我的2D数组的列的值在乱序输入的情况下平均值是错误的



我正在编写一个代码,以生成一个2D数组来保存用户输入的值。我在"循环打印数组"中做了一个平均函数,但它会出错,比如当列输入(3 1 2)给出输出的平均值(2 6 4)时。阵列的所有值都设置为2以进行测试。我搞不清楚这个循环出了什么问题。我是java的新手,所以如果答案很明显,我很抱歉。

打印的表格应该是这样的,行(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();
    }
}

附言:这是一个小问题,我用%1$5s从打印的列中保留括号中的5个空格,但我想知道是否有办法让它们保持相同的长度。

您需要添加

sum = 0;

之后

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

否则,当你计算平均值时,总数是错误的。

要填充字符串,这里已经有了一个很好的答案:如何在Java中填充字符串?。看第二个答案。

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

其中String s是使用上述"["+average+"]"内容格式化的字符串。这个想法是,你有一个最小长度的字符串来工作,这样你的定位总是一样的。

相关内容

  • 没有找到相关文章