2015-10-15 96 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方法,将其作为整数返回。无论哪种方式确保你隐藏你的类的内部实现,以便在重构代码的内部时,另一个程序员的代码不会中断。 –

相关问题