Java 将单词或句子翻译成拉丁语
所以基本上,我关于这个问题的问题是,我不允许使用Stringbuilder、Array或String.split来创建这个程序。我完全被难倒了,因为如果我能用这些方法来解决这个问题,我就不会在这里了 至于实际方案: 所需要的是输入一个单词或句子,识别第一个元音,并在元音和其他字符后面加上-个字符,将其放在元音和其他字符后面。换言之,它以这样的方式将字符串翻译成pig拉丁语: 最深的阴影 翻译成: 这是艾德·谢伊最快乐的一天 这就是我到目前为止所做的,请记住,我在if语句的第12行得到了一个字符串越界错误,因为出于某种原因,它在检测到单词之间的空格后崩溃。我也不知道如何合并一种方法,让这个程序只处理一个单词和句子Java 将单词或句子翻译成拉丁语,java,Java,所以基本上,我关于这个问题的问题是,我不允许使用Stringbuilder、Array或String.split来创建这个程序。我完全被难倒了,因为如果我能用这些方法来解决这个问题,我就不会在这里了 至于实际方案: 所需要的是输入一个单词或句子,识别第一个元音,并在元音和其他字符后面加上-个字符,将其放在元音和其他字符后面。换言之,它以这样的方式将字符串翻译成pig拉丁语: 最深的阴影 翻译成: 这是艾德·谢伊最快乐的一天 这就是我到目前为止所做的,请记住,我在if语句的第12行得到了一个字符串
public static void main(String[] args){
String word = "", temp = "", secondTemp = "", beforeVowel = "", translation = "";
int start = 0, stop = 0, counter = 0;
char a = 'a', e = 'e', charI = 'i', o = 'o', u = 'u';
Scanner input = new Scanner(System.in);
System.out.println("Enter a word or sentence to translate it into Pig Latin");
word = input.next();
while(input.hasNext()) {
if(!(word.charAt(stop) == ' ')) {
stop++;
}
else {
temp = word.substring(start, stop);
start = stop;
for(int i = 0; i<temp.length(); i++) {
if(temp.charAt(i) == a || temp.charAt(i) == e || temp.charAt(i) == charI || temp.charAt(i) == o || temp.charAt(i) == u) {
secondTemp = temp.substring(0, i);
translation = temp.substring(i-1) + "-" + secondTemp + "ay";
}
}
}
System.out.println(translation);
}
}
我已经做了一些修改来改进我的代码,并且已经达到了可以翻译字符串的第一个单词的程度,但是我的代码将完全忽略字符串中的其余单词
public static void main(String[] args){
String word = "", temp = "", secondTemp = "", beforeVowel = "", translation = "";
int start = 0, stop = 0, counter = 0;
char a = 'a', e = 'e', charI = 'i', o = 'o', u = 'u';
Scanner input = new Scanner(System.in);
System.out.println("Enter a word or sentence to translate it into Pig Latin");
word = input.next();
while(input.hasNext()) {
for(int i = 0; i<word.length(); i++) {
if(word.charAt(i) == a || word.charAt(i) == e || word.charAt(i) == charI || word.charAt(i) == o || word.charAt(i) == u) {
secondTemp = word.substring(0, i);
translation += word.substring(i) + "-" + secondTemp + "ay";
}
}
break;
}
System.out.println(translation);
}
}
input.next已经为您提供了下一个单词,所以我认为您不必到处寻找空白。这看起来像是家庭作业,所以也许最好不要给你完整的答案,但你的方式非常接近
因为input.next提供了下一个单词,所以我完全摆脱了这里的分支。单词没有空格
if(!(word.charAt(stop) == ' ')) {
stop++;
}
else {
temp = word.substring(start, stop);
start = stop;
由于hasNext对最后一个元素返回false,最后一个元素将不会被处理,因此我将循环更改为如下内容:
for (word = input.next(); input != null; word = input.next()) {
input.next在没有剩余输入时返回null
该行有一个off by one错误:
translation = temp.substring(i-1) + "-" + secondTemp + "ay";
你需要马上打破这个循环,否则它将转到下一个元音,并放弃我们找到的翻译。感谢您的回复。我考虑了你所说的,并取得了一些进展。我似乎只能把一个词转换成拉丁语,即使我有多个词。我把子串I-1改成了I。我想这就是问题的原因。。。不知道从那里去哪里啊。看看你的新代码。它有两个问题:有两个嵌套的循环。我建议的中断被放置在外部循环中,而不是内部循环中。break将您直接带出它所在的循环,在本例中,它是外部循环。第二个问题是while循环,它测试hasNext。当遇到最后一个单词时,hasNext将为false,并且不会处理最后一个单词。尝试在我的答案中使用for循环。将用我更改循环的原因更新我的答案。