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




== используйте для сравнения и = используйте для присвоения. 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 ()". поэтому он может ожидать логического результата.
почему -1? Вы можете объяснить ?
хаха. Я говорил о части в круглых скобках, а вы рассмотрели часть в боковых фигурных скобках. мы оба правы, я думаю.
потому что мое «для» начинается с 1, поэтому мне нужно место [0] [0] в матрице.
спасибо, ребята, теперь у меня следующая ошибка: ошибка: не удается найти символ AquaticAnimal.maxStarveCycle = 3;
@AbelArchila это защищенное поле. вы можете получить к нему доступ с помощью get метода.
мой метод - public void feed(){this.ciclosSinAlimentar = maxStarveCycles;} Я пытаюсь использовать oceano2.feed(), таким образом, его правильный доступ?
@AbelArchila таким образом создайте сеттер для maxStarveCycles. public void setMaxStarveCycles (int val) { this.maxStarveCycles = val; } и установите свое значение, вызвав этот метод. Oceano2.setMaxStarveCycles(3);
@AbelArchila примите в качестве ответа, если он решит вашу проблему. Спасибо
проблема в том, что я должен использовать только свой метод, потому что у меня есть testOcean и я использую свои методы.
можете ли вы поделиться своим полным кодом, тогда я предложу решение
сделать maxStarveCycles static . static public int maxStarveCycles .
нет, у меня такая же ошибка - Ocean.java: 74: ошибка: не удается найти символ AquaticAnimal.maxStarveCycle = 3; что ты думаешь о?
Проблема с оформлением public static int maxStarveCycles будет решена.
:( нет, проблема продолжается... Ocean.java:74: ошибка: не удается найти символ AquaticAnimal.maxStarveCycle = 3; ^ символ: переменная maxStarveCycle местоположение: класс AquaticAnimal
Ваше имя переменной maxStarveCycles и вы пишете maxStarveCycle . s отсутствует в конце.
`oceano2` is Object of class `AquaticAnimal`.
Итак, для проверки равенства вы должны использовать .equals() вместо ==.
Сравнение AquaticAnimal с персонажем всегда будет ложным, используя equals() или ==.
Тогда весь подход к решению проблемы неверен?
В основном, да. Не зная, что пытается сделать ОП или, по крайней мере, как выглядит AquaticAnimal, я не думаю, что на этот вопрос можно ответить.
Вы близко. oceano2[i-1][j-1] == 'F' пытается сравнить AquaticAnimal с персонажем F. Добавьте вызов, чтобы получить тип в конце: oceano2[i-1][j-1].getTipo() == 'F'.
Что вы пытаетесь сделать здесь? Вы не можете сравнивать и назначать между примитивными символами и
AquaticAnimalвот так. Есть ли уAquaticAnimalполе типаchar, которое вы пытаетесь проверить/установить?