2016-10-16 4 views
-2

Я новичок в кодировании на Java, и я изо всех сил пытаюсь понять, почему все не работает. У меня есть класс под названием Geek.java, и под ним у меня есть целая куча методов. Один из методов, который я попросил сделать для моего класса, - найти наименьшее целое число из 3 целых чисел.Eclipse выплевывает «Этот метод должен возвращать результат типа int»

public int smallest(int num1, int num2, int num3){ 
    if (num1 < num2){ 
     if (num1 < num3){ 
      return num1; 
     } 
    } 
    if (num2 < num1){ 
     if (num2 < num3){ 
      return num2; 
     } 
    } 
    if (num3 < num1){ 
     if (num3 < num2){ 
      return num3; 
     } 
    } 
    else 
     return num1; 
} 

Игнорирование логических ошибок, как я понимаю, должно быть возвращение значение по умолчанию, если ни один из, если условия матча, который должен быть указано другое. Тем не менее, eclipse все еще говорит мне, что «должно возвращать значение типа int». Прошу прощения, если ответ на это уже был заявлен ранее, но я не могу найти его. Спасибо,

+1

Не все ваши пути управлений возвращает значение. –

+0

Что делать, если он входит в один из тех, которые не имеют соответствующих блоков else? Вложенные ifs? Что будет потом, что вернет ваш метод? – Li357

ответ

1

Если вы просто пытаетесь понять, почему вещь не работает. Это связано с тем, что не все пути управления возвращают значение.

Если вы измените свой код на этот:

if (num1 < num2 && num1 < num3){ 
    return num1; 
} 
else if (num2 < num1 && num2 < num3){ 
    return num2; 
} 
else{ 
    return num3; 
} 

См, теперь все пути управления будет возвращать некоторое значение.

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

public static int min(int a, int b){ 
    if (a < b) 
     return a; 
    else 
     return b; 
} 

А теперь функции smallest:

public static int smallest(int a, int b, int c){ 
    return min(min(a, b), c); 
} 
+0

Ой, хорошо, так почему же, когда я комментирую инструкцию else и просто оставляю return num1 в конце, что не дается ошибка? –

+0

Потому что в этом случае все пути управления возвращают значение. –

+0

, имеющий оператор возврата в конце, означает, что если поток поступает из всех комбинаций 'if-else' в конец функции, этот оператор возврата возвращает некоторое значение. –

0

Это потому, что у вас есть вложенные if заявления, и это может привести ваш код не возвращает значение:

if (num3 < num1) { 
     if (num3 < num2) { 
      return num3; 
     } 
    } else 
     return num1; 

В этом случае, скажем num3 < num1 но num3 не менее num2, то ваш код не будет возвращать какое-либо значение, потому что внутреннее условие if (num3 < num2) не имеет соответствующего блока else.

Изменение кода к чему-то, как это должно работать, как проточная элемент управления, то есть четкий поток, и всегда будет возвращать значение:

if (num3 < num1 && num3 < num2) { 

     return num3; 

    } else 
     return num1; 

Подобные изменения должны быть внесены в другие if заявления.

Смежные вопросы