2014-04-17 143 views
0

我的代码是这样的:为新变量赋值?

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);) 

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

线程“主”java.lang.IndexOutOfBoundsException异常:索引:41,大小:36 在java.util.ArrayList.rangeCheck(ArrayList .java:635) at java.util.ArrayList.get(ArrayList.java:411) at deck.Deck.main(Deck.java:74) Java结果:1 BUILD SUCCESSFUL(总时间:0秒)

我完全不知道如何解决这个问题。

+0

尝试在添加之前保存'u +“”+ draw.get(k).toString()'在一个新变量中 – Fuzzyma

回答

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(""); 
} 
+0

是的解决它,谢谢! – user3547041

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件。也许你的意思是说少于或等于for (j=0; j<=3; j++)而不是少于。