2015-10-15 103 views
-1

好吧,所以我被分配製作了一個骰子程序,可以調用擲骰子並返回它所在的一面。我得到了Dice的一部分。但是,當我運行我的程序時,如果兩個die等於6,則我的if語句不會執行以增加Counter。我的程序出了什麼問題。爲什麼我的字符串不能比較?

這是主要的:

public class PairOfDice { 

    public static void main(String[] args) { 
     int Counter = 0; 
     Dice D1 = new Dice(); 
     Dice D2 = new Dice(); 

     for (int X = 0; X <= 1000; X++) 
     { 
      D1.Roll(); 
      D2.Roll(); 

      if (D1.equals(6) && D2.equals(6)) 
      { 
       Counter++; 
      } 
      else 
      { 
       System.out.print ("Dice 1 = " + D1 + " | "); 
       System.out.println ("Dice 2 = " + D2); 
      } 
     } 
     System.out.print ("There were " + Counter + " Box Cars"); 
    } 
} 

這是我的骰子功能:

public class Dice { 

    private int Side; 

    public Dice() 
    { 
     Roll(); 
    } 

    public void Roll() 
    { 
     Side = (int)(Math.random() * 6 + 1); 
    } 

    public String toString() 
    { 
     String A; 
     A = Integer.toString(Side); 
     return A; 
    } 
} 
+3

爲什麼他們會嗎?你認爲'D1.equals(6)'有什麼作用?你爲什麼這麼認爲? –

+3

變量名稱不應以大寫字符開頭。 – camickr

+0

和你的'骰子'是一個類不是一個功能 –

回答

2

你似乎已經錯過了什麼.Equals()意味着:

D1.equals(6) 

D1不等於6D1Dice對象的一個​​實例,而6是一個整數。您需要確定D1內的整數值是否等於6

首先,創建於Dice類值一個getter:

public int getSide() 
{ 
    return Side; 
} 

然後使用的比較:

if (D1.getSide() == 6 && D2.getSide() == 6) 
1

您需要檢查模具的價值等於值6.右鍵現在你正在比較骰子對象的價值和一個沒有意義的數字。重寫等於或爲骰子的值提供吸氣劑。

0

請嘗試以下邏輯

public class PairOfDice { 

    public static void main(String[] args) { 
     int counter = 0; 
     Dice d1 = new Dice(); 
     Dice d2 = new Dice(); 

     for (int X = 0; X <= 1000; X++) 
     { 
      d1.roll(); 
      d2.roll(); 

      if (d1.getSide()==6 && d2.getSide()==6) 
      { 
       counter++; 
      } 
      else 
      { 
       System.out.print ("Dice 1 = " + d1 + " | "); 
       System.out.println ("Dice 2 = " + d2); 
      } 
     } 
     System.out.print ("There were " + counter + " Box Cars"); 
    } 
} 




public class Dice { 

    private int side; 

    public Dice() 
    { 
     roll(); 
    } 

    public void roll() 
    { 
     side = (int)(Math.random() * 6 + 1); 
    } 

    public String toString() 
    { 
     String A; 
     A = Integer.toString(side); 
     return A; 
    } 

    public int getSide() { 
     return side; 
    } 
} 
1

我想通了所有我做的是改變if (D1.equals(6) && D2.equals(6))if (D1.equals(6) && D2.equals(6)),並刪除if語句的else部分,並在if語句之前將打印輸出。

這是主要的:

public class PairOfDice { 

    public static void main(String[] args) { 
     int Counter = 0; 
     Dice D1 = new Dice(); 
     Dice D2 = new Dice(); 

     for (int X = 0; X <= 1000; X++) 
     { 
      D1.Roll(); 
      D2.Roll(); 

      System.out.print ("Dice 1 = " + D1 + " | "); 
      System.out.println ("Dice 2 = " + D2); 

      if (D1.Side == 6 && D2.Side == 6) 
      { 
       Counter++; 
      } 
     } 
     System.out.print ("There were " + Counter + " Box Cars"); 
    } 
} 

這是骰子:

public class Dice { 

    int Side; 

    public Dice() 
    { 
     Roll(); 
    } 

    public void Roll() 
    { 
     Side = (int)(Math.random() * 6 + 1); 
    } 

    public String toString() 
    { 
     String A; 
     A = Integer.toString(Side); 
     return A; 
    } 
} 
+0

這將是最好的'Side' a [私人變量](http://programmers.stackexchange.com/questions/143736/why-do-we-need-私人變量)並使用您創建的getter方法。更好的是,您可以創建一個新的getter方法,將其作爲整數返回。無論哪種方式確保你隱藏你的類的內部實現,以便在重構代碼的內部時,另一個程序員的代碼不會中斷。 –

相關問題