我正在处理代码以生成用于保存用户输入值的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个空格,但我想知道是否有办法让它们保持相同的长度。
答案 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) {
否则在计算平均值时总计是错误的。