计算多维数组的平均值



我被要求计算多维数组(表)的平均值。我认为我构建的一切都是正确的(至少我觉得是这样):

import java.util.Scanner;
public class Exam {
    static int NROWS = 5;
    static int NCOL = 6;
    static int[][] data = new int[NROWS][NCOL];
public static void main(String[] args) {
    Scanner scan = new Scanner(System.in);
    enterData(scan);
    countAvg();
}
static void enterData(Scanner in) {
    System.out.println("How many rows ? (up to " + NROWS + ")");
    int rows = in.nextInt();
    System.out.println("How many cols ? (up to " + NCOL + ")");
    int cols = in.nextInt();
    for (int i = 0; i < rows; i++) {
        System.out.println("Row" + i + ": ");
        for (int j = 0; j < cols; j++) {
            System.out.print("Enter Data for Column " + j + ":");
            data[i][j] = in.nextInt();
        }
    }
}
static void countAvg() {
    int total = 0;
    int count = 0;
    for (int i = 0; i < NROWS; i++) {
        for (int j = 0; j < NCOL; j++) {
            total = total + data[i][j];
            count = count++;
        }
    }
    int avg = total / count;
    System.out.println("the average is: " + avg);
}

}

但是系统仍然向我推送这个消息:

线程"main"中的异常java.lang. arithmelceexception:/by 0Exam.countAvg (Exam.java: 33)Exam.main (Exam.java: 9)

请帮助我了解我做错了什么。很多谢谢!

首先,将count = count++;更改为count++;

第二,你在做整数除法,所以把int avg = total/count;改为double int = total / (double) count;

第三,您将数据数组设置为5X6,即使他们输入不同的内容,这将抛出平均值,因为计数将为每个单元格添加,总共30。

请试试

import java.util.Scanner;
public class Exam {
    static int[][] data;
    private static int rows = 0;
    private static int cols = 0;
    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
        enterData(scan);
        countAvg();
    }
    static void enterData(Scanner in) {
        System.out.println("How many rows ?");
        rows = in.nextInt();
        System.out.println("How many cols ?");
        cols = in.nextInt();
        data = new int[rows][cols];
        for (int i = 0; i < rows; i++) {
            System.out.println("Row" + i + ": ");
            for (int j = 0; j < cols; j++) {
                System.out.print("Enter Data for Column " + j + ":");
                data[i][j] = in.nextInt();
            }
        }
    }
    static void countAvg() {
        int total = 0;
        int count = 0;
        for (int i = 0; i < rows; i++) {
            for (int j = 0; j < cols; j++) {
                total = total + data[i][j];
                count++;
            }
        }
        double avg = total / (double) count;
        System.out.println(count + "the average is: " + avg);
    }
}

这将允许您创建一个包含输入行和颜色的新数据数组,从而允许您正确计算平均值。

正如Michael Pickett在上面的评论中提到的,问题是count = count++;。因为使用的是post-increment,所以计数在所有情况下都变为零,所以递增是在执行完这行之后进行的。如果您使用pre-increment,则count = ++count;在执行时递增。

所以你可以像上面那样使用pre-incrementpost-increment,而不将其分配给count变量。

除了其他答案(都是正确的)之外,请注意一些可能提高代码可读性的事情。您可以使用'for-each'循环而不是使用索引,您可以使用+=将值添加到总数中:

for (int[] row: data) {
    for (int value: row) {
        total += value;
        count++;
    }
}
还请注意,如果您熟悉Java 8,您可以在一条语句中完成此操作:
Arrays.stream(data).flatMapToInt(Arrays::stream).average()

返回一个OptionalDouble以允许数组为空的可能性(通过返回一个Optional.empty)

相关内容

  • 没有找到相关文章

最新更新