为新变量赋值

assign value to new variable?

本文关键字:赋值 变量 新变量      更新时间:2023-09-26

我的代码如下:

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语句中时,它似乎有效,但这会使它变得毫无价值,不是吗?编辑器本身没有错误,但当我编译时,它会给我以下信息:

线程"main"java.lang.IndexOutOfBoundsException异常:索引:41,大小:36位于java.util.ArrayList.rangeCheck(ArrayList.java:635)位于java.util.ArrayList.get(ArrayList.java:411)在甲板上。Deck.main(Deck.java:74)Java结果:1构建成功(总时间:0秒)

我完全没有办法解决这个问题。

你的牌组中没有足够的牌。您正在获取和索引越界,因为您正试图访问不存在的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++),而不是仅仅小于。

你的问题是你试图从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("");
}