我被要求计算多维数组(表)的平均值。我认为我构建的一切都是正确的(至少我觉得是这样):
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-increment
或post-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
)