当前位置: 首页 > 知识库问答 >
问题:

给新变量赋值?

水睿
2023-03-14

我的代码是这样的:

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(!drawn.contains(k)){
            hand.add(u+" "+draw.get(k).toString());
            drawn.add(k);)

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

线程“main”java中出现异常。lang.IndexOutOfBoundsException:索引:41,大小:36。util。ArrayList。java上的rangeCheck(ArrayList.java:635)。util。ArrayList。在deck上获取(ArrayList.java:411)。甲板main(Deck.java:74)java结果:1构建成功(总时间:0秒)

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

共有2个答案

冯永长
2023-03-14

你的问题是,你试图从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("");
}
夏和雅
2023-03-14

你的牌组中没有足够的牌。因为你试图访问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套。也许你的意思是说小于或等于(j=0;j)

 类似资料:
  • 我想把列表中的对象分配给类变量。 感恩节:)

  • 我正在将一个变量赋给一个数组,它是我在刀片文件中声明的。它返回一个错误 下面是我的代码: 我无法理解这个错误。谢谢!

  • 我是JQUERY新手,假设我在php中dd()后面有一个数组,它显示如下数组:1[0=>"1,18,187,188,189,190,191,192,194,199,196,199,199,199,200,201,202,204,205,206,207,208,209,210,211,212,19,20,21,22,23,24"]现在我喜欢循环数组,只传递那些大于200值;这是密码 其中#UserD

  • = 赋值操作符(它的左右两边不能有空白符) 不要搞混了 = 和 -eq,-eq 是比赋值操作更高级的测试。注意:等于号(=)根据环境的不同它可能是赋值操作符也可能是一个测试操作符。 例子 4-2. 简单的变量赋值 1 #!/bin/bash 2 # 裸变量 3 4 echo 5 6 # 什么时候变量是“裸”的?比如说,变量名前面没有$? 7 #当变量被赋值

  • 问题 现在有一个包含 N 个元素的元组或者是序列,怎样将它里面的值解压后同时赋值给 N 个变量? 解决方案 任何的序列(或者是可迭代对象)可以通过一个简单的赋值语句解压并赋值给多个变量。 唯一的前提就是变量的数量必须跟序列元素的数量是一样的。 代码示例: >>> p = (4, 5) >>> x, y = p >>> x 4 >>> y 5 >>> >>> data = [ 'ACME', 50,