我正在尝试平均2D数组列。我的代码似乎将行中的数字相加,然后除以总数。在此示例中,应该只有4个分配,但它会循环12次。有人知道我的代码有什么问题吗?附言数字是从文本文件中输入的,在完整代码中位于较高位置(不确定是否会影响它)。
示例数组:
[2,3,6,7]
[4,5,6,7]
[2,2,2,2]
System.out.println("Average score of each assignment:");
//TODO: compute and print the average on each assignment
double total=0;
int totallength=0;
int assignment=1;
for(int i=0;i<myArray.length;i++) {
for(int j=0;j<myArray[i].length;j++) {
total+=myArray[i][j];
totallength++;
System.out.println("Assignment #" + assignment++ + " Average: " + (total/totallength));
}
}
这是我的输出:
每项作业的平均分数:
作业1的平均值:2.0
平均分配2:2.5
作业#3平均:3.6666666666666665
作业#4平均:4.5
作业5平均:4.4
作业#6平均:4.5
作业7:平均值:4.714285714285714
作业8平均:5.0
作业#9平均:4.6666666666666667
作业10平均:4.4
作业#11平均:4.181818181818182
作业12平均:4.0
所需的输出:
作业1平均:2.6666666666
作业#2的平均值:3.333333333
作业3平均:4.6666666666
作业#4平均:5.333333333
答案 0 :(得分:1)
您可以执行以下操作:
public class Main {
public static void main(String[] args){
int [][]myArray= {
{2,3,6,7},
{4,5,6,7},
{2,2,2,2},
};
double total=0;
int assignment=1;
System.out.println("Average score of each assignment:");
for(int i=0;i<myArray[0].length;i++) {
for(int j=0;j<myArray.length;j++) {
total+=myArray[j][i];
}
System.out.println("Assignment #" + assignment++ + " Average: " + (total/3));
total=0;
}
}
}
输出:
Average score of each assignment:
Assignment #1 Average: 2.6666666666666665
Assignment #2 Average: 3.3333333333333335
Assignment #3 Average: 4.666666666666667
Assignment #4 Average: 5.333333333333333
答案 1 :(得分:0)
如果要获取每一行的平均值,则需要在每个oter循环上初始化总计数器,并且还必须在求和后仅在外循环上打印:
int assignment=1;
for(int i=0;i<myArray.length;i++) {
// initialize here, to start each row separatly
double total=0;
int totallength=0;
for(int j=0;j<myArray[i].length;j++) {
total+=myArray[i][j];
totallength++;
}
// print after the loop, so it will be done only once per row
System.out.println("Assignment #" + assignment++ + " Average: " + (total/totallength));
}
顺便说一句,更简单的计算平均值的方法是利用Java 8流功能:
for(int i=0;i<myArray.length;i++) {
double average = Arrays.stream(myArray[i]).average().orElse(0d);
}
答案 2 :(得分:0)
您可以使用 IntStream.average()
方法:
outcome
int m = 3;
int n = 4;
int[][] arr = {
{2, 3, 6, 7},
{4, 5, 6, 7},
{2, 2, 2, 2}};
double[] averages = IntStream.range(0, n)
.mapToDouble(i -> IntStream.range(0, m)
.map(j -> arr[j][i])
.average()
.orElse(0))
.toArray();
// output
IntStream.range(0, averages.length).forEach(i ->
System.out.println("Assignment #" + (i + 1)
+ " Average: " + (averages[i])));