我正在编写一个代码,以生成一个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+"]"内容格式化的字符串。这个想法是,你有一个最小长度的字符串来工作,这样你的定位总是一样的。