2016-11-17 77 views
0

我写一个程序,它从一个六个的骰子返回一个随机数,也需要在一个字符串询问用户双方的量第二个骰子。如果用户输入数字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

欢迎堆栈溢出!它看起来像你需要学习使用调试器。请帮助一些[互补调试技术](https://ericlippert.com/2014/03/05/how-to-debug-small-programs/)。如果您之后仍然有问题,请随时返回更多详情。 –

+1

第一步:在你的模组中,摆脱die1和die2并创建dieFace;你在考虑这个错误。你想返回的唯一值是死亡的顶部,而不是两个不同的骰子。也摆脱roll2。你不需要它。 die1和die2成为dieFace并仅返回dieFace。 – Sedrick

+0

在你的主要问题,“输入的模具要创建的数字”听起来并不好这里。这个问题应该是这样的:“你想要第二个骰子有多少面或面?” – Sedrick

回答

2

问题出在getDie2()

当你调用roll()要指定数量die1

因此,如果用户输入3.调用roll()和随机值分配给die1而不是die2int的默认值总是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; 
    } 
} 

因此,要摆脱这种不必要的检查,删除die1die2,并且只使用一个值模的面,不论模具。

像这样:

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; 
} 

} 
+0

所以它说我需要两个数据字段,一个用于存储裸片上的边数,另一个用于存储哪一边正面朝上。我看到你正在使用一面朝上的数据字段,但是numSides怎么样;数据字段,它看起来不像是在做什么? – Angie

+0

@Angie我想我忘了删除它。这是没用的。我的意思是'num'。你可以使用'numSides'而不是'num',因为它更具可读性。 – SkrewEverything