Добро пожаловать в ТАК!
Компилятор проанализирует ваш код и должен завершить каждый путь через ваш код, который может быть достигнут, с помощью правильного оператора выхода.
Поскольку вы объявили, что возвращаете целочисленный массив, каждый путь должен приводить к концу, где оператор return возвращает этот объявленный тип.
Так как вы можете получить доход только внутри вашего if, если внутри вашего for for your for, компилятор может легко найти способ обойти это:
for (int i = 0; i < nums.length; i++) {
не будет введено, если num.length == 0
. Так как вы не проверяете это, даже умный компилятор должен ожидать пустой массив как допустимый ввод (даже нулевой допустимый - и вылетит ваша функция)
for (int j = i + 1; j < nums.length; j++) {
снова, требуется num.length > j
. Поскольку num.length==1
является допустимым вводом, вы не будете вводить его для цикла.
if (nums[i] + nums [j] == target) {
Последнее препятствие для вашего оператора return полностью зависит от содержимого вашего массива и значения target
. Поскольку эти значения известны только во время выполнения, и компилятор немного имитирует вещи, которые он не знает заранее, он будет ожидать, что вы предоставите много входных данных, которые не выполнят это условие, поэтому возвращение никогда не будет достигнуто.
Итак, компилятор может легко увидеть, что существуют пути кода, которые не имеют правильного оператора возврата. Бросок исключения является альтернативным завершающим оператором и, таким образом, делает ваш компилятор счастливым.