2012-10-23 145 views
1

缺少返回语句的错误。任何人都知道代码有什么问题?缺少返回语句编译错误

import java.text.*; 
public class Sentence { 
    private String text; 
    public Sentence(String str) { 
     str = text; 
    } 
    public boolean isPalindrome() { 
     int length = text.length(); 
     for(int n = 0;n <= length/2;n++) { 
      char letterFromFront = text.charAt(n); 
      char letterFromBack = text.charAt(length); 
      if(letterFromFront == letterFromBack) { 
       return true; 
      }else { 
       return false; 
      } 
     } 
    } 
} 
+0

通过发布你的错误消息 – JPM

+0

它可能细说更多的功能不会返回任何东西(即 - 编译器不能请确保在编译时您的for循环甚至被执行)。我认为你也有一个逻辑错误。 IE - 该函数将为输入“asdfsdfa”返回true,因为在第一个循环中a == a。 –

回答

1

人有任何想法有什么错的代码?

究竟是什么意思。

这样说:如果字符串为空,您认为会返回什么结果? (事实上​​,它会抛出一个例外,因为你可能希望你的上限是排他性的,而不是包容性的,但基本上你需要考虑它永远不会进入循环体的情况。)

还有其他他们所犯的错误与此代码,请不要忘记:

  • text.charAt(length)会抛出异常,总是
  • 真的意味着总是在第一次迭代返回?这将表明xabcx是回文...(提示:你只能有效返回true当你完成了环......)
+0

其实在这种情况下,它会抛出一个IndexOutOfBoundsException,我相信;-) – assylias

+0

@assylias:糟糕,我没有注意到,循环上限是*包含*。伊克! –

1

如果length-2例如(这诚然是不可能发生的),你的循环永远不会运行,你不会返回任何东西。

您需要在循环之后添加一个return语句以满足编译器的要求,或者在循环之前甚至更好,检查长度是否为>1,否则返回true/false。

您的代码还有其他问题,但这是编译器错误的原因。

+1

'-1'的值不够,因为'-1/2'是零。你需要一个字符串更少的字符;-) – dasblinkenlight

+1

这个代码是惊人地难以理解它似乎;-) – assylias

0

从else子句中移除返回语句并在循环结束之前移动。所以如果数字是回文,它落在if子句中并返回true,如果不是,则返回false。 从理论上讲,你的代码是正确的,但编译器不会这样看。

+0

抱歉,但我不完全得到你,介意写出代码? – user1768967

2

它的抱怨是因为如果它没有输入for循环将不会有任何回报。

请在for循环后添加return声明。

同时请注意:n++for循环是死代码如您在第一次迭代本身回来。

1

您的代码没有考虑到n不小于或等于length/2的情况。

我想,如果它不是回文,这意味着无论发生什么,你想返回false。

public class Sentence { 
    private String text; 
    public Sentence(String str) { 
     str = text; 
    } 
    public boolean isPalindrome() { 
     boolean value = false; 
     int length = text.length(); 
     for(int n = 0;n <= length/2;n++) { 
      char letterFromFront = text.charAt(n); 
      char letterFromBack = text.charAt(length); 
      if(letterFromFront == letterFromBack) { 
       value = true; 
      }else { 
       value = false; 
      } 
     } 
     return value; 
    } 
} 
0

其实return false应放置在循环后,否则它始终运行一次

public boolean isPalindrome() { 
    int length = text.length(); 
    for(int n = 0;n <= length/2;n++) { 
     char letterFromFront = text.charAt(n); 
     char letterFromBack = text.charAt(length); 
     if(letterFromFront == letterFromBack) { 
      return true; 
     } 
    } 
    return false; 
}