拉丁语翻译java

evrscar2  于 2021-06-21  发布在  Pig
关注(0)|答案(2)|浏览(354)

我在一个Pig拉丁翻译工作,翻译成Pig拉丁给定的单词。这是pig拉丁法和is元音法。

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;
    }

问题是当我输入单词“bird”和“quiet”时。第一个扔 java.lang.StringIndexOutOfBoundsException: String index out of range: 4 第二个不能正常转换。安静打印uietqay,当它假设是ietqay时,但这没有意义,因为,你应该把所有常数都带到元音,这应该意味着uietqay,那么为什么它是ietqay呢?有人能给我指出正确的方向吗?
注意:这不是家庭作业。

pvcm50d1

pvcm50d11#

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;
}
bgibtngc

bgibtngc2#

不管这个案子,那是“blrd”还是“bird”?因为如果它没有元音,你的do-while循环不会终止,除非越界。
你的第二个例子,“quiet”应该是“uietqay”,除非你想添加特殊的逻辑来保持“qu”在一起。在你的while条件下,你可以通过让它变得更丑来实现这一点:

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

然后实施适当的 isQU(String s, int index) .
但我建议重写一点是为了让代码更具可读性。既然如此,我不太清楚你为什么 isVowel 检查“y”和你的while条件也检查“y”。你用的一些时间 array[i] 你用的一些时间 charAt(i) . 这种不一致性使您的代码更难阅读,几乎没有任何好处。

相关问题