Java 掷骰子游戏

Java 掷骰子游戏,java,Java,我正在编写一个程序,该程序从一个六面骰子返回一个随机数,并接收一个字符串,以询问用户第二个骰子的面数。如果用户输入数字2、4、8、10、12、20100,则骰子角色具有如此多的边。如果用户输入的数字与此不同,则第二个骰子应为六面骰子。我们的问题是,如果用户输入的数字不是给定的值,它将返回0。我们需要返回一个介于1和6之间的随机数,因为它是一个六面骰子。关于如何修复我们的代码有什么建议吗 //Blueprint public class Die{ private int numSides; pri

我正在编写一个程序,该程序从一个六面骰子返回一个随机数,并接收一个字符串,以询问用户第二个骰子的面数。如果用户输入数字2、4、8、10、12、20100,则骰子角色具有如此多的边。如果用户输入的数字与此不同,则第二个骰子应为六面骰子。我们的问题是,如果用户输入的数字不是给定的值,它将返回0。我们需要返回一个介于1和6之间的随机数,因为它是一个六面骰子。关于如何修复我们的代码有什么建议吗

//Blueprint
public class Die{
private int numSides;
private int sideFacingUp;
public int die1;
public int die2;
public int num;


public Die()
{
    roll();
}
public Die(int number)
{
num = number;
    if(num==2||num==4||num==8|num==10||num==12||num==20||num==100)
    {
    roll2(num);
    }
    else
    {
        roll();
    }
}
public void roll()
{
    die1= (int)(Math.random()*6)+1;
}
public void roll2(int no)
{
    die2 = (int)(Math.random()*no)+1;

}
public int getDie1()
{
    //System.out.println("I m here");
    return die1;
}
public int getDie2()
{
    return die2;
}

}


//actual program
import java.util.Scanner;
public class DieTester{
public static void main(String[] args){
int num;
Die D1 = new Die();
Scanner s1 = new Scanner(System.in);
System.out.println("The Value of the First Die:"+D1.getDie1());
System.out.println("Enter number of Die you want to create");
num = s1.nextInt();
Die D2 = new Die(num);

System.out.println("The Value of the Second Die:"+D2.getDie2());

}
}

问题在于
getDie2()

当您调用
roll()
时,您正在将号码分配给
die1

因此,如果用户输入3。它调用
roll()。这就是为什么您得到
0

更改
getDie2()
以检查
0

public int getDie2()
{
     if(die1 == 0) // die1 will be 0 because roll2() is called. So return die2
     {
         return die2;
     }
     else         // die2 will be 0 because roll() is called. So return die1
     {
         return die1;
     }
}
因此,为了消除这种不必要的检查,请移除
die1
die2
,并仅对模具表面使用一个值,而不考虑模具

像这样:

public class Die{

private int sideFacingUp;
private int numSides;


public Die()
{
    roll();
}
public Die(int number)
{
    numSides = number;
    if(numSides==2||numSides==4||numSides==8|numSides==10||numSides==12||numSides==20||numSides==100)
    {
    roll2(numSides);
    }
    else
    {
        roll();
    }
}
public void roll()
{
    sideFacingUp= (int)(Math.random()*6)+1;
}
public void roll2(int no)
{
    sideFacingUp = (int)(Math.random()*no)+1;

}
public int getDie()
{
    //System.out.println("I m here");
    return sideFacingUp;
}

}

问题在于
getDie2()

当您调用
roll()
时,您正在将号码分配给
die1

因此,如果用户输入3。它调用
roll()。这就是为什么您得到
0

更改
getDie2()
以检查
0

public int getDie2()
{
     if(die1 == 0) // die1 will be 0 because roll2() is called. So return die2
     {
         return die2;
     }
     else         // die2 will be 0 because roll() is called. So return die1
     {
         return die1;
     }
}
因此,为了消除这种不必要的检查,请移除
die1
die2
,并仅对模具表面使用一个值,而不考虑模具

像这样:

public class Die{

private int sideFacingUp;
private int numSides;


public Die()
{
    roll();
}
public Die(int number)
{
    numSides = number;
    if(numSides==2||numSides==4||numSides==8|numSides==10||numSides==12||numSides==20||numSides==100)
    {
    roll2(numSides);
    }
    else
    {
        roll();
    }
}
public void roll()
{
    sideFacingUp= (int)(Math.random()*6)+1;
}
public void roll2(int no)
{
    sideFacingUp = (int)(Math.random()*no)+1;

}
public int getDie()
{
    //System.out.println("I m here");
    return sideFacingUp;
}

}

欢迎来到堆栈溢出!看起来您需要学习使用调试器。请随便吃点。如果您以后仍然有问题,请随时回来提供更多详细信息。第一步:在您的模具类中,摆脱die1和die2并创建dieFace;你想得不对。您想要返回的唯一值是骰子的顶部,而不是两个不同的骰子。也要摆脱roll2。你不需要它。die1和die2变成dieFace,只返回dieFace。在你的主要问题中,“输入你想要创建的模具数量”听起来不太好。问题应该是这样的:“您希望第二个骰子有多少边或面?”欢迎来到Stack Overflow!看起来您需要学习使用调试器。请随便吃点。如果您以后仍然有问题,请随时回来提供更多详细信息。第一步:在您的模具类中,摆脱die1和die2并创建dieFace;你想得不对。您想要返回的唯一值是骰子的顶部,而不是两个不同的骰子。也要摆脱roll2。你不需要它。die1和die2变成dieFace,只返回dieFace。在你的主要问题中,“输入你想要创建的模具数量”听起来不太好。问题应该是这样的:“你希望第二个模具有多少面?”所以它说我需要两个数据字段,一个存储模具上的面数,另一个存储当前正面朝上的面数。我看到您使用的是面向上的数据字段,但是裸体呢;“数据字段,它看起来没有做任何事情吗?@Angie我想我忘了删除它。”。这是没有用的。我是说
num
。您可以使用
numSides
而不是
num
,因为它更具可读性。因此它表示我需要两个数据字段,一个存储模具上的面数,另一个存储当前面朝上的面数。我看到您使用的是面向上的数据字段,但是裸体呢;“数据字段,它看起来没有做任何事情吗?@Angie我想我忘了删除它。”。这是没有用的。我是说
num
。您可以使用
numSides
而不是
num
,因为它更具可读性。