gpt4 book ai didi

java - 尝试使用软编码(基于输入的数组大小)制作掷骰子java应用程序,得到ArrayIndexOutOfBoundsException

转载 作者:太空宇宙 更新时间:2023-11-04 12:48:52 25 4
gpt4 key购买 nike

编辑:通过简单的更改解决,解决方案在底部

我应该让程序计算每个值在一组骰子中滚动的次数,并为每个值打印出该数字。数组大小基于 ((骰子数量 * 边数) + 1),但由于某种原因,我仍然遇到了这个越界异常,其中包含我尝试过的多个不同条目(骰子数、边数和掷骰数)。我不明白什么可能引发此异常。

import java.util.Scanner;
import java.lang.Math;

public class DiceRolls {
public static void main(String[] args) {

Scanner input = new Scanner(System.in);
int numRolls, numSides, numDice;
int outcome = 0;

/* prompt user for number of rolls */
System.out.print("How many sides on each die? ");
numSides = input.nextInt();
System.out.print("How many dice should be rolled? ");
numDice = input.nextInt();
System.out.print("How many rolls? ");
numRolls = input.nextInt();
input.close();

int arraySize = (numDice * numSides);

int[] outcomes = new int[arraySize + 1];

/* roll dice and add to outcomes */
for (int roll = 0; roll < numRolls; roll++) {
for (int dice = 0; dice < numDice; dice++) {
outcome += (int)(numSides * Math.random() + 1);
}
outcomes[outcome] += 1;
}

/* show counts of outcomes */
for (int i = numDice; i <= arraySize; i++) {
System.out.println(i + ": " + outcomes[i]);
}
}
}

解决方案

我添加了 outcome = 0; 行来重置每次新掷骰的结果。否则,结果将不断累积并达到高于单次滚动所能达到的值。

/* roll dice and add to outcomes */
for (int roll = 0; roll < numRolls; roll++) {
outcome = 0; // <-----HERE
for (int dice = 0; dice < numDice; dice++) {
outcome += (int)(numSides * Math.random() + 1);
}
outcomes[outcome] += 1;
}

最佳答案

你的问题是你的数组不够大。问题出在这行代码中:

int[] outcomes = new int[arraySize + 1];

您的数组太小。您忘记将 numRolls int 纳入数组大小计算中。

关于java - 尝试使用软编码(基于输入的数组大小)制作掷骰子java应用程序,得到ArrayIndexOutOfBoundsException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36039775/

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