我正在编写一个程序,它从六面骰子返回一个随机数,并且还接收一个字符串,询问用户第二个骰子的边数。如果用户输入数字2,4,8,10,12,20,100那么骰子角色与那么多方面。如果用户输入的数字不是这个数字,那么第二个骰子应该作为具有六个边的骰子。我们的问题是,如果用户输入的数字不是给定的值,则返回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());
}
}
答案 0 :(得分:2)
问题在于getDie2()
。
当您致电roll()
时,您要将号码指定给die1
。
因此,如果用户输入了3.它会调用roll()
并将随机值分配给die1
而不是die2
,而int
的默认值始终为{{1} }}。这就是你获得0
的原因。
更改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