当前位置: 首页 > 知识库问答 >
问题:

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

沈建柏
2023-03-14

正如标题所述,我一直在寻找创建一个程序,将循环在一个文本/输入文件(的数字),然后继续寻找平均奇数和偶数出现在该文件中。

我目前已经成功地创建了如下图所示的结果,能够找到奇数的平均值。然而,我似乎不明白如何能够得到偶数的平均值。

我试着关闭扫描仪,打开另一个扫描仪,再做一段时间,如果else像下面这样循环,并且几乎尝试了相反的方法,那么其他尝试获得偶数平均值的尝试结果是输出为NaN、0或有时停留在26(26可能是我使用的输入文件,但当我手工计算时,数学/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

共有2个答案

单昊穹
2023-03-14

我认为你的代码没有你认为的那样。无论您的数字是奇数还是偶数,您总是在将相加。因此,实际上,您当前的代码正在除以sum/oddCount,即所有数字的总和除以奇数的数量(count)。

要解决此问题并实现偶数的平均值,您应该为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 变量的类型更改为浮点类型(双精度或双精度浮点数)来处理了这个问题。

阮疏珂
2023-03-14

您的代码存在一些逻辑问题。您正在计算所有数字的总和,无论是偶数还是奇数,然后尝试仅获取数字子集的平均值,这将不起作用。

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

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);
 类似资料:
  • 我需要写一个程序来计算用户输入的整数的奇偶平均数。用户键入“完成”以完成。输出将显示奇数的平均值和偶数的平均值。 我有一个while循环程序,可以计算数字的和,我正试图增加奇数和偶数和的额外要求。这是代码: 下面是我修改的代码,对奇数和偶数进行排序,然后对每组进行平均。 预期: 实际:

  • 我想得到用户输入的所有奇数和偶数,然后得到所有奇数的乘积和偶数的差值。例如:输入一个字符串:dfgi456456=';]=34521。输出应该显示用户输入中的所有奇数和偶数以及乘积和差值,在这种情况下,奇数是:5,3,1偶数是:4,6,2奇数的PRODUCT(乘法答案):15偶数的DIFFERENCE(减法答案):-4。请查看我下面的代码。任何帮助都将不胜感激。谢谢。 }

  • 希望这对你来说是有意义的,我很乐意更详细地解释这个问题。

  • 下面写的代码是正确的,但我想缩短这段代码。 用java编写一个程序,在单维数组中输入10个数字,并以所有偶数后面跟着所有奇数的方式排列它们。 我能把偶数和奇数安排在一个for循环中而不是两个for循环中吗?我使用双for循环将偶数和奇数转换为数组。请缩短代码。一个用于检查偶数的循环遍历,另一个用于检查奇数。

  • 我正在尝试使用用户输入将数字放入一个数组,然后找到这些数字的平均值,也找到哪些数字大于平均值。这些数字进入一个数组,但当我试图求平均数时,我无法求出平均数,以及哪些数字大于平均数,因为对于试图求出大于平均数的数字的部分,并非所有变量都是可见的。但是,当我允许这个部分看到所有的变量(don't But{}围绕某些部分)时,它会找到每一个数的平均值。现在,它为每个数字打印平均值,而为大于平均值的数字打

  • 嗨,这是我正在做的课程上的一个问题。。。 > 程序打印“键入数字”,直到用户键入数字-1。当用户键入数字1时,程序打印“谢谢,稍后再见!”!“并结束 程序应该打印用户输入的数字的总和(不带数字-1) 程序应该打印用户键入的数字(没有数字-1) 程序应该打印用户键入的数字的平均值(没有数字-1)。 5.程序应该打印用户键入的偶数和奇数的数量(没有数字-1)。 我已经完成了1-4,但完全停留在5。我确