【问题标题】:Missing return Statement, Recursive method缺少返回语句,递归方法
【发布时间】:2013-03-10 08:52:21
【问题描述】:

我不断收到错误

Palindrome.java:36: 错误:缺少返回语句 } ^ 1 错误

当我尝试编译时,对于实验室我必须有一个递归方法,如果输入字符串是忽略非字母字符的回文,则返回 true。那么问题是什么,我该如何解决它。

package lab07;

import java.util.Scanner;

public class Palindrome{
   public static void main(String[] args){
      Scanner input = new Scanner(System.in);
      while ( input.hasNext()){
        String line =  normalise(input.next());
      System.out.println(isPalindrome(line));
      }
}
   public static String normalise(String line){
    String s = "";
    char[] chars = line.toCharArray();
    for (int i = 0; i < chars.length; i++){
        if ( Character.isLetter(chars[i]))
        s += Character.toLowerCase(chars[i]);
}
    return s;
   }
   public static boolean isPalindrome(String line){
    if ( line.length() > 1 ){
        if (line.charAt(0) == line.charAt(line.length()-1)){
            isPalindrome(line.substring(1, line.length()-1));
        }
        else
            return false;

    }
    else
        return true;
   }

【问题讨论】:

  • 一个方法中有两个返回值,这是一种糟糕的编程风格。请避免这种情况。
  • 第 36 行是哪一行?

标签: java recursion return


【解决方案1】:

需要返回递归case的结果:

 public static boolean isPalindrome(String line){
    if ( line.length() > 1 ){
        if (line.charAt(0) == line.charAt(line.length()-1)){
            return isPalindrome(line.substring(1, line.length()-1));

        }
        else
            return false;

    }
    else
        return true;
}

【讨论】:

    【解决方案2】:
    if (line.charAt(0) == line.charAt(line.length()-1)){
                isPalindrome(line.substring(1, line.length()-1));
        //specify return here    
            }
    
    
    Here  no return;
    

    你指定了返回类型 boolean。所以在所有可能的情况下你都需要提供返回类型。

    【讨论】:

      【解决方案3】:

      您在内部 if 条件中缺少 return 语句

         public static boolean isPalindrome(String line){
          if ( line.length() > 1 ){
              if (line.charAt(0) == line.charAt(line.length()-1)){
                  isPalindrome(line.substring(1, line.length()-1));
                     // MISSING RETURN HERE
              }
              else
                  return false;
      
          }
          else
              return true;
         }
      

      对于所有可能的条件,都需要有一个return

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-12-22
        • 2013-11-30
        • 2017-01-26
        • 2017-09-21
        • 2021-11-11
        • 1970-01-01
        相关资源
        最近更新 更多