所以基本上我对这个问题的问题是我不允许使用Stringbuilder,数组或String.split()来创建这个程序。我完全难以做到这一点,因为如果我能用这些方法解决这个问题,我就不会在这里。
至于实际节目: 所需要的是接受识别第一个元音的单词或句子,并将其前面的字符放在元音和其他字符之后,将其分隔为“ - (元音前的字符)”。换句话说,它将字符串翻译成猪拉丁语:
最深的阴影
转换为:
e-Thay eepest-day ade-shay
这是我到目前为止所记得的,请记住我从if语句获取第12行的String out of bounds错误,因为在某些原因它在检测到单词之间的空格后崩溃了。我也不知道如何采用一种方法让这个程序只处理一个单词和句子。
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);
}
}
答案 0 :(得分:1)
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
)
此行有一个错误:
translation = temp.substring(i-1) + "-" + secondTemp + "ay";
然后你需要break
离开这个循环,否则它会转到下一个元音并丢弃我们找到的翻译。