Java程序读取一个整数值,并输出介于0和输入值之间(包括两端)的所有奇数整数的平均值

时间:2018-12-06 04:52:35

标签: java for-loop math integer average

这是整个问题:

“编写一个程序,该程序读取一个整数值,并打印出介于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);

    }
}

3 个答案:

答案 0 :(得分:3)

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

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。在一般情况下,您可能应该使用double来避免使用整数除法的错误。

答案 1 :(得分:1)

这是解决您问题的方法!

public static void main(String[] args) {
    int input = 25; //this is whatever value you're going up to.
    int accumulator = 0; //keep track of the total sum
    for (int i = 0; i < input; i++) {
        if (i % 2 == 1) { //if odd
            accumulator+=i; // add to the running total sum
        }
    }
    System.out.println(accumulator/(input/2)); //print out the total/num of numbers
}

答案 2 :(得分:0)

如果对Java 8感兴趣,可以尝试一下。这是幼稚的方法实现。

    int val = 0;
    final OptionalDouble average = IntStream.rangeClosed(0, val)
            .filter(n -> n % 2 != 0)
            .average();
    System.out.println(average);