首页 > 解决方案 > 读取整数值并打印介于 0 和输入值之间的所有奇数的平均值的 Java 程序,包括输入值

问题描述

这是整个问题:

“编写一个程序,读取一个整数值并打印 0 和输入值(含)之间所有奇数的平均值。如果输入值小于 0,则打印错误消息。相应地提示。”

我似乎无法弄清楚如何在 for 循环中计算出数学。我无法设置它,以便循环增加几率。我已经尝试了一百万种不同的东西,但没有任何效果。

public static void main(String[] args) {

    int value;
    int oddAvg = 0;
    int count = 0;

    Scanner scan = new Scanner(System.in);

    System.out.print("Enter an integer: ");
    value = scan.nextInt();

    while (value < 0){
        System.out.println("Error: Input should not be less than 0");
        System.out.print("Enter an integer greater than 0: ");
        value = scan.nextInt();
    }


    for(){

    }


    System.out.println("The average of odd integers between 0 and " + value + " is " + oddAvg);

    }
}

标签: javafor-loopmathintegeraverage

解决方案


一个简单的方法可能是从零迭代到目标数字并检查每个数字是奇数还是偶数:

int sum = 0;
int count = 0;
for (int i = 0; i <= value; i++) {
    if (i % 2 != 0) {
        sum += i;
        count++;
    }
}
int avg = sum / count;

但这当然是低效的。更好的方法是从第一个奇数开始1, 并2在每次迭代中将其递增,因此您将只迭代奇数:

double sum = 0;
int count = 0;
for (int i = 1; i <= value; i += 2) {
    sum += i;
    count++;
}
int avg = sum / count;

或者,如果您想在数学上真正可靠,您可以利用给定范围内的奇数自然数均匀分布的事实。由于此分布是对称的,因此平均值等于平均值​​,您根本不需要循环:

int start = 1;
int end = value;
if (value % 2 == 0) { 
    value--;
}
int avg = (end + start) / 2;

一般评论:在这种特定情况下,平均值将是int,因此我int在整个示例中都使用了 s 。在一般用例中,您可能应该使用doubles 来避免使用整数除法的错误。


推荐阅读