Настоящая ошибка в том, что вы не учитываете возможность использования пустого массива.Одна вещь, которую нужно изучить в программировании, это подумать обо всех возможностях (возможно, вы уже открыли это)Массив в Java (и большинстве других языков) может иметь длину 0, то есть не иметь элементов в нем.Когда array.length
равно 0, ваш внешний цикл for не выполняется, поэтому мы переходим к основанию метода, ничего не возвращая и не имея чего возвращать.
Java тупой, но тем не менее умныйдостаточно, чтобы обнаружить эту проблему для вас.Когда объявляется, что ваш метод возвращает int
, он настаивает на том, что он также может видеть, что он будет возвращать int
во всех случаях.В вашем методе это невозможно, о чем пытается сказать следующее сообщение:
Этот метод должен возвращать результат типа int
Одно из возможных исправлений - иВозможно, я покажу вам то, чему вы еще не научились в школе - это вставить следующее выражение в конце вашего метода:
throw new IllegalArgumentException("Cannot find the minimum of an empty array");
Бросок исключения является альтернативой возвращению значения, поэтомуэто утверждение сделает Java счастливым.Если вы на самом деле попытаетесь найти минимум пустого массива, ваша программа потерпит крах и выдаст сообщение «Не удается найти минимум пустого массива».Но поиск минимума массива, в котором есть числа, должен сработать.
Тем не менее, все остальные верны: ваш способ найти минимум слишком сложен.Я смотрел на ваш код и до сих пор не понял, как он работает.Такой код не хорош.В реальной жизни вы будете писать код, который другие должны будут прочитать и изменить после вас, и никто не сможет изменить код, который они не понимают, поэтому ваш код не будет полезен.Более важным, чем написание кода, который работает правильно, является написание читаемого кода.
Редактировать: Существуют различные варианты того, как сделать это простым способом.Для школьного упражнения, использующего цикл for
, я написал бы:
public static int findMinimum (int [] array) {
if (array.length == 0) {
return 42; // or whichever value is desired in this case
}
int niedrichsteSoWeit = array[0];
for (int index = 1; index < array.length; index++) {
if (array[index] < niedrichsteSoWeit) {
niedrichsteSoWeit = array[index];
}
}
return niedrichsteSoWeit;
}
Для производственного кода я, вероятно, не написал бы метод, но использовал бы встроенную функциональность, например:
IntStream.of(myIntArray)
.min()
.ifPresentOrElse(min -> {
// do something with min
}, () -> {
// do whatever you want to do when the array is empty
});
Не беспокойтесь, если вы не понимаете немного этого фрагмента.Это в основном для более опытных программистов, которые могут прочитать этот ответ.