我在一个Pig拉丁翻译工作,翻译成Pig拉丁给定的单词。这是pig拉丁法和is元音法。
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,当它假设是ietqay时,但这没有意义,因为,你应该把所有常数都带到元音,这应该意味着uietqay,那么为什么它是ietqay呢?有人能给我指出正确的方向吗?
注意:这不是家庭作业。
2条答案
按热度按时间pvcm50d11#
bgibtngc2#
不管这个案子,那是“blrd”还是“bird”?因为如果它没有元音,你的do-while循环不会终止,除非越界。
你的第二个例子,“quiet”应该是“uietqay”,除非你想添加特殊的逻辑来保持“qu”在一起。在你的while条件下,你可以通过让它变得更丑来实现这一点:
然后实施适当的
isQU(String s, int index)
.但我建议重写一点是为了让代码更具可读性。既然如此,我不太清楚你为什么
isVowel
检查“y”和你的while条件也检查“y”。你用的一些时间array[i]
你用的一些时间charAt(i)
. 这种不一致性使您的代码更难阅读,几乎没有任何好处。