0

我正在尝试创建的掷骰子程序遇到问题(仅使用控制台)。这是骰子滚动类文件本身:

import java.util.Random;

public class rtd
{
    public static int[] rollthedice(int numSides, int numRolls)
    {
        int[] rollCounter = new int[numSides];
        for (int counter = 0; counter < numRolls; counter++)
        {
            Random randRoll = new Random();
            int die = randRoll.nextInt(numSides) + 1;
            if ((counter + 1) == die)
            {
                rollCounter[counter] = die;
            }
        }
        return rollCounter;
    }
}

该类的问题是,由于某种原因,当我测试该类以查看它是否与同一文件夹中的以下类一起使用时,for 循环拒绝运行:

public class tester
{
    public static void main(String[] args)
    {
        rtd roller = new rtd();
        int[] results = new int[6];
        results = rtd.rollthedice(6, 20);
        int rollNumber = 1;
        for (int counter = 0; counter < results.length; counter++)
        {
            System.out.println(rollNumber + " " + results[counter]);
            rollNumber++;
        }
    }
}

当我运行“tester”类时,结果显示只完成了一个roll,这意味着for循环没有重复指定数量的roll的代码。谁能给我一个可能的解决方案或解释?如果您发现其他缺陷,请告诉我。

我相信问题可能出在我的 IDE (BlueJ) 中。

4

1 回答 1

1

首先,您应该遵循语言的命名约定。我知道你才刚刚开始。请找时间阅读。

我修改了您的代码,但没有更改类和方法名称,即使我想这样做。我会把它留给你作为练习。

这是 rtd 类的修改版本。请参阅源代码中的注释。

public class rtd
{
    public static int[] rollthedice(int numSides, int numRolls)
    {
        // An array of total number of rolls (NOT sides) to save the result of all rolls
        int[] rollCounter = new int[numRolls];

        // Let's roll n-th times where n is numRolls
        for (int counter = 0; counter < numRolls; counter++)
        {
            // Let's get a random number between 1 to numSides (A die usually has 6 sides with 1 to 6 dots)
            int randomSide = getRand(1, numSides);

            // Let's store the current roll result in array
            rollCounter[counter] = randomSide;
        }

        return rollCounter;
    }

    /**
     * This method returns a number between a given range inclusive
     */ 
    public static int getRand(int min, int max)
    {
        return min + (int)(Math.random() * ((max - min) + 1));
    }
}

此外,您可以像这样改进您的测试员课程 -

public class tester
{
    public static void main(String[] args)
    {            
        int[] results = rtd.rollthedice(6, 20);

        // Since counter starts with 0, we always add 1 so we can read from 1 to 20            

        for (int counter = 0; counter < results.length; counter++)
        {
            System.out.println("Roll Number: " + (counter + 1) + " Side Picked: " + results[counter]);            
        }
    }
}

源代码中的注释应该很容易理解。如果您有任何问题,请询问。

于 2013-07-16T01:28:44.753 回答