Java pig拉丁语类节目-元音问题
我正在编写一个有两条规则的程序:Java pig拉丁语类节目-元音问题,java,Java,我正在编写一个有两条规则的程序: 1.如果单词的第一个字符是元音,则将其移至单词末尾。 2.如果单词的第一个字符是辅音,则将其移动到单词的末尾并附加“ae” import java.util.Scanner; public class Program5 { public static void main(String[] args) { // TODO Auto-generated method stub Scanner scanner = new S
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 is a eautifulbae aydae
基本上,它不会翻译任何以元音开头的单词。我认为问题源于piggyWord方法,但我不确定。我可以得到关于如何修复此问题的任何提示吗?错误在于
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";
}
}
根据您的规则,您不需要方法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”。如果只涉及第一个字母,而不是第一个元音,那么如果元音位于第一个位置,您可以返回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;
}
private static int first元音(字符串字){
word=word.toLowerCase();
对于(int i=0;i
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;
}