当单词以辅音开头时,Java不能正确输出代码。它输出:
线程中的异常" main"
当单词以元音开头时,它会起作用。
import java.util.*;
public class PigLatin {
public static void main(String[] args) {
String word = getWord();
String pigLatinWord = convertToPigLatin(word);
System.out.println(pigLatinWord + " is the word translated in PigLatin");
}
public static String getWord() {
Scanner keyboard = new Scanner(System.in);
String word;
System.out.print("Enter a word: ");
word = keyboard.nextLine();
return word;
}
public static boolean isVowel(char character) {
if(character == 'a' || character == 'e' || character == 'i'
|| character == 'o' || character == 'u') {
return true;
} else {
return false;
}
}
public static String convertToPigLatin(String word) {
String pigLatinWord = "";
if(isVowel(word.charAt(0)) == true) {
String latin = word + "yay";
System.out.print(latin);
} else {
for (int x = 0; x < word.length(); x++) {
if(isVowel(word.charAt(x)) == true) {
String partOfWord = word.substring(0,word.charAt(x));
String secondPartOfWord = word.substring(word.charAt(x));
String combination=secondPartOfWord + partOfWord;
pigLatinWord = combination + "ay";
}
}
}
return pigLatinWord;
}
}
答案 0 :(得分:3)
好的帮助某人的新方法。而不只是告诉你答案让我们学习!
我用输入&#34; piglet&#34;来运行你的程序。惊喜!我收到了这个错误。
Exception in thread "main" java.lang.StringIndexOutOfBoundsException: String index out of range: 105
at java.lang.String.substring(String.java:1907)
at com.tutelatechnologies.tapfortap.server.support.PigLatin.convertToPigLatin(PigLatin.java:40)
at com.tutelatechnologies.tapfortap.server.support.PigLatin.main(PigLatin.java:9)
我知道你在想什么。这是什么意思?!?!?好吧,如果你查看堆栈跟踪(如果你打算成为开发人员,习惯这样做),当你调用substring()方法时,你会看到StringIndexOutOfBoundsException。它甚至会告诉您代码中出现错误的行!
PigLatin.java:40
绝佳!所以用一个例子来浏览你的代码。哎呀,用“小猪”这个词在纸上试试吧。像我一样。特别注意要传递给substring()的x的值。另外,让我提醒您substring methods的定义。确保您对此方法的输入参数有好处,以确定是否在结果子字符串中包含或排除该索引。
欢迎对此发表评论以获取更多提示!
答案 1 :(得分:1)
首先,您正在使用.charAt访问子字符串,这会导致错误。只需使用索引x。
第二个错误,一旦你找到了你的字符串,你想完成。在if语句的末尾添加一个中断。
最后,你的代码是错误的,因为你需要处理所有辅音的情况;如果你有一个像节奏这样的词,你的猪拉丁语将是有节奏的。使用前两个修复程序,不会发生这种情况。因此,如果所有字母都是辅音,请检查第二种情况。
所以你的最后一个else部分看起来应该是这样的,包含所有的变化:
} else {
Boolean wordIsAllConsonants = true;
for (int x = 0; x < word.length(); x++) {
if(isVowel(word.charAt(x)) == true) {
String partOfWord = word.substring(0,x);
String secondPartOfWord = word.substring(x);
String combination=secondPartOfWord + partOfWord;
pigLatinWord = combination + "ay";
wordIsAllConsonants = false;
break;
}
}
if(wordIsAllConsonants)
pigLatinWord = word + "ay";
}
return pigLatinWord;