Java Array Index Out of Bounds Exception

Posted by user1302023 on Stack Overflow See other posts from Stack Overflow or by user1302023
Published on 2012-03-29T23:02:51Z Indexed on 2012/03/29 23:29 UTC
Read the original article Hit count: 229

Filed under:
|

I need help debugging the following program:

I'm getting a run time error that reads:

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: -1
at SearchEngine.main(SearchEngine.java:126)

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; j++) {
                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

© Stack Overflow or respective owner

Related posts about java

Related posts about arrays