与标题状态一样,我一直在寻找创建一个循环文本/输入文件(数字)的程序,然后继续查找该文件中存在的奇数和偶数的平均值。
我目前设法创建下面显示的内容,这样就可以找到奇数的平均值。但是,我似乎无法获得偶数的平均值。
我试图关闭扫描仪,打开另一个扫描仪,然后再做另一个扫描仪,如果其他循环如下,并且几乎尝试相反,其他尝试尝试获得偶数平均值的结果是输出为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
以下是我使用的文本文件。 (道歉很长)
1
5
17
16
10
7
11
39
1
15
13
答案 0 :(得分:2)
您的代码存在一些逻辑问题。您计算所有数字的总和,无论是偶数还是奇数,然后尝试获得该数字的一个子集的平均值,这将无法工作。< / p>
您需要计算偶数和奇数的不同总和:
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);
答案 1 :(得分:1)
我不认为你的代码符合你的想法。无论你的数字是奇数还是偶数,你总是加入sum
。因此,实际上您当前的代码当前正在划分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
或双精度浮点数)来处理。