【问题标题】:Eclipse asks for a return statement though I have oneEclipse 要求返回声明,尽管我有一个
【发布时间】:2014-01-16 20:05:08
【问题描述】:
protected int readInt(String prompt) {
    try {
        System.out.print(prompt);
        int i = keyboard.nextInt();
        keyboard.nextLine();
        return i;

    } catch (java.util.InputMismatchException e) {
        System.out.println("Error: Insert a number.");
    }
}

嗨! Eclipse 在方法 readInt() 处给了我这个错误:“这个方法必须返回一个 int 类型的结果。”并给出示例解决方案“添加返回语句”和“将返回类型更改为 void”。我试图将 return i 语句放在 try-and-catch 循环之外,但是当我这样做时,return 语句找不到变量 i。

我已经为此苦苦挣扎了一段时间,似乎无法让它发挥作用......我将不胜感激!谢谢。

【问题讨论】:

    标签: java int return try-catch inputmismatchexception


    【解决方案1】:

    想想如果出现InputMismatchException 会发生什么。

    你的代码会捕捉到它,打印"Error: Insert a number."。然后什么?您的函数被声明为返回一个 int 并且它有一个不返回任何内容的路径。

    您应该返回一个无法返回的值,并指示错误,或者重新抛出异常。

    【讨论】:

      【解决方案2】:

      在我的代码中,itry-catch 块之外声明,因此 return 语句不会有任何范围问题。它也被赋予值-1,因此如果发生异常,则该函数将-1返回给调用者。

      protected int readInt(String prompt) {
          int i=-1;
          System.out.print(prompt);  
          try { 
              i = keyboard.nextInt();
              keyboard.nextLine();    
          } catch (java.util.InputMismatchException e) {
              System.out.println("Error: Insert a number.");
              keyboard.next();
          }
          return i;
      }
      

      【讨论】:

      • @HannaMarlene 在 InputMismatch 之后,keyboard 应该移动到下一个标记。请参阅编辑后的代码。希望对您有所帮助。
      • @HannaMarlene: Here 是对您的循环问题的更好解释。
      【解决方案3】:

      在你的 catch 块之后添加一个带有 return 语句的 finally 块:

      protected int readInt(String prompt) {
        int i = 0;
        try {
          System.out.print(prompt);
          i = keyboard.nextInt();
          keyboard.nextLine();
          //return i;
      
          } catch (java.util.InputMismatchException e) {
          System.out.println("Error: Insert a number.");
          } finally{
              return i;
      
          }
      

      }

      http://docs.oracle.com/javase/tutorial/essential/exceptions/finally.html

      【讨论】:

      • 最终返回语句内部仍然存在范围问题。将i 的声明放在适当的地方。
      【解决方案4】:

      如果一个方法有返回类型,JVM在调用这个方法后应该期待一个返回值,在这种情况下返回只有try {}。假设任何情况下它都没有执行 try 段中的所有语句,那么就没有返回类型,这就是你得到编译器错误的原因。您可以将 return 放在 catch 段和 try 段内,也可以放在 try 和 catch 之外

      【讨论】:

        【解决方案5】:

        由于您正在使用InputMismatchException,因此如果InputMismatchException 被抛出,它将不知道返回什么。您可以在 catch 块中使用 throw 一些 Exception 或一些 return

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2018-05-15
          • 1970-01-01
          • 2021-02-19
          • 2022-10-13
          相关资源
          最近更新 更多