Java 从输入/文本文件中查找所有奇数和偶数的平均值
像标题中的状态一样,我一直在寻找创建一个程序,该程序将在文本/输入文件(数字)上循环,然后继续查找该文件中奇数和偶数的平均值 我目前已经成功地创建了如下所示的内容,从而能够找到奇数的平均值。然而,我似乎不能让我的头周围能够得到平均数为偶数虽然 我试着关闭扫描仪,打开另一个扫描仪,再做一次,如果像下面这样循环,几乎是相反的尝试,其他尝试获得平均值的尝试结果是输出为NaN、0或有时停留在26(26可能是因为我使用了输入文件,但当我手工计算时,数学对获得平均数没有意义) 这已经困扰了我一段时间了,我想知道是否有人能为我指出正确的方向,告诉我如何才能获得目前的平均水平Java 从输入/文本文件中查找所有奇数和偶数的平均值,java,average,Java,Average,像标题中的状态一样,我一直在寻找创建一个程序,该程序将在文本/输入文件(数字)上循环,然后继续查找该文件中奇数和偶数的平均值 我目前已经成功地创建了如下所示的内容,从而能够找到奇数的平均值。然而,我似乎不能让我的头周围能够得到平均数为偶数虽然 我试着关闭扫描仪,打开另一个扫描仪,再做一次,如果像下面这样循环,几乎是相反的尝试,其他尝试获得平均值的尝试结果是输出为NaN、0或有时停留在26(26可能是因为我使用了输入文件,但当我手工计算时,数学对获得平均数没有意义) 这已经困扰了我一段时间了,我想
Scanner scan = new Scanner(AvgOddEven.class.getResourceAsStream("Numbers.txt"));
int count = 0, sum = 0, evenCount = 0, oddCount = 0;
while (scan.hasNextInt()) {
int number = scan.nextInt();
if (number % 2 == 0) // even numbers are detected here
evenCount++; //those detected are counted here.
else
oddCount++;
sum += number;
count++; //Counts all numbers in the text file
}
System.out.println("Sum divided by odd = average: " + sum / oddCount); //This gets me the average of odd numbers
下面是我使用的文本文件。(抱歉太长了)
您的代码存在一些逻辑问题。您正在计算所有数字的总和,无论是偶数还是奇数,然后尝试仅获取数字子集的平均值,这是行不通的 您需要计算奇偶数的不同总和:
Scanner scan = new Scanner(AvgOddEven.class.getResourceAsStream("Numbers.txt"));
int count = 0, sumEven = 0, sumOdd = 0, evenCount = 0, oddCount = 0;
while (scan.hasNextInt()) {
int number = scan.nextInt();
if (number % 2 == 0) { // even numbers are detected here
evenCount++; //those detected are counted here.
sumEven+=number;
}
else {
sumOdd+=number;
oddCount++;
}
count++; //Counts all numbers in the text file
}
System.out.println("Average of odd numbers: " + sumOdd / oddCount);
System.out.println("Average of even numbers: " + sumEven / evenCount);
我不认为你的代码做了你认为它做的事。不管你的数字是奇数还是偶数,你总是在给
和
加。所以事实上,你当前的代码正在除以sum/oddCount
,所有数字的和除以奇数的数(计数)
要解决此问题并实现偶数的平均值,您应该为evenSum
和oddSum
保留两个单独的变量
修改后的javascript将如下所示:
...
int count = 0, evenSum = 0, evenCount = 0;
double oddSum = 0.0, oddCount = 0.0; //for floating point arithmetic later
while (scan.hasNextInt()) {
int number = scan.nextInt();
if (number % 2 == 0) { // even numbers are detected here
evenSum += number;
evenCount++; //those detected are counted here.
}
else {
oddSum += number;
oddCount++;
}
count++; //Counts all numbers in the text file
}
System.out.println("Average of odds: " + oddSum / oddCount);
System.out.println("Average of evens: " + evenSum / evenCount);
最后要注意的是整数除法和浮点除法之间的区别。由于您已将所有变量声明为
int
s,因此平均值将执行整数除法,这将截断任何小数部分。若要执行浮点除法,至少一个操作数必须是浮点类型。我通过将sum
变量的类型更改为浮点类型(一个Double
或双精度浮点)来处理这个问题.小心整数除法。平均值将被截断。是的,如果您需要小数,@ryanyuyu的答案会更好谢谢你们两位让我知道我错在哪里。两个答案都非常有用,而且信息丰富。
...
int count = 0, evenSum = 0, evenCount = 0;
double oddSum = 0.0, oddCount = 0.0; //for floating point arithmetic later
while (scan.hasNextInt()) {
int number = scan.nextInt();
if (number % 2 == 0) { // even numbers are detected here
evenSum += number;
evenCount++; //those detected are counted here.
}
else {
oddSum += number;
oddCount++;
}
count++; //Counts all numbers in the text file
}
System.out.println("Average of odds: " + oddSum / oddCount);
System.out.println("Average of evens: " + evenSum / evenCount);