Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/343.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 将单词或句子翻译成拉丁语_Java - Fatal编程技术网

Java 将单词或句子翻译成拉丁语

Java 将单词或句子翻译成拉丁语,java,Java,所以基本上,我关于这个问题的问题是,我不允许使用Stringbuilder、Array或String.split来创建这个程序。我完全被难倒了,因为如果我能用这些方法来解决这个问题,我就不会在这里了 至于实际方案: 所需要的是输入一个单词或句子,识别第一个元音,并在元音和其他字符后面加上-个字符,将其放在元音和其他字符后面。换言之,它以这样的方式将字符串翻译成pig拉丁语: 最深的阴影 翻译成: 这是艾德·谢伊最快乐的一天 这就是我到目前为止所做的,请记住,我在if语句的第12行得到了一个字符串

所以基本上,我关于这个问题的问题是,我不允许使用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循环。将用我更改循环的原因更新我的答案。