为什么我的字符串不能比较?
好吧,所以我被分配制作了一个骰子程序,可以调用掷骰子并返回它所在的一面。我得到了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;
}
}
你似乎已经错过了什么.Equals()
意味着:
D1.equals(6)
D1
不等于6
。 D1
是Dice
对象的一个实例,而6
是一个整数。您需要确定D1
内的整数值是否等于6
。
首先,创建于Dice
类值一个getter:
public int getSide()
{
return Side;
}
然后使用是的比较:
if (D1.getSide() == 6 && D2.getSide() == 6)
您需要检查模具的价值等于值6.右键现在你正在比较骰子对象的价值和一个没有意义的数字。重写等于或为骰子的值提供吸气剂。
请尝试以下逻辑
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;
}
}
我想通了所有我做的是改变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;
}
}
这将是最好的'Side' a [私人变量](http://programmers.stackexchange.com/questions/143736/why-do-we-need-私人变量)并使用您创建的getter方法。更好的是,您可以创建一个新的getter方法,将其作为整数返回。无论哪种方式确保你隐藏你的类的内部实现,以便在重构代码的内部时,另一个程序员的代码不会中断。 –
为什么他们会吗?你认为'D1.equals(6)'有什么作用?你为什么这么认为? –
变量名称不应以大写字符开头。 – camickr
和你的'骰子'是一个类不是一个功能 –