Программа суммирования нечетных чисел

#java

#java

Вопрос:

Я пишу программу, в которой я должен создать метод, который вычисляет, является ли переданное число нечетным. Для этого метода мне также нужно проверить, что переданное число равно > 0, и если нет, вернуть false . Я также должен создать второй метод с двумя параметрами (start и end, который представляет диапазон чисел), и предполагается, что метод использует цикл for для суммирования всех нечетных чисел в этом диапазоне. Параметр end должен быть больше или равен start, и оба параметра start и end должны быть больше 0. Если эти условия не выполняются, верните -1 из метода, чтобы указать на недопустимый ввод.

Это назначение:

Напишите метод с именем isOdd с параметром int и назовите его number. Метод должен возвращать логическое значение. Проверьте, что число > 0, если оно не возвращает false. Если число нечетное, верните true, в противном случае верните false.

Напишите второй метод, называемый sumOdd, который имеет 2 параметра int, start и end, которые представляют диапазон чисел. Метод должен использовать цикл for для суммирования всех нечетных чисел в этом диапазоне, включая конец, и возвращать сумму. Она должна вызвать метод isOdd, чтобы проверить, является ли каждое число нечетным. Параметр end должен быть больше или равен start, и оба параметра start и end должны быть больше 0. Если эти условия не выполняются, верните -1 из метода, чтобы указать на недопустимый ввод.

Я пытался уже более часа, но я делаю это неправильно, потому что мой вывод неверен. Я записал ожидаемые результаты и свои результаты под своим кодом.

Это мой код:

 public static boolean isOdd(int number){
    boolean status = false;
    if(number < 0){
        status = false;
    } else if(number % 2 != 0){
        status = true;
    }
    return status;
}
public static int sumOdd(int start, int end){
    int sum = 0;
    if((end < start) || (start < 0) || (end < 0)){
        return -1;
    }
    for(int i = 0; i <= end; i  ){
        if((isOdd(i))){
            sum  = i;
        }
    }
    return sum;
}
  

Ожидаемый результат:

 System.out.println(sumOdd(1, 100));// → should return 2500

System.out.println(sumOdd(-1, 100)); // →  should return -1

System.out.println(sumOdd(100, 100));// → should return 0

System.out.println(sumOdd(13, 13));// → should return 13 (This set contains one number, 13, and it is odd)

System.out.println(sumOdd(100, -100));// → should return -1

System.out.println(sumOdd(100, 1000));// → should return 247500
  

Мой результат:

 2500

-1

2500

49

-1

250000
  

Комментарии:

1. В вашем цикле for, где вы выполняете суммирование, i должно начинаться с start , а не с 0 .

2. Кстати, я предлагаю вам не использовать false флаг как для четных, так и для отрицательных чисел. В долгосрочной перспективе это усложнит обслуживание вашего кода.

Ответ №1:

Во-первых, ваш isOdd метод должен возвращать данные true только при соблюдении двух условий: number значение должно быть больше нуля и оно должно быть нечетным. Это можно сделать с помощью одного return и логического and значения. Нравится,

 public static boolean isOdd(int number) {
    return number > 0 amp;amp; number % 2 != 0;
}
  

Во-вторых, ваш цикл должен начинаться с start (не с нуля). Но затем я бы проверил, start является четным. Если это так, увеличьте его перед циклом. Тогда мы знаем, что у нас есть нечетное начальное значение, поэтому нам больше не нужно проверять нечетность в цикле (вместо этого мы можем увеличить на два). Нравится,

 public static int sumOdd(int start, int end) {
    if (end < start || start < 0 || end < 0) {
        return -1;
    }
    int sum = 0;
    if (!isOdd(start)) {
        start  ;
    }
    for (int i = start; i <= end; i  = 2) {
        sum  = i;
    }
    return sum;
}
  

Которая должна быть немного более эффективной.

Ответ №2:

Не объявляйте переменные в начале вашего метода, создавайте их только тогда, когда они необходимы. Как указал Джордан, проблема заключается в for индексе цикла, он должен начинаться с start , а не с 0:

 public static boolean isOdd(int number) {
    if (number < 0) {
        return false;
    }
    return number % 2 != 0;
}

public static int sumOdd(int start, int end) {
    if ((end < start) || (start < 0) || (end < 0)) {
        return -1;
    }
    int sum = 0;
    for (int i = start; i < end; i  ) {
      if (isOdd(i)) {
        sum  = i;
      }
    }
    return sum;
}