Java 从输入/文本文件中查找所有奇数和偶数的平均值

Java 从输入/文本文件中查找所有奇数和偶数的平均值,java,average,Java,Average,像标题中的状态一样,我一直在寻找创建一个程序,该程序将在文本/输入文件(数字)上循环,然后继续查找该文件中奇数和偶数的平均值 我目前已经成功地创建了如下所示的内容,从而能够找到奇数的平均值。然而,我似乎不能让我的头周围能够得到平均数为偶数虽然 我试着关闭扫描仪,打开另一个扫描仪,再做一次,如果像下面这样循环,几乎是相反的尝试,其他尝试获得平均值的尝试结果是输出为NaN、0或有时停留在26(26可能是因为我使用了输入文件,但当我手工计算时,数学对获得平均数没有意义) 这已经困扰了我一段时间了,我想

像标题中的状态一样,我一直在寻找创建一个程序,该程序将在文本/输入文件(数字)上循环,然后继续查找该文件中奇数和偶数的平均值

我目前已经成功地创建了如下所示的内容,从而能够找到奇数的平均值。然而,我似乎不能让我的头周围能够得到平均数为偶数虽然

我试着关闭扫描仪,打开另一个扫描仪,再做一次,如果像下面这样循环,几乎是相反的尝试,其他尝试获得平均值的尝试结果是输出为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);