Могу ли я объявить массив в операторе if? - PullRequest
0 голосов
/ 26 марта 2020
class Solution {
    public int[] twoSum(int[] nums, int target) {

      for (int i=0; i<= nums.length()-1;i++){

          for (int j =i+1 ; j <= nums.length()-2; j++){

              if((nums[i]+nums[j]) == target )
                  int [] r = {i , j};
                  return r;
          }
      }

    }
}

...

Я написал следующий код, но получаю ошибку в своем операторе if. Я пытаюсь решить проблему с использованием кода leetcode, но сталкиваюсь с ошибкой:

Строка 9: ошибка: объявление переменной здесь недопустимо int [] r = {i, j}; ^

Что я могу сделать, чтобы исправить это и почему я сталкиваюсь с этой ошибкой?

Ответы [ 6 ]

2 голосов
/ 26 марта 2020

Правильное форматирование кода:

if ((nums[i]+nums[j]) == target)
    int [] r = {i , j}; // only has scope during declaration
return r; // oops! r is out of scope

Ошибка компиляции вызвана тем, что r не имеет какой-либо области за пределами своего объявления.

Чтобы исправить, либо:

if ((nums[i]+nums[j]) == target) {
    int [] r = {i , j};
    return r; 
}

или

if ((nums[i]+nums[j]) == target) {
    return new int[]{i , j};
}
0 голосов
/ 26 марта 2020
  1. Тело блока if должно быть оператором, а объявление локальной переменной не является опцией для оператора.
  2. В этом случае компилятор java знает, что оператор объявления массива будет неиспользованным, поскольку это единственное утверждение, и вокруг него нет фигурных скобок. Но если вы напишите его в фигурных скобках, java компилятор не обязательно пометит его как неиспользуемый и пометит ошибку, чтобы он позволил вам запустить код.
  3. Поэтому напишите объявление в фигурных скобках.
0 голосов
/ 26 марта 2020

Вы должны быть в состоянии объявить массив в операторе if. Вы можете добавить '{' после оператора if и запустить его.

0 голосов
/ 26 марта 2020

попробуй вот так

class Solution {
public int[] twoSum(int[] nums, int target) {

  for (int i=0; i<= nums.length()-1;i++){

      for (int j =i+1 ; j <= nums.length()-2; j++){

          if((nums[i]+nums[j]) == target ){
              int [] r = {i , j};
              return r;
          }
      }
    }

  }
}
0 голосов
/ 26 марта 2020

Вы должны вернуть что-то, даже если значение не найдено.

class Solution { 
    public int[] twoSum(int[] nums, int target) {
        for (int i=0; i<= nums.length - 1; i++){
            for (int j =i+1 ; j <= nums.length - 2; j++){
                if((nums[i]+nums[j]) == target ){
                    return new int[]{i , j};
                }
            }
        }
        return new int[0];
    }
}
0 голосов
/ 26 марта 2020

Да, вы можете объявить массив в операторе if.

Но должно быть больше, чем просто объявление массива. В вашем коде вы просто объявляете массив и больше ничего не делаете в операторе if.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...