PigLatin无法正确输出

时间:2015-04-16 22:54:35

标签: java string for-loop

当单词以辅音开头时,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;
    }
}
  1. 我想保持所有方法相同
  2. 我不想太多地修改代码

2 个答案:

答案 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;