在Java中比较对象是否相等时出错

时间:2019-06-22 03:58:21

标签: 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;

3 个答案:

答案 0 :(得分:1)

您已经关闭。 oceano2[i-1][j-1] == 'F'试图将AquaticAnimal与字符F进行比较。添加呼叫以获取结尾的类型:oceano2[i-1][j-1].getTipo() == 'F'

答案 1 :(得分:0)

==用于比较,=用于分配。 oceano2[i-1][j-1] == 'F'boolean表达式。将此表达式更改为语句,您将无法为Object分配字符。由AquaticAnimal运算符初始化new的适当对象。

更改

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

到(参数化构造函数)

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 }

答案 2 :(得分:-1)

`oceano2` is Object of class `AquaticAnimal`. 

因此,要测试是否相等,应使用.equals()而不是==