Отсутствует оператор возврата: try-catch - PullRequest
0 голосов
/ 04 мая 2018

Внутри блока try и catch есть оператор return, но все равно возникает ошибка: Отсутствует оператор возврата. я использую BlueJ кстати.

public int[] getInput(){
    boolean rightInput = false;
    int[] nothing = {0,0};
    while(rightInput == false){
      try{
       rightInput = true;
      int[] XY = {0,0};
      String coordinates;
      System.out.println("Insert coordinates (x y) and press enter.");
      coordinates = input.nextLine();
      XY[1] = Character.getNumericValue(coordinates.charAt(0));
      XY[0] = Character.getNumericValue(coordinates.charAt(2));
      return XY;
     }catch(StringIndexOutOfBoundsException se){
      System.out.println(se);
      System.out.println("Try Again with a space between x and y.");
      rightInput =  false;  

      return nothing;
     }

    }

}

Ответы [ 4 ]

0 голосов
/ 04 мая 2018

что я могу понять из вашего кода, вы хотите выполнить операцию в цикле while, пока rightInput не станет истинным, и если между ними произойдет какая-либо ошибка, она не должна прерывать цикл.

то, что вы делаете, это возвращаемое значение после каждого выполнения цикла времени. где return сам выводит вас из цикла, для этого мы используем оператор break .

Я бы предложил вам вывести return XY из цикла. Пожалуйста, найдите код обновления ниже:

    public int[] getInput(){
       boolean rightInput = false;
       //int[] nothing = {0,0}; not required any more
       int[] XY = {0,0}; // moved outside loop
       while(rightInput == false){
       try{
            rightInput = true;
            String coordinates;
            System.out.println("Insert coordinates (x y) and press enter.");
            coordinates = input.nextLine();
            XY[1] = Character.getNumericValue(coordinates.charAt(0));
            XY[0] = Character.getNumericValue(coordinates.charAt(2));
       } catch(StringIndexOutOfBoundsException se) {
            System.out.println(se);
            System.out.println("Try Again with a space between x and y.");
            rightInput =  false;

           // return nothing; not required any more it is same as XY
        }

    }
    return XY;
    }
0 голосов
/ 04 мая 2018

Что если ваш код не соответствует условию, указанному в цикле while, поэтому не входит в цикл while? Поэтому, чтобы охватить этот сценарий, должен быть оператор return и вне цикла while. Просто поставь

return null

незадолго до окончания метода.

while{
  try {

  }
  catch {

  }
}
return null;
0 голосов
/ 04 мая 2018

Измените свой код на это:

 public class JavaAPP {

         public int[] getInput(){
        boolean rightInput = false;
        int[] nothing = {0,0};
        while(rightInput == false){
          try{
           rightInput = true;
          int[] XY = {0,0};
          String coordinates;
          System.out.println("Insert coordinates (x y) and press enter.");
          coordinates = input.nextLine();
          XY[1] = Character.getNumericValue(coordinates.charAt(0));
          XY[0] = Character.getNumericValue(coordinates.charAt(2));
          return XY;
         }catch(StringIndexOutOfBoundsException se){
          System.out.println(se);
          System.out.println("Try Again with a space between x and y.");
          rightInput =  false;  

          return nothing;
         }

        }
             return null;

    }  
        public static void main(String[] args) {

    JavaAPP Obj = new JavaAPP (); 
    Obj.getInput(); 

    }

    }
0 голосов
/ 04 мая 2018

Должен быть оператор возврата после цикла while, поскольку, возможно, элемент управления не вообще входит в тело цикла while (когда rightInput имеет значение true) 1 и метод должен что-то возвращать в этом случае.

Перемещение return nothing; после , в то время как блок будет работать для вас.

Или вы можете задать условие цикла while как true

while (true) {
  try {
    ...
    return XY;

  } catch(...) {
    ...
    return nothing;
  }

}

1 Хотя в вашем случае rightInput всегда ложно, компилятор этого не делает (возможно, не может?), И это хорошо. Подумайте, что произойдет, если есть специальная логика для динамического вычисления rightInput . Тогда это приведет к ошибке компиляции, требующей добавления оператора возврата, поскольку компилятор теперь никоим образом не может сказать, будет ли выполнено тело цикла , тогда как или нет.

...