布尔变量在应该改变的时候不改变

Boolean variable not changing when it should

我目前正在做一项家庭作业,该作业说明了 Java 中 OOP 的基础知识。这是一个非常简单的洗车模拟。我在Carclass、isDirtygetDirty中有两个方法。我在汽车 class 中有一个 boolean 变量 Dirty 设置为 false 因为所有 3 辆汽车都应该从干净开始。我应该用 isDirty 方法检查所有 3 辆车,以表明所有 3 辆车开始时都是干净的,之后,我应该 运行 getDirty 方法来制造汽车dirty 然后运行 isDirty 方法显示状态从clean 变为dirty。出于某种原因,boolean 变量 Dirty 在 运行 使用 getDirty 方法后没有更改为 true。

public class CarwashSimulation
{
  Carwash suds = new Carwash();
  Car carA = new Car();
  Car carB = new Car();
  Car carC = new Car();

  public void runSimulation()
  {
    System.out.println("Start Simulation");
    carA.isDirty();
    carB.isDirty();
    carC.isDirty();
    carA.getDirty();
    carB.getDirty();
    carC.getDirty();
    carA.isDirty();
    carB.isDirty();
    carC.isDirty();
  }
}



class Carwash
{
  public void washCar()
  {
    

  }

}

class Car
{
  boolean Dirty = false;

  public void getDirty()
  {
    boolean Dirty = true;
  }

  public boolean isDirty()
  {
    if (Dirty == true)
    {
      System.out.println("It's Dirty");
      return true;
    }
    else
    {
      System.out.println("It's Clean");
      return false;
    }
  }
} 

getDirty() 不是更新数据成员,而是声明一个局部布尔值 隐藏 数据成员,将其初始化为 true 然后丢弃它当它超出范围时。删除声明,你应该没问题:

public void getDirty()
{
    Dirty = true; // Here!
}

旁注:
如果这个方法应该设置脏状态,setDirty 可能是一个更好的名字。

在方法 getDirty() 中,创建了一个新变量 boolean Dirty 并赋值 true。但是,我们想要的是将(现有的)字段 Dirty 设置为 true。为了实现这一点,我们只需要删除 boolean:

class Car {
    ...
    public void getDirty() {
        Dirty = true; 
    }
    ...
}

关于代码的一些说明:

  • 在 java 中,字段名称应始终以小写字母开头 (Dirty -> dirty)
  • 方法名中的前缀get通常用于getter。我建议将 getDirty() 重命名为 makeDirty() 之类的名称,这样用户就不会将它与 getter.
  • 混淆