web-dev-qa-db-ja.com

エラー:インデックスが配列の境界外にありました。

私は問題が何を示しているのか知っていますが、私のプログラムが配列の外にある値を出力する方法に混乱しています。

0〜8のintの配列があります。つまり、9個のintを保持できます。ユーザー入力値が1〜9であることを確認するためにチェックされるintがあります。私は整数から1つを削除します(そのように)

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

その後、自分で9を入力すると、エラーが発生します。配列の最後のintにアクセスする必要があるため、エラーが発生する理由がわかりません。関連コード:

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    
} 

エラー:

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

9ではなく8つの要素を格納できる配列を宣言しました。

this.posStatus = new int[8]; 

これは、postStatusがインデックス0から7までの8つの要素を含むことを意味します。

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

// 9を入力すると8になりますか?

それでも、配列の要素を操作する必要があります。配列をループするときに8つの要素をカウントしますが、それらは引き続きarray(0)-array(7)になります。

2
Jason Sgalla