2016-07-25 3 views
1

私は2つの規則を持つプログラムを書いています:
1.単語の最初の文字が母音であれば、それを単語の最後に移動します。
2.単語の最初の文字が子音の場合は、単語の末尾に移動して「ae」を追加します。母音との問題

import java.util.Scanner; 

public class Program5 { 

    public static void main(String[] args) { 
     // TODO Auto-generated method stub 
     Scanner scanner = new Scanner(System.in); 
     System.out.print("Please enter a sentence: "); 
     String english = scanner.nextLine(); 
     String piggy = piggyEnglish(english); 
     System.out.print("Translated: " + piggy); 
    } 
    private static String piggyEnglish(String s) { 
      String piggy = ""; 
      int i = 0; 
      while (i<s.length()) { 

       while (i<s.length() && !isLetter(s.charAt(i))) { 
       piggy = piggy + s.charAt(i); 
       i++; 
       } 

       if (i>=s.length()) break; 

       int begin = i; 
       while (i<s.length() && isLetter(s.charAt(i))) { 
       i++; 
       } 

       int end = i; 
       piggy = piggy + piggyWord(s.substring(begin, end)); 
      } 
      return piggy; 
      } 

    private static boolean beginsWithVowel(String word){ 
       String vowels = "aeiou"; 
       char letter = word.charAt(0); 
       return (vowels.indexOf(letter) != -1); 
       } 

    private static boolean isLetter(char c) { 
     return ((c >='A' && c <='Z') || (c >='a' && c <='z')); 
     } 

    private static String piggyWord(String word) { 
      int split = firstVowel(word); 
      if(beginsWithVowel(word)) { 
       return word.substring(split) + word.substring(0, split); 
      } else { 
      return word.substring(split) + word.substring(0, split)+"ae"; 
      } 
    }  

    private static int firstVowel(String word) { 
     word = word.toLowerCase(); 
     for (int i=0; i<word.length(); i++) 
      if (word.charAt(i)=='a' || word.charAt(i)=='e' || 
       word.charAt(i)=='i' || word.charAt(i)=='o' || 
       word.charAt(i)=='u') 
      return i; 
     return 0; 
    } 
} 

次が予想される出力されます。

Please enter a sentence: today is a beautiful day 
Translated: odaytae si a eautifulbae aydae 

しかし、これは私が取得していますものです:

Please enter a sentence: today is a beautiful day 
Translated: odaytae is a eautifulbae aydae 

を基本的に、それはで始まる任意の単語を翻訳しません。母音。私は問題がpiggyWordメソッドに由来すると思うが、私は確信していない。これを修正する方法についての指針を得ることはできますか?

答えて

1

エラーがpiggyWord機能である:あなただけに必要なので

private static String piggyWord(String word) { 
     int split = firstVowel(word); 
     if(beginsWithVowel(word)) { 
      return word.substring(split + 1) + word.substring(0, split + 1); //Since vowel is in 1st place, substring(0,0) returns empty string. 
     } else { 
     return word.substring(split) + word.substring(0, split)+"ae"; 
     } 
} 
0

あなたのルールに基づいて、あなたは、単語の最初の誓いのインデックスを取得する方法firstVowelを()は必要ありません。単語の最初の文字が誓いであるかどうかを知る。

だから、単純に次のようにあなたのpiggyWord方法を変更するには、あなたの問題を解決します:

private static String piggyWord(String word) { 
    if(beginsWithVowel(word)) { 
     return word.substring(1) + word.substring(0, 1); 
    } else { 
     return word.substring(1) + word.substring(0, 1)+"ae"; 
    } 
} 

以上単に:

private static String piggyWord(String word) { 
    String result = word.substring(1) + word.substring(0, 1); 
    return beginsWithVowel(word) ? result : result + "ae"; 
} 

あなたはいつもに単語の最初の文字を移動する必要があるため唯一のことは、最後に余分な "ae"を追加する必要があるかどうかです。

0

"firstVowel"よりも最初の文字だけが関係する場合は、母音が最初の位置にある場合は1を返すことができます。

private static int firstVowel(String word) { 
    word = word.toLowerCase(); 
    for (int i=0; i<word.length(); i++) 
     if (word.charAt(i)=='a' || word.charAt(i)=='e' || 
      word.charAt(i)=='i' || word.charAt(i)=='o' || 
      word.charAt(i)=='u') 
     return 1; 
    return 0; 
}