Ошибка при сравнении объектов на равенство в Java - PullRequest
0 голосов
/ 22 июня 2019

Я программирую класс Океана, это домашнее задание, мне нужно создать океан, где «S» - это акула, а «F» - это рыба. Океан - это доска, поэтому я использую матрицу, чтобы, если в Океане есть одна рыба и одна акула, мертвая рыба или если вокруг акулы нет рыб, то мертвая акула. ​​

но когда я пытаюсь скомпилировать, покажи мне:

error: not a statement


oceano2[i-1][j-1] == 'F';

                  ^

мои переменные ...

public class Ocean {
    private AquaticAnimal[][] oceano = new AquaticAnimal[][];
    private AquaticAnimal[][] oceano2 = new AquaticAnimal[][];
    static int defaultCapacity;

мой конструктор ...

public Ocean(int dimOceano) {
    if (dimOceano > this.defaultCapacity) {
        this.oceano = new AquaticAnimal[dimOceano][dimOceano];
        this.oceano2 = new AquaticAnimal[dimOceano][dimOceano];
    } else {
        this.oceano = new AquaticAnimal[defaultCapacity][defaultCapacity];
        this.oceano2 = new AquaticAnimal[defaultCapacity][defaultCapacity];
    }
}

Методы Океана

public int getCapacity(){
        return oceano.length; //regrese numero de filas
    }
.
.
.

Я не знаю, как лучше проанализировать все места моей матрицы, поэтому я делаю одно за другим. Я должен проанализировать, есть ли вокруг рыбы или акулы, есть ли у меня рыба и акула, акула съедает рыбу, если нет рыб, мертвые акулы, если только есть рыбы, рожденные новой рыбой.

public void cycle() {
    int f = this.oceano.length;
    int c = this.oceano[0].length;

    for(int i = 1; i < f; i++) {
        for(int j = 1; j < c; j++) {
            while((j+1 < c) && (i+1 < f)) {

                if ((oceano2[i-1][j-1].equals('F'))&&(oceano2[i-1][j].equals(' '))&&(oceano2[i][j-1].equals(' '))&&(oceano2[i][j].equals(' '))) {
                    oceano2[i-1][j-1] = new AquaticAnimal('F');
                    } else if ((oceano2[i-1][j-1].equals(' '))&&(oceano2[i-1][j].equals('F'))&&(oceano2[i][j-1].equals(' '))&&(oceano2[i][j].equals(' '))){
.
.
.                   

это я класс AquaticAnimal, только конструктор и методы ...

public class AquaticAnimal{
    public static int maxStarveCycles = 0;
    private char animal;
    private int ciclosSinAlimentar;

    public AquaticAnimal(char animal){
        if(animal == 'F'){
            this.animal = animal;
            ciclosSinAlimentar = 0;
        } else {
            this.animal = animal;
            maxStarveCycles = 3;
        }
    }

    public char getTipo(){
        return animal;
    }

    public int getStarveCycles(){
        return ciclosSinAlimentar;
    }
.
.
.

меняю

==

до

.equals()

и

new AquaticAnimal('F);

но теперь у меня следующая ошибка:

error: cannot find symbol
       AquaticAnimal.maxStarveCycle = 3;

Ответы [ 3 ]

1 голос
/ 22 июня 2019

Ты рядом. oceano2[i-1][j-1] == 'F' пытается сравнить AquaticAnimal с символом F. Добавьте вызов, чтобы получить тип в конце: oceano2[i-1][j-1].getTipo() == 'F'.

0 голосов
/ 22 июня 2019
`oceano2` is Object of class `AquaticAnimal`. 

Итак, чтобы проверить равенство, вы должны использовать .equals() вместо ==.

0 голосов
/ 22 июня 2019

== использовать для сравнения и = использовать для назначения. oceano2[i-1][j-1] == 'F' - это выражение boolean. измените это выражение на оператор, и вы не можете назначить символ для объекта. инициализировать правильный объект AquaticAnimal оператором new.

Изменение

oceano2[i-1][j-1] == 'F';

to (Параметризованный конструктор)

oceano2[i-1][j-1] = new AquaticAnimal('F');// in case if its constructor has accept a chracter. 

или (конструктор по умолчанию)

`oceano2[i-1][j-1] = new AquaticAnimal();`

И в вас, если заявление вы можете сравнить, используя getTipo() метод

if(oceano2[i-1][j-1].getTipo() == 'F') { // your code }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...