缺少return语句:try-catch

时间:2018-05-04 04:27:03

标签: java oop methods return try-catch

在try和catch块中有一个return语句,但仍然会出现错误: 缺少退货声明。 我正在使用BlueJ btw。

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 :(得分:1)

while循环之后必须有一个return语句,因为可能控制根本不进入while循环体(当rightInput为真时) 1 并且该方法必须在这种情况下返回一些东西。

while 块之后移动return nothing;将适合您。

或者,您可以将while循环条件设为true

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

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

}

1 虽然在你的情况下rightInput总是假的,编译器不会推断(也许不能?)并且它是一件好事。想想如果有一个专门的逻辑来动态计算rightInput 会发生什么。然后它会导致编译错误,要求添加一个return语句,因为编译器现在无法判断 while 循环体是否会被执行。

答案 1 :(得分:0)

如果你的代码不符合while循环中指定的条件怎么办,那么怎么不进入while循环呢?所以为了覆盖那个场景,while循环之外应该有一个return语句。只需加上

return null

在方法结束之前。

while{
  try {

  }
  catch {

  }
}
return null;

答案 2 :(得分:0)

将您的代码更改为:

<?php
         $nums = array(0, 1, 2, 3);
         echo "My 1st array =";
         $str='';
         foreach ($nums as $value) {
          $str.= $value.",";
         }
         echo rtrim($str,',');
 ?>

答案 3 :(得分:0)

我可以从你想要在while循环中执行操作的代码中理解,直到 rightInput 变为true,如果在它们之间发生任何错误,它不应该破坏循环。

你正在做的是在每个循环执行后返回值。返回本身将带您离开循环,因为我们使用 break 运算符。

我建议你将返回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;
    }