пиглатин переводчик Java - PullRequest
       6

пиглатин переводчик Java

0 голосов
/ 13 декабря 2011

Я работаю на латинском переводчике, который переводит данное слово на латинский.Вот латинский метод и метод isVowel.

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, когда предполагается, что это ietquay, но это не имеет смысла, потому что вы должны перенести все константы на гласную, что должно означать uietquay, так почему же это ietquay?Может кто-нибудь указать мне правильное направление?

ПРИМЕЧАНИЕ. Это не домашняя работа.

Ответы [ 2 ]

2 голосов
/ 13 декабря 2011

Не обращая внимания, это "BLRD" или "птица"?Потому что, если в нем нет гласных, ваш цикл do-while не завершается, кроме как выходом за пределы.

Ваш второй случай, «quiet» должен быть «uietqay», если вы не хотите добавить специальную логику для сохранения"ку" вместе.Вы могли бы выполнить это в своем состоянии 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).Это несоответствие делает ваш код трудным для чтения практически без пользы.

1 голос
/ 07 марта 2012
 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;
}    
...