When i tried running this code I get this error..I dont know where i went wrong..I am searching for a long time on net. But no use. Please help or try to give some ideas how to achieve this.
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 10000 at Percolation.isOpen(Percolation.java:47) at Percolation.open(Percolation.java:39) at Percolation.isFull(Percolation.java:178) at Percolation.percolates(Percolation.java:207) at Percolation.creList(Percolation.java:75) at Percolation.isFull(Percolation.java:173) at Percolation.percolates(Percolation.java:207) at Percolation.percolates(Percolation.java:207) at Percolation.creList(Percolation.java:75) at Percolation.isFull(Percolation.java:173) at Percolation.percolates(Percolation.java:207) at Percolation.percolates(Percolation.java:207) at Percolation.percolates(Percolation.java:216) at Percolation.creList(Percolation.java:75) at Percolation.isFull(Percolation.java:173) at Percolation.percolates(Percolation.java:207) at Percolation.creList(Percolation.java:75) at Percolation.isFull(Percolation.java:173) at Percolation.percolates(Percolation.java:207) at Percolation.percolates(Percolation.java:207) at Percolation.creList(Percolation.java:75) at Percolation.isFull(Percolation.java:173) at Percolation.percolates(Percolation.java:207) at Percolation.percolates(Percolation.java:216) at Percolation.main(Percolation.java:235)
import java.util.Random;
public class Percolation {
private int[][] grid;
private int[][] parent;
private int[][] root;
private int[][] List;
private static int[] list;
int count=0;
//create n-by-n grid, with all sites blocked
public Percolation(int n){
parent = new int[n][n];
for (int i = 0; i < n; i++) {
for (int j=0;j<n;j++){
parent[i][j] = j+n*i;}
}
root= new int[n][n];
for (int i=0;i<n;i++) {
for (int j=0;j<n;j++){
root[i][j]=10000; }
}
grid=new int[n][n];
for (int i=0;i<n;i++) {
for (int j=0;j<n;j++){
grid[i][j]=0; } //let zero represent blocked,one represent open
}
List=new int[2][n*n];
for (int i=0;i<2;i++) {
for (int j=0;j<n*n;j++){
List[i][j]=10000; } //let zero represent blocked,one represent open
}
} ;
//open site (i, j) if it is not open already
public void open(int i, int j){
if(!isOpen(i,j)){
grid[i][j]=1;
root[i][j]=parent[i][j];
};
} ;
//is site (i, j) open?
public boolean isOpen(int i, int j){
return (grid[i][j]==1);
} ;
public int creI() {
java.util.Random random=new java.util.Random();
int i=random.nextInt(grid.length);
return i;
}
public int creJ() {
java.util.Random random=new java.util.Random();
int j=random.nextInt(grid.length);
return j;
}
public int[][] creList(int i,int j) {
if(count<grid.length*grid.length){
int count1=0;
while(List[0][count1]!=i||List[1][count1]!=j){
if(count1<count+1){
count1++;
};
if(count1==count+1){
List[0][count1-1]=i;
List[1][count1-1]=j;
break;
};
}
if(List[0][count1]==i&&List[1][count1]==j){percolates();}
count ++;
}
return List;
}
//validate that i and j is a valid index
@SuppressWarnings("finally")
private boolean validate(int i, int j) {
int n = grid.length;
try{
if(i<0||i>= n||j<0||j>=n);
}
catch(Exception e){
throw new java.lang.IllegalArgumentException("java.lang.IllegalArgumentException");
}
finally{
return (i<0 || i>=n || j<0 || j>=n );
}
}
public void find(int i,int j){
// if (grid[i][j]==1){
while(!validate(i-1,j)){
if(grid[i-1][j]==1&& i-1>=0){
int a=Math.min(parent[i][j], parent[i-1][j]);
parent[i][j]=a;
parent[i-1][j]=a;
root[i][j]=a;
root[i-1][j]=a;
};
break;
};
while(!validate(i,j-1)){
if(grid[i][j-1]==1&& j-1>=0){
int b=Math.min(parent[i][j], parent[i][j-1]);
parent[i][j]=b;
parent[i][j-1]=b;
root[i][j]=b;
root[i][j-1]=b;
};
break;
}
while(!validate(i,j+1)){
if(grid[i][j+1]==1 && j+1<grid.length){
int c=Math.min(parent[i][j], parent[i][j+1]);
parent[i][j]=c;
parent[i][j+1]=c;
root[i][j]=c;
root[i][j+1]=c;
};
break;
}
while(!validate(i+1,j)){
if(grid[i+1][j]==1&& i+1<grid.length){
int d=Math.min(parent[i][j], parent[i+1][j]);
parent[i][j]=d;
parent[i+1][j]=d;
root[i][j]=d;
root[i+1][j]=d;
};
break;
}
}
public void union(int i,int j){
while(!validate(i-1,j)){
if(grid[i-1][j]==1&& i-1>=0){
find(i-1,j);
}
break;
}
while(!validate(i,j-1)){
if(grid[i][j-1]==1&& j-1>=0){
find(i,j-1);
}
break;
}
while(!validate(i,j+1)){
if(grid[i][j+1]==1 && j+1<grid.length){
find(i,j+1);
}
break;
}
while(!validate(i+1,j)){
if(grid[i+1][j]==1&& i+1<grid.length){
find(i+1,j);
}
break;
}
}
//is site (i, j) full?
public boolean isFull(int i, int j){
int[][] aList=creList(i, j);
int i1=aList[0][count-1];
int j1=aList[1][count-1];
int col = 0;
int num=0;
open(i1,j1);
find(i1,j1);
union(i1, j1);
while(col<root[0].length){
if(root[0][col]!=10000){
while(num<root.length){
if( root[i1][j1]==root[0][num]){
break;
};
num++;
}
break;
};
if(root[0][col]==10000) {
col++;};
}
if(col==root[0].length){col--;}
if(num==root[0].length){num--;}
return root[0][col]!=10000&&root[i1][j1]==root[0][num];
}
//does the system percolate?
public boolean percolates(){
int i=creI();
int j=creJ();
int num=0;
while(!isFull(i, j)){percolates();break;};
while(num<grid.length){
if(root[grid.length-1][num]==root[i][j]){
break;
};
if(root[grid.length-1][num]!=root[i][j]){
num++;
};
if(num==grid.length){
percolates();
}
}
return true;
}
public static void main(String[] args){
int i=0;
list = new int[100];
while(i<100){
Percolation p=new Percolation(3);
while(p.percolates()==true){
int c=p.count;
list[i]=c;
i++;
break;
}
} ; // test client (optional)
}}