#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;
}