Bundy
Bundy

Reputation: 725

array index out of bounds exception , is this meant to happen?

im attempting to test a program in java and i am getting an array index out of bounds exception that i dont believe should be thrown. have a look at this code and tell me if im missing something? eclipse is telling me the error is being thrown in the location where i have added a comment to show it

class maze{

private int cols; // number of columns in maze  
private int rows; // number of rows in maze
private String name;
private weightedGraph<Integer> graph;
private dijkstra solution;
public char[][] mazeStore;

public maze(String filename){

    try{

        FileReader r = new FileReader(filename);
        Scanner s = new Scanner(r);
        this.rows = s.nextInt();
        this.cols = s.nextInt();
        this.name = filename;


        this.mazeStore = new char[(2*rows)+1][(2*cols)+1];
        String line = s.nextLine();
        for(int k = 0; k < ((2*rows)+1); k++){

            char[] temp = line.toCharArray();

            for(int i = 0; i < temp.length; i++){
                mazeStore[k][i] = temp[i];
                line = s.nextLine();
            }
        }



        graph = new weightedGraph<Integer>(rows*cols); 


        for(int y = 1; y < 2*rows; y++){
            for(int x = 1; x < 2*cols; x++){
                if((x % 2 == 1) && (y % 2 == 0)){
                    if(mazeStore[x][y] != '-'){ // <<<<<<<<<<<<<<THIS IS WHERE THE ERROR IS THROWN 
                        int label = (x - 1) + (x / 2);
                        graph.addEdge(label, label+cols, 1);
                        graph.addEdge(label+cols, label, 1);
                    }
                }

                if((x % 2 == 0) && (y % 2 == 1)){
                    if(mazeStore[x][y] != '|'){
                        int label = ((x - 1) + (x / 2)) + (y / 2);
                        graph.addEdge(label, label+1, 1);
                        graph.addEdge(label+1, label, 1);
                    }
                }
            }
        }



        this.solution = new dijkstra(graph, 0); 


    }
    catch(FileNotFoundException e){
        System.err.println("FileNotFoundException: " + e.getMessage());
    }

Upvotes: 2

Views: 558

Answers (2)

Pshemo
Pshemo

Reputation: 124235

You initialized array

new char[(2*rows)+1][(2*cols)+1] 

but iterating it

for(int y = 1; y < 2*rows; y++){//y row iterator
    for(int x = 1; x < 2*cols; x++){//x col iterator

so it should be mazeStore[y][x] not mazeStore[x][y]

Upvotes: 5

timkd127
timkd127

Reputation: 71

you have youre varaibles out of order. youre outter most loop is based on rows but youre using it in the array you initialized to be the size of columns

Upvotes: 2

Related Questions