(Java) 在 if 语句中比较两个变量的值但不能使用 `.equals()`
(Java) Comparing values of two variables in if-statement but can't use `.equals()`
(注意,我之前从未编写过合适的程序,所以请多多包涵)
我正在尝试编写一个 if 语句来比较两个实例的 position
字段的值(字面上 return 是整数 "position")。问题是,它们是不同 classes 中的私有字段,所以我无法直接访问它们。相反,我在每个 class 中创建了方法,其中 return 变量。
现在在我的 if 语句中,这是 true/false:
的条件
if (enemy1.getPosition() = player.getGun1Position())
现在的问题是,如果我使用 =
,机器会假设我正在尝试为 enemy1
的位置赋值,并且我一直在研究发现 ==
比较内存位置而不是两个字段的值。
我也看过
.equals()
可以使用,但我假设它不能在这里使用,因为
enemy1.getPosition().equals(player.getGun1Position())
尝试时出现错误。
注意: 我无法将字段更改为 public,因为这是一项作业,字段需要是私有的。
任何帮助将不胜感激:)
您尝试过 ==
了吗?
如果它真的要淘汰一个整数,那么 ==
是可行的方法。
您不能在 int、char、double、float、long、short、byte 等基元上调用函数。所以没有 .equals() 可以调用。
在classes的情况下,你需要调用.equals(),因为class变量就像一个指针,所以你不想比较两个指针其他 ==
。但是,原始变量只包含它们的 "values",因此 ==
非常适合比较值。
如果您还没有尝试过,则需要对您的编码进行更多实验。
测试一下。
System.out.println(enemy1.getPosition()+" == "+ player.getGun1Position()+": "+(enemy1.getPosition()==player.getGun1Position()));
if(enemy1.getPosition()==player.getGun1Position())
{
//blah
}
如果这不起作用,则您返回的不是 int 原语,而是 Integer 对象(注意大写 I)。
在这种情况下,
if(enemy1.getPosition().equals(player.getGun1Position()))
或
if(enemy1.getPosition().getIntValue()==player.getGun1Position().getIntValue()))
应该可以正常工作。
我将简要介绍一下比较。
1) 基元只需要 == 运算符来匹配值,除非不是允许的字符串值将比较它们的内存位置。对于字符串使用 .equals().
2) 对于像Integer这样的原始类型的对象,Double还是会用==运算符来比较内存位置。您需要调用它们的 .equals 来比较它们。如果你有自己的 class 你需要定义你自己的 equals 方法版本,意味着覆盖。
(注意,我之前从未编写过合适的程序,所以请多多包涵)
我正在尝试编写一个 if 语句来比较两个实例的 position
字段的值(字面上 return 是整数 "position")。问题是,它们是不同 classes 中的私有字段,所以我无法直接访问它们。相反,我在每个 class 中创建了方法,其中 return 变量。
现在在我的 if 语句中,这是 true/false:
的条件if (enemy1.getPosition() = player.getGun1Position())
现在的问题是,如果我使用 =
,机器会假设我正在尝试为 enemy1
的位置赋值,并且我一直在研究发现 ==
比较内存位置而不是两个字段的值。
我也看过
.equals()
可以使用,但我假设它不能在这里使用,因为
enemy1.getPosition().equals(player.getGun1Position())
尝试时出现错误。
注意: 我无法将字段更改为 public,因为这是一项作业,字段需要是私有的。
任何帮助将不胜感激:)
您尝试过 ==
了吗?
如果它真的要淘汰一个整数,那么 ==
是可行的方法。
您不能在 int、char、double、float、long、short、byte 等基元上调用函数。所以没有 .equals() 可以调用。
在classes的情况下,你需要调用.equals(),因为class变量就像一个指针,所以你不想比较两个指针其他 ==
。但是,原始变量只包含它们的 "values",因此 ==
非常适合比较值。
如果您还没有尝试过,则需要对您的编码进行更多实验。
测试一下。
System.out.println(enemy1.getPosition()+" == "+ player.getGun1Position()+": "+(enemy1.getPosition()==player.getGun1Position()));
if(enemy1.getPosition()==player.getGun1Position())
{
//blah
}
如果这不起作用,则您返回的不是 int 原语,而是 Integer 对象(注意大写 I)。
在这种情况下,
if(enemy1.getPosition().equals(player.getGun1Position()))
或
if(enemy1.getPosition().getIntValue()==player.getGun1Position().getIntValue()))
应该可以正常工作。
我将简要介绍一下比较。
1) 基元只需要 == 运算符来匹配值,除非不是允许的字符串值将比较它们的内存位置。对于字符串使用 .equals().
2) 对于像Integer这样的原始类型的对象,Double还是会用==运算符来比较内存位置。您需要调用它们的 .equals 来比较它们。如果你有自己的 class 你需要定义你自己的 equals 方法版本,意味着覆盖。