2016-07-25 92 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; 
}