为新变量赋值?

时间:2014-04-17 22:19:47

标签: java javascript android

我的代码是这样的:

import java.util.ArrayList;

import java.util.Scanner;

import java.util.Random;

/**
 *
 * @author Matt
 */
public class Deck {

/**
 * @param args the command line arguments
 */
public static void main(String[] args) {
    Random r = new Random();
    String[][] DeckOfCards = new String[13][4];
    int i;
    int j;
    int k;
    String suit[] = new String[4];
    String number[] = new String[13];
    ArrayList draw = new ArrayList();
                                            //setting up the deck
    suit[0]="Diamonds, ";
    suit[1]="Clubs, ";
    suit[2]="Hearts, ";
    suit[3]="Spades, ";

    number[0]="Ace of ";
    number[1]="Two of ";
    number[2]="Three of ";
    number[3]="Four of ";
    number[4]="Five of ";
    number[5]="Six of ";
    number[6]="Seven of ";
    number[7]="Eight of ";
    number[8]="Nine of ";
    number[9]="Ten of ";
    number[10]="Jack of ";
    number[11]="Queen of ";
    number[12]="King of ";

                                    //dealing the initial hand

    for(j=0;j<3;j++){

        for(i=0;i<12;i++){

            DeckOfCards[i][j]=""+number[i]+suit[j];
            draw.add(DeckOfCards[i][j]);
            //System.out.println(DeckOfCards[i][j]);
        }
        //System.out.println("");
       // System.out.println("");
    }

    ArrayList drawn = new ArrayList();
    ArrayList hand = new ArrayList();
    int u;


    for(u=1;u<6;u++){   
        k=r.nextInt(52);

        if(!drawn.contains(k)){    

            //System.out.println(draw.get(k));
            hand.add(u+" "+draw.get(k).toString());
            drawn.add(k);

            }
        else{
               u--;
            }

              }
            System.out.println(hand.toString());

但是最后一个if语句:

            if(!drawn.contains(k)){
            hand.add(u+" "+draw.get(k).toString());
            drawn.add(k);)

总是停止编译说我需要为新变量分配一个返回值吗?在if语句之前已经为k分配了一个值。当我将随机k语句放在if语句中时,它似乎有效,但这使它变得毫无价值,不是吗?编辑器本身没有错误,但是当我编译时,它给了我这个:

线程中的异常&#34; main&#34; java.lang.IndexOutOfBoundsException:索引:41,大小:36     at java.util.ArrayList.rangeCheck(ArrayList.java:635)     at java.util.ArrayList.get(ArrayList.java:411)     在deck.Deck.main(Deck.java:74) Java结果:1 建立成功(总时间:0秒)

我完全没有关于如何解决这个问题的想法。

2 个答案:

答案 0 :(得分:1)

你的牌组中没有足够的牌。 您正在获取并索引输出边界,因为您尝试访问不存在的draw.get(41),因为draw的大小只有36。这是因为draw的初始化不正确。您的错误代码是:

for(j=0;j<3;j++){

        for(i=0;i<12;i++){

            DeckOfCards[i][j]=""+number[i]+suit[j];
            draw.add(DeckOfCards[i][j]);
            //System.out.println(DeckOfCards[i][j]);
        }
        //System.out.println("");
       // System.out.println("");
    }
在上面只增加了3套西装,每件西装12件。 (36卡)。你应该增加4件套装,每件套装13件。也许你的意思是说小于OR EQUAL TOO for (j=0; j<=3; j++)而不仅仅是少于。

答案 1 :(得分:0)

你的问题是你正在尝试绘制52张随机牌中的一张,但你的牌组中只有36张牌:

for(j=0;j<3;j++){  // should be j<4

    for(i=0;i<12;i++){  // should be i<13

        DeckOfCards[i][j]=""+number[i]+suit[j];
        draw.add(DeckOfCards[i][j]);
        //System.out.println(DeckOfCards[i][j]);
    }
    //System.out.println("");
   // System.out.println("");
}