Ошибка при сравнении объектов на равенство в Java

Я программирую класс «Океан», это домашнее задание, мне нужно создать океан, где «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;

Что вы пытаетесь сделать здесь? Вы не можете сравнивать и назначать между примитивными символами и AquaticAnimal вот так. Есть ли у AquaticAnimal поле типа char, которое вы пытаетесь проверить/установить?

azurefrog 22.06.2019 06:11
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
1
55
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Ответ принят как подходящий

== используйте для сравнения и = используйте для присвоения. 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();`

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

if (oceano2[i-1][j-1].getTipo() == 'F') { // your code }

этот оператор используется в условии "if ()". поэтому он может ожидать логического результата.

Shaik Bajivali 22.06.2019 06:04

почему -1? Вы можете объяснить ?

Khalid Shah 22.06.2019 06:27

хаха. Я говорил о части в круглых скобках, а вы рассмотрели часть в боковых фигурных скобках. мы оба правы, я думаю.

Shaik Bajivali 22.06.2019 06:31

потому что мое «для» начинается с 1, поэтому мне нужно место [0] [0] в матрице.

Jabel 22.06.2019 06:32

спасибо, ребята, теперь у меня следующая ошибка: ошибка: не удается найти символ AquaticAnimal.maxStarveCycle = 3;

Jabel 22.06.2019 07:19

@AbelArchila это защищенное поле. вы можете получить к нему доступ с помощью get метода.

Khalid Shah 22.06.2019 07:20

мой метод - public void feed(){this.ciclosSinAlimentar = maxStarveCycles;} Я пытаюсь использовать oceano2.feed(), таким образом, его правильный доступ?

Jabel 22.06.2019 07:34

@AbelArchila таким образом создайте сеттер для maxStarveCycles. public void setMaxStarveCycles (int val) { this.maxStarveCycles = val; } и установите свое значение, вызвав этот метод. Oceano2.setMaxStarveCycles(3);

Khalid Shah 22.06.2019 07:39

@AbelArchila примите в качестве ответа, если он решит вашу проблему. Спасибо

Khalid Shah 22.06.2019 07:39

проблема в том, что я должен использовать только свой метод, потому что у меня есть testOcean и я использую свои методы.

Jabel 22.06.2019 07:50

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

Khalid Shah 22.06.2019 07:56

сделать maxStarveCycles static . static public int maxStarveCycles .

Khalid Shah 22.06.2019 08:26

нет, у меня такая же ошибка - Ocean.java: 74: ошибка: не удается найти символ AquaticAnimal.maxStarveCycle = 3; что ты думаешь о?

Jabel 22.06.2019 08:28

Проблема с оформлением public static int maxStarveCycles будет решена.

Khalid Shah 22.06.2019 08:31

:( нет, проблема продолжается... Ocean.java:74: ошибка: не удается найти символ AquaticAnimal.maxStarveCycle = 3; ^ символ: переменная maxStarveCycle местоположение: класс AquaticAnimal

Jabel 22.06.2019 08:35

Ваше имя переменной maxStarveCycles и вы пишете maxStarveCycle . s отсутствует в конце.

Khalid Shah 22.06.2019 08:38
`oceano2` is Object of class `AquaticAnimal`. 

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

Сравнение AquaticAnimal с персонажем всегда будет ложным, используя equals() или ==.

azurefrog 22.06.2019 06:05

Тогда весь подход к решению проблемы неверен?

Shaik Bajivali 22.06.2019 06:09

В основном, да. Не зная, что пытается сделать ОП или, по крайней мере, как выглядит AquaticAnimal, я не думаю, что на этот вопрос можно ответить.

azurefrog 22.06.2019 06:13

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

Другие вопросы по теме