2011-12-13 65 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; 
}