(Java) Сравнение значений двух переменных в операторе if, но нельзя использовать `.equals ()` - PullRequest
0 голосов
/ 16 мая 2018

(Хедз-ап, я никогда раньше не писал подходящую программу, так что терпите меня)

Я пытаюсь написать оператор if, который сравнивает ЗНАЧЕНИЯ полей position двух экземпляров (который буквально возвращает целое число «позиция»). Проблема в том, что они являются закрытыми полями в разных классах, поэтому я не могу получить к ним доступ напрямую. Вместо этого я создал методы в каждом классе, которые возвращают переменную.

Теперь в моем операторе if это условие, которое должно быть истинным / ложным:

if (enemy1.getPosition() = player.getGun1Position())

Теперь проблема в том, что если я использую =, машина предполагает, что я пытаюсь присвоить значение позиции enemy1, и я пытаюсь найти, что == сравнивает расположение в памяти, а не значение двух полей.

Я также читал, что

.equals()

можно использовать, но я предполагаю, что здесь его нельзя использовать, потому что

enemy1.getPosition().equals(player.getGun1Position())

выдает ошибку при попытке.

ПРИМЕЧАНИЕ: Я не могу изменить поля на общедоступные, потому что это для назначения, а поля должны быть приватными.

Любая помощь будет оценена :) 1032 *

Ответы [ 2 ]

0 голосов
/ 16 мая 2018

Я кратко проведу вас через сравнения.

1) Примитивам просто нужен оператор == для сопоставления значений, за исключением того, что строковые значения, которые не являются разрешающими, будут сравнивать свои области памяти.для строк используйте .equals ().

2) Для объектов примитивов, таких как Integer, Double по-прежнему сравнивает область памяти с оператором ==.Вам нужно вызвать их .equals, чтобы сравнить их.Если у вас есть собственный класс, вам нужно определить собственную версию метода equals, что означает переопределение.

0 голосов
/ 16 мая 2018

Вы уже пробовали ==?

Если это действительно удаление целого числа, то == - это путь.

Вы не можете вызывать функции на примитивах, таких как int, char, double, float, long, short, byte. Так что нет .equals () для вызова.

В случае классов вам нужно вызвать .equals (), потому что переменная класса похожа на указатель, поэтому вы не хотите сравнивать два указателя друг с другом с помощью ==. Однако примитивные переменные просто содержат свои «значения», поэтому == идеально подходит для сравнения значений.

Если вы еще не пробовали это, вам нужно быть более экспериментальным с вашим кодированием.

Просто проверь это.

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()))

OR

if(enemy1.getPosition().getIntValue()==player.getGun1Position().getIntValue()))

Должно работать нормально.

...