Java-программа, которая читает целочисленное значение и печатает среднее значение всех нечетных целых чисел от 0 до входного значения включительно - PullRequest
0 голосов
/ 06 декабря 2018

Вот весь вопрос:

"Напишите программу, которая считывает целочисленное значение и печатает среднее значение всех нечетных целых чисел от 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 голосов
/ 06 декабря 2018

Тривиальным подходом может быть просто итерация от нуля до целевого числа и проверка, является ли каждое число нечетным или четным:

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 во всех моих примерах.В общем случае вы, вероятно, должны использовать double s, чтобы избежать ошибок при использовании целочисленного деления.

0 голосов
/ 11 декабря 2018

Вы можете попробовать это, если заинтересованы в Java 8. Это реализация наивного подхода.

    int val = 0;
    final OptionalDouble average = IntStream.rangeClosed(0, val)
            .filter(n -> n % 2 != 0)
            .average();
    System.out.println(average);
0 голосов
/ 06 декабря 2018

Вот решение вашей проблемы!

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
}
...