Java n面x次滚压m模
好的,所以我改变了我的代码,删除了很多不必要的垃圾。它适用于某些数字,但不适用于其他数字,例如,当我放入100卷/8面/3模时,尽管我为其设置了限制,但它仍会给我一个越界错误。显然,我已经看过一些细节,我只是不知道它是什么细节Java n面x次滚压m模,java,for-loop,indexoutofboundsexception,dice,Java,For Loop,Indexoutofboundsexception,Dice,好的,所以我改变了我的代码,删除了很多不必要的垃圾。它适用于某些数字,但不适用于其他数字,例如,当我放入100卷/8面/3模时,尽管我为其设置了限制,但它仍会给我一个越界错误。显然,我已经看过一些细节,我只是不知道它是什么细节 public class Ass11f { public static void main(String[] args) { EasyReader console = new EasyReader(); System.out.pr
public class Ass11f {
public static void main(String[] args) {
EasyReader console = new EasyReader();
System.out.print("Enter how many times you want to roll the die: ");
int numRolls = console.readInt();
System.out.print("Enter the amount of sides: ");
int numSides = console.readInt();
System.out.print("Enter the amount of die: ");
int numDie = console.readInt();
int[] rollSum = new int[numDie*numSides];
for (int i = 0; i<numRolls; ++i)
{
int rollCounter=0;
for (int l = 0; l<numDie; ++l){
rollCounter += ((int)(Math.random()*numSides)+1);
}
rollSum[rollCounter]++;
}
for (int m = 2;m<=rollSum.length;++m) System.out.println(m+"'s: "+rollSum[m]+" times, "+((((double)rollSum[m])/numRolls)*100)+"%");
}
}
有两个基本问题: 添加卷总数时,您试图在索引中添加超过数组末尾的最大卷数。简单的解决方法是将数组长度增加1。
打印时,您无法使用等于数组长度的索引访问数组,这就是确切的mWhat为rollSum[rollCounter]++;该怎么办?你能用实际的堆栈跟踪来回答吗?@thegrinner它应该在rollCounter值的rollSum索引处增加元素。你是在跟踪某个值的滚动次数吗?你能澄清最终目标吗?“我在想rollSum的用途时遇到了一点麻烦。@这个程序应该是这样的,就像我说的,用y边z次滚动x个骰子,将每个骰子的总数加起来,并显示每个总数。那么rollSum中的每个项目都是该骰子的总和吗?”?还是累计到那一点的总和?另外,是第一个循环int i还是第二个循环int m给出了一个异常?
// The minimum value is always numDie.
// The maximum is always numDie * numSides
// There are maximum - minimum + 1 possible values (ie 6 on a d6)
int maximum = numDie * numSides;
int minimum = numDie;
// Remember, index zero is now the minimum roll.
// The final index is the maximum roll. So the count at an index is really
// the count for any roll with value index + minimum
int[] rollSum = new int[maximum - minimum + 1];
for (int i = numDie; i < rollSum.length; ++i) {
// Print the first bit, ie "2's: ".
System.out.print(i + "'s: ");
// How many times was that value rolled?
System.out.print(rollSum[i] + " times, ");
// What percentage is that?
double percentage = ((double)rollSum[i]) / numRolls * 100;
System.out.println(percentage + "%");
}