2011-12-13 64 views
0

我正在研究一種將拉丁語翻譯成豬拉丁語的翻譯器。這裏是拉丁方法和isVowel方法。明膠翻譯器java

public static void pigLatin(String s) { 
     char[] array = s.trim().toCharArray(); 
     if(isVowel(s.charAt(0)) && !Character.toString(s.charAt(0)).equalsIgnoreCase("y")){ 
      System.out.println(s+"way"); 
     }else { 
      int i = 0; 
      String toReturn = ""; 
      do { 
       toReturn += array[i]; 
       i++; 
      }while(!isVowel(s.charAt(i)) && !Character.toString(array[i]).equalsIgnoreCase("y")); 
      System.out.println(s.substring(i)+toReturn+"ay"); 
     } 
    } 

    public static boolean isVowel(char c) { 
     char[] vowels = new char[] {'a','e','i','o','u','y'}; 
     for(int i = 0;i<vowels.length;i++) { 
      if(Character.toString(vowels[i]).equalsIgnoreCase(Character.toString(c))) { 
       return true; 
      } 
     } 
     return false; 
    } 

問題是當我輸入單詞「BIDR」和「安靜」。第一個投擲java.lang.StringIndexOutOfBoundsException: String index out of range: 4 第二個不能正確轉換。安靜的印刷uietqay,當它認爲是靜音時,但這是沒有意義的,因爲,你應該把所有的常數都取到元音,這應該意味着uietquay,那麼爲什麼它是靜音?有人能指點我正確的方向嗎?

注意:這不是家庭作業。

+0

*安靜打印uietqay,當它假設是ietquay,但沒有任何意義,因爲,你應該採取高達元音,這應該意味着uietquay那麼爲什麼ietquay所有的常量?* **嗯?**你問*我們*教你明膠的規則嗎?在請求幫助使程序符合要求之前,牢牢掌握您的要求。我們不是在這裏給你的要求。 – 2011-12-13 17:54:12

+0

我只是向你解釋發生了什麼......我知道需求是什麼。我在我的評論中清楚地顯示了他們,「你應該把所有常數都加到元音之上」。 – 2011-12-13 18:00:20

+0

如果你「應該把所有的常量都歸到元音中」,你爲什麼還會說,「它認爲[原文如此]是ietquay」?這兩種說法是相互排斥的。他們不可能都是真實的。關於該段沒有任何「明確的」。 – 2011-12-13 18:05:37

回答

2

忽略案例,這是「BLRD」還是「鳥」?因爲如果它沒有元音,你的do-while循環不會終止,除非超出界限。

你的第二種情況,「安靜」應該是「uietqay」,除非你想添加特殊的邏輯來保持「qu」在一起。你可以通過使它醜陋在你的條件的同時做到這一點:

while((!isVowel(s.charAt(i)) || isQU(s, i)) && !Character.toString(array[i]).equalsIgnoreCase("y")) 

然後執行相應的isQU(String s, int index)

但我建議多一點改寫,以使您的代碼更具可讀性。現在,我不太清楚爲什麼你的isVowel檢查「y」,你的條件也檢查「y」。有些時候你使用array[i],有些時候你使用charAt(i)。這種不一致使您的代碼難以閱讀,很少或沒有任何好處。

1
public static String pigLatin(String a){ 
    a=a.toLowerCase(); 
    String [] x=a.split(" "); 
    int vowl=0; 
    String c=""; 
    String d=""; 
    String trans=""; 
    for(int i=0; i<x.length; i++){ 
     for(int j = 0;j<x[i].length();j++){ 
      if(x[i].charAt(j)=='a'||x[i].charAt(j)=='e'||x[i].charAt(j)=='i'||x[i].charAt(j)=='o'||x[i].charAt(j)=='u'){ 
       vowl=j; 
       j=x[i].length(); 
      } 
     } 
     c=x[i].substring(0,vowl); 
     d=x[i].substring(vowl,x[i].length()); 
     trans+= d+c+"ay "; 
    } 
    return trans; 
}