布尔变量在应该改变的时候不改变
Boolean variable not changing when it should
我目前正在做一项家庭作业,该作业说明了 Java 中 OOP 的基础知识。这是一个非常简单的洗车模拟。我在Car
class、isDirty
和getDirty
中有两个方法。我在汽车 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. 混淆
我目前正在做一项家庭作业,该作业说明了 Java 中 OOP 的基础知识。这是一个非常简单的洗车模拟。我在Car
class、isDirty
和getDirty
中有两个方法。我在汽车 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. 混淆