1
ブラックジャックゲームを作成しようとしています。ArrayOutOfBoundエラーがなぜ発生するのか分かりません
まず、クラスコンストラクタを使用してデッキサイズ52という配列を作成しました。
public Deck(){
for(int i=0; i<13; i++){ //Spades
if(i>9){
deck[i]=10;
}
else{
deck[i]=(i+1);
}
}
for(int i=13; i<26; i++){ //Hearts
if(i>21){
deck[i]=10;
}
else{
deck[i]=(i-12);
}
}
for(int i=26; i<39; i++){ //Clubs
if(i>34){
deck[i]=10;
}
else{
deck[i]=(i-25);
}
}
for(int i=39; i<52; i++){ //Diamonds
if(i>47){
deck[i]=10;
}
else{
deck[i]=(i-38);
}
}
}
次に、DeckクラスにshuffleDeck関数も作成しました。
public void shuffleDeck(){
int[] temp = new int[52];
int[] indexChecker = new int[52];
for(int i=0 ; i<52 ; i++){
indexChecker[i]=0;
}
int index = 0;
for(int i=0; i<52 ; i++){
index = number.nextInt(52);
for(i=0; i<52 ; i++){
while(index == indexChecker[i])
index = number.nextInt(52);
}
temp[i] = deck[index]; //The error is here
}
for(int i=0; i<52; i++){
deck[i] = temp [i];
}
}
このアルゴリズムを使用して、私のランダムインデックスジェネレータがデッキをシャッフルするのに同じ番号を生成しないようにします。
しかし、メインクラスでシャッフルしようとすると動作しません。
public static void main(String[] args) {
Deck card = new Deck();
System.out.println("Decks are created");
card.getDeck();
System.out.println("Shuffling...");
card.shuffleDeck();
System.out.println("Shuffled deck.");
card.getDeck();
出力:あなたはこのように、すなわちi >= 52
を古い値を消去し、!(i < 52)
までインクリメント、内側のループでi
を再利用している
run:
Decks are created
0-1
1-2
2-3
3-4
4-5
5-6
6-7
7-8
8-9
9-10
10-10
11-10
12-10
13-1
14-2
15-3
16-4
17-5
18-6
19-7
20-8
21-9
22-10
23-10
24-10
25-10
26-1
27-2
28-3
29-4
30-5
31-6
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 52
32-7
33-8
34-9
35-10
36-10
37-10
38-10
39-1
40-2
at blackjack.pkg5.pkg0.Deck.shuffleDeck(Deck.java:69)
41-3
42-4
43-5
44-6
45-7
at blackjack.pkg5.pkg0.Blackjack50.main(Blackjack50.java:13)
46-8
47-9
48-10
49-10
50-10
51-10
Shuffling...
C:\Users\Afrie Irham\AppData\Local\NetBeans\Cache\8.2\executor-snippets\run.xml:53: Java returned: 1
BUILD FAILED (total time: 0 seconds)
[mcve]を入力してください。エラーがどこで*発生するのかがはっきりしていることを確認してください。 –
また、完全なStackTraceエラーを投稿してください。 – Korashen
上記のyohコードと一致しない出力:このコードでは、シャッフル後にshuffleDeckを呼び出します。...出力されますが、シャッフルの出力前に出力shuffledeckが失敗します... shuffleDeck grom getDeck()を呼び出さない限り、コードを提供する。 – StephaneM