java - 如何纠正数组索引越界异常

标签 java exception indexoutofboundsexception

这是一个 java pig 拉丁语翻译家庭作业。我是 Java 的新手,在解决这个问题时遇到了很多困难。当我输入要读取和写入的文件时,出现数组索引越界错误。在这一点上,我什至不确定代码的翻译部分是否能正常工作。非常感谢任何有关更正错误和翻译代码的帮助。

    while(true){
        System.out.println("Enter a text file to translate to Pig Latin. Quit to end.");
        fileName = keyboard.nextLine();
        if (fileName.equalsIgnoreCase("quit")){
            break; //End program.
        }
        System.out.println("Enter a file to write the translated file to.");
        outputFile = keyboard.nextLine();
        if (outputFile.equalsIgnoreCase("quit")){
            break; //End program.

        }


        fileToTranslate = new File(fileName);
        try {
            fileReader = new Scanner(fileToTranslate);
        } catch (FileNotFoundException ex) {
                //Logger.getLogger(PigLatinTranslatorKukuruda.class.getName()).log(Level.SEVERE, null, ex);
            System.out.println("File does not exist. Enter a new file.");
        }
        while(fileReader.hasNext()){
            word = fileReader.next();
        }
        fileReader.close();

        System.out.println(translator(word));
        }
}

    public static String translator(String string){
        String[] wordsToTranslate = string.split(" ");
        String word;
        String translatedString = " ";
        int first = 0;

        for(int i = 0; i <= wordsToTranslate.length-1; i++){
            word = wordsToTranslate[1];
            if ((word.charAt(0) == 'a') || (word.charAt(0) == 'e') || (word.charAt(0) == 'i') || 
                   (word.charAt(0) == 'o') || (word.charAt(0) == 'u') || (word.charAt(0) == 'A') ||
                    (word.charAt(0) == 'E') || (word.charAt(0) == 'I') || (word.charAt(0) == 'O') || 
                    (word.charAt(0) == 'U')){
                translatedString = word + "yay";
            }
            else{
                for(int j = 0; j <= word.length()-1; j++){
                    if ((word.charAt(j) == 'a') || (word.charAt(j) == 'e') || (word.charAt(j) == 'i') ||
                            (word.charAt(j) == 'o') || (word.charAt(j) == 'u') ||
                            (word.charAt(j) == 'A') || (word.charAt(j) == 'E') || 
                            (word.charAt(j) == 'I') || (word.charAt(j) == 'O') ||
                            (word.charAt(j) == 'U')){
                    if (first == 0){
                        translatedString = word.substring(j) + word.substring(0, j) + "ay";

                        first = 1;
                    }
                }
                }
            }
        }
        return translatedString;
    }

现在我只是收到错误消息,不知道该怎么做。这应该写入一个文件,但我只是想立即输出它以查看它是否有效,但由于错误,我没有走那么远。谢谢

最佳答案

考虑您的代码的以下部分:

while(fileReader.hasNext()){
    word = fileReader.next();
}

fileReader.close();
System.out.println(translator(word));

您的扫描仪正在逐字阅读(因为 .next())。

在 while 循环中,每次迭代都会覆盖 word 的值,因此在循环结束时,word 将等于 文件的最后一句话

因此,您对 translate(word) 的调用只会将最后一个单词作为参数传递。也就是一个字。因此 word = wordsToTranslate[1]; 肯定会抛出 IndexOutOfBounds 异常,因为没有第二个单词。

另外,我相信您打算在循环中使用 word = wordsToTranslate[i];

关于java - 如何纠正数组索引越界异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55997148/

相关文章:

java - 使用哪种数据结构来存储条目及其时间戳(按排序顺序)

Java Swing 为基本音乐播放器绘制 PlayButton

java - 现代计算机上的二进制 GCD 算法与欧几里得算法

Python __del__ 未调用异常

java - 二维数组(参差不齐)- 打印每列总和

包含的 Java 8 过滤器

cocoa - Cocoa 中处理 malloc 失败的最佳方法

python - 接下来在迭代器中优雅地捕获 python 异常

java - 使用 split() 并检查第二个元素

java - 以前运行的程序,现在给出 ArrayIndexOutOfBounds 异常?