web-dev-qa-db-fra.com

Erreur: l'index était en dehors des limites du tableau.

Je suis conscient de la nature du problème, mais je ne comprends pas comment mon programme génère une valeur en dehors du tableau.

J'ai un tableau d'ints qui est 0 - 8 ce qui signifie qu'il peut contenir 9 ints, correct? J'ai un int qui est vérifié pour s'assurer que la valeur d'entrée des utilisateurs est 1-9. J'enlève un de l'entier (comme si)

if (posStatus[intUsersInput-1] == 0) //if pos is empty
{
    posStatus[intUsersInput-1] += 1; 
}//set it to 1

alors je saisis moi-même 9 et j'obtiens l'erreur. Il devrait accéder au dernier int du tableau, donc je ne vois pas pourquoi je reçois une erreur. Code pertinent:

public int[] posStatus;       

public UsersInput()    
{    
    this.posStatus = new int[8];    
}

int intUsersInput = 0; //this gets try parsed + validated that it's 1-9    

if (posStatus[intUsersInput-1] == 0) //if i input 9 it should go to 8?    
{    
    posStatus[intUsersInput-1] += 1; //set it to 1    
} 

Erreur:

"Index was outside the bounds of the array." "Index was outside the bounds of the array."
19
Zain

Vous avez déclaré un tableau pouvant stocker 8 éléments et non 9.

this.posStatus = new int[8]; 

Cela signifie que postStatus contiendra 8 éléments de l'index 0 à 7.

22
M.S.
public int[] posStatus;       

public UsersInput()    
{    
    //It means postStatus will contain 9 elements from index 0 to 8. 
    this.posStatus = new int[9];   
}

int intUsersInput = 0;   

if (posStatus[intUsersInput-1] == 0) //if i input 9, it should go to 8?    
{    
    posStatus[intUsersInput-1] += 1; //set it to 1    
} 
6
Sumon Banerjee

// si je saisis 9 il devrait aller à 8?

Vous devez toujours travailler avec les éléments du tableau. Vous compterez 8 éléments lors de la boucle dans le tableau, mais ils continueront à être tableau (0) - tableau (7).

2
Jason Sgalla