java - 给新变量赋值?

标签 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 语句中时,它似乎有效,但这使它毫无值(value),不是吗?编辑器本身没有错误,但是当我编译时,它给了我这个:

线程“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++)而不仅仅是“小于”。

关于java - 给新变量赋值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23144425/

相关文章:

javascript - 我需要从 jQuery 的最后一个元素中提取第二个的 ID

android - 如何打开文件浏览器? (安卓开发工具包)

android - 在 Android 版 Google 日历中添加多个事件

java - Spring Data Rest/Spring Hateoas 自定义 Controller - PersistentEntityResourceAssembler

javascript - 使用 JavaScript 仅替换 DIV 中的文本内容

javascript - 找不到 "autoprefixer"任务的插件

android - 自动部署到Google Play商店

java - `java -cp` 只是 `java -classpath` 的缩写吗?

java - 当 XML 中有多个命名空间时,如何 getChildText() 具有命名空间的节点?

java - 部分覆盖方法 : how to?