从 Input/Text 文件中求所有奇数和偶数的平均值

Finding the Average of all Odd and Even Numbers from an Input/Text File

如标题所述,我一直在寻找创建一个程序,该程序将遍历 text/input 文件(数字),然后继续查找该文件中存在的奇数和偶数的平均值.

我目前已经设法创建了如下所示的结果,从而能够找到奇数的平均值。但是,我似乎无法理解如何获得偶数的平均值。

我尝试关闭扫描仪,打开另一个扫描仪,再做一次,如果 else 像下面这样循环并且几乎尝试了相反的尝试,其他试图获得偶数平均值的尝试最终以输出为 NaN, 0 或有时停留在 26(26 可能取决于我使用的输入文件,但 math/s 在我手工计算时对于获得均匀平均值没有意义)

这已经困扰我一段时间了,想知道是否有人可以为我指明正确的方向,告诉我如何获得平均水平以及我目前拥有的水平。

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

您的代码存在一些逻辑问题。您正在计算 所有 个数字的总和,无论是偶数还是奇数,然后试图只计算该数字的一个子集的平均值,这是行不通的。

您需要计算偶数和奇数的不同总和:

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。因此,实际上您当前的代码当前正在将 sum/oddCount 除以 所有 数字的总和除以奇数的数量(计数)。

要解决此问题并实现偶数的平均值,您应该为 evenSumoddSum 保留 两个单独的 变量。

您的 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);

最后要注意的是整数除法和浮点除法之间的区别。由于您已将所有变量声明为 ints,因此您的平均值将执行 整数 除法,这将截断任何小数部分。要执行浮点除法,至少有一个操作数必须是浮点类型。我通过将 sum 变量的类型更改为浮点类型(Double 或双精度浮点数)来处理该问题。