gpt4 book ai didi

java - 为什么我在这个程序中收到 “ArrayIndexOutOfBounds” 错误?

转载 作者:行者123 更新时间:2023-12-01 22:16:01 25 4
gpt4 key购买 nike

我编写了这个程序来初始化并创建一副牌,对其进行洗牌,然后分发 N 手牌。尽管每次编译都顺利进行,但当我运行该程序时,它会抛出不同的 ArrayIndexOutOfBounds (:52 或:54)。我使用 System.out.println(1) 检查了错误,更改和交换了索引,更改了数组的长度等等。但我很难过...也许你可以帮助我?

public class Deal 
{

public static void main(String[] args)
{

int N = Integer.parseInt(args[0]);
int hand = 5;

String[] rank =
{
"2", "3", "4", "5", "6", "7", "8", "9", "10",
"Jack", "Queen", "King", "Ace"
};

String[] suit = {"Spades", "Hearts", "Clubs", "Diamonds"};

// Create Deck
String[] deck = new String[rank.length * suit.length];

// Fill the deck with cards
for (int i = 0; i < suit.length; i++)
{
for (int j = 0; j < rank.length; j++)
{
//System.out.println(1);
deck[rank.length*i + j] = rank[j] + " of " + suit[i];
System.out.println(deck[rank.length*i +j]);
}
}

// Shuffle deck
for (int i = 0; i < deck.length; i++)
{
int r = i + (int)(Math.random() * (N-1));
String t = deck[i];
deck[i] = deck[r];
deck[r] = t;
}

// Count number of cards dealt
int counter = 0;

while (N != 0 && counter <= deck.length)
{
for (int i = counter; i < hand + counter; i++)
{
System.out.println(deck[i]);
counter++;
}

N--;
System.out.println();
}
}
}

最佳答案

问题出在您的洗牌代码中:

for (int i = 0; i < deck.length; i++)
{
int r = i + (int)(Math.random() * (N-1));
String t = deck[i];
deck[i] = deck[r];
deck[r] = t;
}

无法保证 r 会在范围内 - 一旦 i 到达结束的 N 范围内,它可能会失败,具体取决于生成的随机数。

更好:使用Collections.shuffle:

Collections.shuffle(Arrays.asList(deck));

解决该问题后,您将遇到这里的问题:

while (N != 0 && counter <= deck.length)
{
for (int i = counter; i < hand + counter; i++)
{
System.out.println(deck[i]);

counter == Deck.length 时,您预计会发生什么?

基本上,所有此类问题的答案都涉及以下步骤:

  • 找出代码失败的位置
  • 弄清楚如何/为何获得无效索引
  • 弄清楚您实际上想要做什么,以便保持在数组的范围内
  • 实现该更改

关于java - 为什么我在这个程序中收到 “ArrayIndexOutOfBounds” 错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31026426/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com