2016-11-17 112 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