2017-04-03 1 views
0

Désolé cette question ne peut pas vraiment être appliquée à d'autres. Je l'ai regardé pendant quelques heures et je ne peux toujours pas le voir. Il doit être super simple mais je ne peux pas trouver où j'essaie d'accéder à quelque chose qui n'est pas là. Je reçois unArrayIndexOutOfBoundsException itérant sur des tableaux 2D en Java

ArrayIndexOutOfBoundsException lors de l'itération sur une grille 9x9.

public ArrayList<Grid> next9Grids() 
{ 
    ArrayList<Grid> next9 = new ArrayList<Grid>();//list of new Grids 

    for(int i = 0; i < values.length; i++){ 
     for(int j = 0; i < values[i].length; j++){ 
      if (values[i][j] == 0){//if empty 
       for(int next = 1; next <= 9; next++){ 
        Grid temp9 = new Grid(this);//need to make another grid for each # 
        temp9.values[i][j] = next; // changes value of empty space to 1->9 
        next9.add(temp9); //add grid to arrayList 
       } 
       return next9; 
      } 
     } 

    } 
    return null; 

} 

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 9 à sudoku.Grid.next9Grids (Grid.java:112) à sudoku.Solver.solveRecurse (Solver.java: 54) à sudoku.Solver.solveRecurse (Solver.java:56) à sudoku.Solver.solveRecurse (Solver.java:56)

Ceci est la source de l'erreur. (Grid.java:112) est ---->if(values[i][j] ==0){

Une autre question est: Pourquoi une erreur est-elle lancée sur la ligne 112 quand elle accède à quelque chose que la deuxième boucle boucle en premier et pas la seconde en boucle?

Tout est grandement apprécié. Merci pour les commentaires.

+2

'i Guy

Répondre

0

Essayez celui-ci:

for(int i = 0; i < values.length; i++){ 
      for(int j = 0; j < values[i].length; j++){// replaced j in (i < values[i].length) by i in (j < values[i].length) 
       if (values[i][j] == 0){//if empty 
        for(int next = 1; next <= 9; next++){ 
+1

C'était exactement ça (つ ◕_◕) つ. Je suis tellement en colère et heureux maintenant. Je vous remercie. Je suppose que c'est ce que la privation de sommeil fait pour toi. –

0

votre condition dans le forloop imbriqué est fausse. Il devrait être j au lieu de i

public ArrayList<Grid> next9Grids() 
    { 
     ArrayList<Grid> next9 = new ArrayList<Grid>();//list of new Grids 

     for(int i = 0; i < values.length; i++){ 
      for(int j = 0; j < values[i].length; j++){ 
       if (values[i][j] == 0){//if empty 
        for(int next = 1; next <= 9; next++){ 
         Grid temp9 = new Grid(this);//need to make another grid for each # 
         temp9.values[i][j] = next; // changes value of empty space to 1->9 
         next9.add(temp9); //add grid to arrayList 
        } 
        return next9; 
       } 
      } 

     } 
     return null; 

    } 
+0

Merci désolé de ne pas avoir fait vôtre la réponse l'autre gars a répondu plus rapidement. Merci d'avoir répondu. Peut-être qu'un jour je pourrai t'aider avec un problème. –

0

dans la sixième ligne de votre code, remplacez i avec j

public ArrayList<Grid> next9Grids(){ 

ArrayList<Grid> next9 = new ArrayList<Grid>(); //list of new Grids 

for(int i = 0; i < values.length; i++){ 
    for(int j = 0; j < values[i].length; j++){ // The change is here 
     if (values[i][j] == 0){ //if empty 
      for(int next = 1; next <= 9; next++){ 
       Grid temp9 = new Grid(this);//need to make another grid for each # 
       temp9.values[i][j] = next; // changes value of empty space to 1->9 
       next9.add(temp9); //add grid to arrayList 
      } 
      return next9; 
     } 
    } 
} 
return null; 

}