Не удается найти Java «Исключение массива вне границ» - PullRequest
0 голосов
/ 30 марта 2012

Я создаю поисковую систему, которая читает текстовый файл и печатает слово, которое может искать пользователь. В настоящее время я создаю индекс массивов для поиска. Дополнительную информацию можно найти здесь: 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

} // класс

1 Ответ

6 голосов
/ 30 марта 2012
for(int j = 0; j < invertedIndex[i].length; i++) {

вероятно должно быть

j++

не

i++

Обновление после исправления.

Это означает, что Arrays.binarySearch(vocabArray, scan.next()) не находит предметв поисках.Вы не можете предполагать, что в vocabArray есть элемент, который вы ищете.Вам нужно будет добавить if(... < 0) для вызова binarySearch.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...