2012-10-23 52 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; 
}