找不到“Array out of Bounds Exception”Java

时间:2012-03-29 22:35:58

标签: java arrays exception

我正在创建一个读取文本文件的搜索引擎,并打印出用户可以搜索的单词。我正在创建一个要搜索的数组索引。可以在此处找到更多信息:http://cis-linux1.temple.edu/~yates/cis1068/sp12/homeworks/concordance/concordance.html

当我立即运行此程序时,我得到一个“数组索引超出界限”

线程“main”中的异常java.lang.ArrayIndexOutOfBoundsException:43     在SearchEngine.main(SearchEngine.java:128)

任何人都可以帮助调试吗?

import java.util.*;
import java.io.*;


public class SearchEngine {


public static int getNumberOfWords (File f) throws FileNotFoundException {
    int numWords = 0;
    Scanner scan = new Scanner(f);
    while (scan.hasNext()) {
    numWords++;
    scan.next();
    }
    scan.close();

    return numWords;
}

public static void readInWords (File input, String [] x) throws FileNotFoundException {
    Scanner scan = new Scanner(input);
    int i = 0;
    while (scan.hasNext() && i<x.length) {
        x[i] = scan.next();
        i++;
        }
    scan.close();
}

public static int getNumOfDistinctWords (File input, String [] x) throws FileNotFoundException {
    Scanner scan = new Scanner(input);
    int count = 0;
    int i = 1;
    while (scan.hasNext() && i<x.length) {
    if (!x[i].equals(x[i-1])) {
    count++;
    }
    i++;
    }
    scan.close();
    return count;
}

public static void readInDistinctWords (String [] x, String [] y) {
    int i = 1;
    int k = 0;
    while (i<x.length) {
        if (!x[i].equals(x[i-1])) {
        y[k] = x[i];
        k++;
        }
    i++;
    }
}

public static int getNumberOfLines (File input) throws FileNotFoundException {
    int numLines = 0;
    Scanner scan = new Scanner(input);
    while (scan.hasNextLine()) {
        numLines++;
        scan.nextLine();
        }
    scan.close();
    return numLines;
}

public static void readInLines (File input, String [] x) throws FileNotFoundException {
    Scanner scan = new Scanner(input);
    int i = 0;
    while (scan.hasNextLine() && i<x.length) {
        x[i] = scan.nextLine();
        i++;
        }
    scan.close();
}

主要

public static void main(String [] args) {

 try {

    //gets file name
System.out.println("Enter the name of the text file you wish to search");
    Scanner kb = new Scanner(System.in);
    String fileName = kb.nextLine();
    String TXT = ".txt";
    if (!fileName.endsWith(TXT)) {
        fileName = fileName.concat(TXT);
    }

    File input = new File(fileName);

//First part of creating index
System.out.println("Creating vocabArray");
int NUM_WORDS = getNumberOfWords(input);
//System.out.println(NUM_WORDS);
String [] wordArray = new String[NUM_WORDS];
readInWords(input, wordArray);
Arrays.sort(wordArray);
int NUM_DISTINCT_WORDS = getNumOfDistinctWords(input, wordArray);
String [] vocabArray = new String[NUM_DISTINCT_WORDS];
readInDistinctWords(wordArray, vocabArray);
System.out.println("Finished creating vocabArray");



System.out.println("Creating concordanceArray");
int NUM_LINES = getNumberOfLines(input);
String [] concordanceArray = new String[NUM_LINES];
readInLines(input, concordanceArray);
System.out.println("Finished creating concordanceArray");



System.out.println("Creating invertedIndex");
int [][] invertedIndex = new int[NUM_DISTINCT_WORDS][10];
int [] wordCountArray = new int[NUM_DISTINCT_WORDS];
int lineNum = 0;
    while (lineNum<concordanceArray.length) {
        Scanner scan = new Scanner(concordanceArray[lineNum]);
        while (scan.hasNext()) {
            int wordPos = Arrays.binarySearch(vocabArray, scan.next());
            wordCountArray[wordPos]+=1;
            for(int i = 0; i < invertedIndex.length; i++) {
            for(int j = 0; j < invertedIndex[i].length; i++) {
            if (invertedIndex[i][j] == 0) {
            invertedIndex[i][j] = lineNum;
            break;
            } } }
            }
        lineNum++;
        }
System.out.println("Finished creating invertedIndex");

}

    catch (FileNotFoundException exception) {
    System.out.println("File Not Found");
}




} //main

} // class

1 个答案:

答案 0 :(得分:6)

for(int j = 0; j < invertedIndex[i].length; i++) {

应该是

j++

不是

i++

修复后更新。

这意味着Arrays.binarySearch(vocabArray, scan.next())找不到要搜索的项目。您不能假设vocabArray具有您要搜索的项目。您需要为binarySearch调用添加if(... < 0)