Почему Java не сообщает об отсутствующей ошибке возврата, если возврат доступен только в if-блоке? [дубликат] ⇐ JAVA
Почему Java не сообщает об отсутствующей ошибке возврата, если возврат доступен только в if-блоке? [дубликат]
Это дублирующий вопрос, на который уже был дан ответ в разделе «Почему мне не нужно предоставлять возвращаемое значение после бесконечного цикла?» [дубликат]
Интересно, почему следующие коды подходят? (Из Leetcode #1 две суммы).
Я думаю, что Java должна сообщать об ошибке отсутствия оператора возврата, но в данном случае это не так?
Хотя описание кода гарантирует, что будет правильный ответ, но зачем писать код следующим образом, чтобы быть уверенным, что компилятор не сообщит об отсутствующей ошибке оператора возврата?
public int[] twoSum1(int[] nums, int target) { для (int я = 0; ; я++) for (int j = i + 1; j < nums.length; j++) if (nums + nums[j] == цель) вернуть новый int[]{i, j}; // Почему мы можем пропустить здесь следующий оператор возврата? // возвращаем новое int[0]; } public int[] twoSum2(int[] nums, int target) { Map idx = new HashMap(); for (int j = 0; ; j++) { int x = nums[j]; если (idx.containsKey(цель - x)) return new int[]{idx.get(target - x), j}; idx.put(х, j); } // Почему мы можем пропустить здесь следующий оператор возврата? // возвращаем новый int[0];} Кроме того, если я настрою случай без правильного ответа, JVM сообщит об ошибке во время выполнения:
Исключение в потоке «main» java.lang.ArrayIndexOutOfBoundsException: индекс 2147483647 выходит за пределы для длины 2 в Solution.twoSum1(Solution.java:5) в Solution.main(Solution.java:19)
Это дублирующий вопрос, на который уже был дан ответ в разделе «Почему мне не нужно предоставлять возвращаемое значение после бесконечного цикла?» [дубликат]
Интересно, почему следующие коды подходят? (Из Leetcode #1 две суммы).
Я думаю, что Java должна сообщать об ошибке отсутствия оператора возврата, но в данном случае это не так?
Хотя описание кода гарантирует, что будет правильный ответ, но зачем писать код следующим образом, чтобы быть уверенным, что компилятор не сообщит об отсутствующей ошибке оператора возврата?
public int[] twoSum1(int[] nums, int target) { для (int я = 0; ; я++) for (int j = i + 1; j < nums.length; j++) if (nums + nums[j] == цель) вернуть новый int[]{i, j}; // Почему мы можем пропустить здесь следующий оператор возврата? // возвращаем новое int[0]; } public int[] twoSum2(int[] nums, int target) { Map idx = new HashMap(); for (int j = 0; ; j++) { int x = nums[j]; если (idx.containsKey(цель - x)) return new int[]{idx.get(target - x), j}; idx.put(х, j); } // Почему мы можем пропустить здесь следующий оператор возврата? // возвращаем новый int[0];} Кроме того, если я настрою случай без правильного ответа, JVM сообщит об ошибке во время выполнения:
Исключение в потоке «main» java.lang.ArrayIndexOutOfBoundsException: индекс 2147483647 выходит за пределы для длины 2 в Solution.twoSum1(Solution.java:5) в Solution.main(Solution.java:19)
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
-
«из импорта бесплатных игр квадрат, вектор» приводит к отсутствующей ошибке импорта
Anonymous » » в форуме Python - 0 Ответы
- 29 Просмотры
-
Последнее сообщение Anonymous
-