Java 自定义骰子生成器

Java 自定义骰子生成器,java,Java,好的,这是家庭作业。我不想要一个完整的答案,只要有人帮助我朝正确的方向前进。我对Java相当陌生,所以请放轻松:P好的,我的教授让我们用OOP做一个骰子模拟程序。这只是整个问题的一部分,但这是我一直坚持的部分,所以如果你需要更多,我可以提供更多。但是说明书上说:制作一个滚动函数,模拟每个模具的滚动,并返回总数 此功能应仅允许适当范围内的值(即,如果每个模具只有4个面,则只允许数字1-4)。 到目前为止,我对这个特定函数的理解是: public double Roll() { for(in

好的,这是家庭作业。我不想要一个完整的答案,只要有人帮助我朝正确的方向前进。我对Java相当陌生,所以请放轻松:P好的,我的教授让我们用OOP做一个骰子模拟程序。这只是整个问题的一部分,但这是我一直坚持的部分,所以如果你需要更多,我可以提供更多。但是说明书上说:制作一个滚动函数,模拟每个模具的滚动,并返回总数 此功能应仅允许适当范围内的值(即,如果每个模具只有4个面,则只允许数字1-4)。 到目前为止,我对这个特定函数的理解是:

public double Roll()
{
    for(int i = 0; i < numDice; i++)
    {
    double total = Math.random()*numFaces + 1;
    }
    return total;
public双卷()
{
对于(int i=0;i

我不知道从这里走到哪里,我也不知道真正该做什么。这是我的第一节编程课,它远远超过了我的头脑:p所以就像我说的,如果我能被指向正确的方向(使用虚拟对话,因为我仍然很难掌握整件事)那太棒了。如果需要的话,我可以提供更多的实际问题。

首先,您需要在for循环之外声明总数。然后将其初始化为零

然后,在for循环内,增加变量

如果
numFaces
应该能够为每个骰子提供不同的值,则需要在每次迭代时在for循环中获取该骰子的值


此外,您应该问自己:
total
变量需要哪些可能的值?应该是
int
还是
double

首先,您需要在for循环之外声明总计。然后将其初始化为零

然后,在for循环内,增加变量

如果
numFaces
应该能够为每个骰子提供不同的值,则需要在每次迭代时在for循环中获取该骰子的值


此外,您应该问自己:
total
变量需要哪些可能的值?它应该是
int
还是
double

您在
for
循环中定义
total
,这使得它在循环外部不可见。此外,您正在覆盖它(=),而不是将它添加到(+=)每次掷骰子时

public double Roll()
{
    double total = 0;
    for(int i = 0; i < numDice; i++)
    {
        total += Math.random()*numFaces + 1;
    }
    return total;
}
public双卷()
{
双倍合计=0;
对于(int i=0;i

我还建议遵循Java风格并重命名方法
roll
(方法以小写字母开头)。返回类型也让我感到奇怪,我可能会在类似的情况下使用
int

您在
for
循环中定义
total
,这使得它在循环外部不可见。此外,您在每次掷骰时都覆盖它(=),而不是添加到它(+=)

public double Roll()
{
    double total = 0;
    for(int i = 0; i < numDice; i++)
    {
        total += Math.random()*numFaces + 1;
    }
    return total;
}
public双卷()
{
双倍合计=0;
对于(int i=0;i

我还建议遵循Java风格并重命名方法
roll
(方法以小写字母开头)。返回类型也让我感到奇怪,我可能会在类似情况下使用
int

您需要在for循环外定义total,然后在循环内定义total+=…您需要在for循环外定义total,然后在循环内定义total+=…刚才注意到您使用了double,用int或替换double简而言之,请看下面的教程

你对命名约定也不太感兴趣。读这个

你不需要为每一张脸掷骰子,只需要为每一个骰子。这样做

请注意,你也可以穿短裤

public int roll() {
    return new Random().nextInt(6) + 1; // Returns number between 1 and 6
}
如果你想掷多个骰子,你可以这样做

public int roll(int amount) {
    int total = 0;
    for(int i = 0; i < amount; i++) {
        total += new Random().nextInt(6) + 1;
    }
    return total;
}
公共整数滚动(整数金额){
int-total=0;
对于(int i=0;i
刚刚注意到您使用了double,将double替换为int或short。请参阅以下教程

你对命名约定也不太感兴趣。读这个

你不需要为每一张脸掷骰子,只需要为每一个骰子。这样做

请注意,你也可以穿短裤

public int roll() {
    return new Random().nextInt(6) + 1; // Returns number between 1 and 6
}
如果你想掷多个骰子,你可以这样做

public int roll(int amount) {
    int total = 0;
    for(int i = 0; i < amount; i++) {
        total += new Random().nextInt(6) + 1;
    }
    return total;
}
公共整数滚动(整数金额){
int-total=0;
对于(int i=0;i
您可以创建一个名为
Die
的类来表示一个Die。这与OOP相匹配,因为“Die”将是您的名词之一。现在想想
Die
可能具有的配置和行为。您可能希望一个
Die
具有可配置的面数,但如果未指定,则默认为6。您还希望是able来掷骰子。让我们看看到目前为止我们有什么。实现留给读者。

好的,你有了一个骰子类的开始。现在你可能会想,如果我可以把骰子分组为
骰子(如果你愿意的话,一组骰子),那不是很酷吗

接下来你可能会想,如果我能将
Dice
和单个
Die
视为一种类型,我的意思是它们都可以滚动。让我们创建一个名为
Rollable
的接口,指定滚动行为,并让
Dice
Die
实现它

public interface Rollable {

    int roll();

}
然后返回并将类声明更改为

public class Die implements Rollable 


现在,需要滚动的代码只需要担心
Rollable
而不是
Die
Dice
您可以创建一个名为
Die
的类来表示一个骰子。这与OOP相符,因为“骰子”将是您的名词之一。现在想想
Die
可能具有的配置和行为。