2016-07-25 91 views
1

我正在編寫一個程序,它有兩條規則:
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; 
}