Java 如何在do-while循环中重复实例化对象?

Java 如何在do-while循环中重复实例化对象?,java,instantiation,Java,Instantiation,我正在用Java编写一个战舰克隆。我有一个标准的Ship类,它有一个从用户那里获取输入的构造函数 ship有一个布尔字段valid,它是在构建ship对象后计算的 我想继续实例化Ship,直到它有效为止,但是编译器抛出了一个“找不到符号(巡逻艇)”。为什么?我该怎么做 do { Ship patrolBoat = new Ship(2, "Patrol Boat", promptInputForEnds("Patrol Boat", 2, kboard)); } while (patro

我正在用Java编写一个战舰克隆。我有一个标准的Ship类,它有一个从用户那里获取输入的构造函数

ship有一个布尔字段valid,它是在构建ship对象后计算的

我想继续实例化Ship,直到它有效为止,但是编译器抛出了一个“找不到符号(巡逻艇)”。为什么?我该怎么做

do {
    Ship patrolBoat = new Ship(2, "Patrol Boat", promptInputForEnds("Patrol Boat", 2, kboard));
} while (patrolBoat.valid);

您正在循环中声明
patrolBoat
变量,因此它不在
while
语句的范围内

在循环前声明
船舶巡逻艇

Ship patrolBoat;
do {
  patrolBoat = ...
} while (patrolBoat.valid);

您正在循环中声明
patrolBoat
变量,因此它不在
while
语句的范围内

在循环前声明
船舶巡逻艇

Ship patrolBoat;
do {
  patrolBoat = ...
} while (patrolBoat.valid);

这是一个范围问题吗?不是问题,但您的意思是(!patrolBoat.valid)?看起来您试图在此处创建无效的实例。通常认为,具有创建无效对象的能力不是好的设计。最好使用一个工厂方法来验证其参数,并仅在参数有效时创建对象。这是范围问题吗?不是问题,而是(!patrolBoat.valid)?看起来您试图在此处创建无效的实例。通常认为,具有创建无效对象的能力不是好的设计。最好使用工厂方法验证其参数,并且仅在参数有效时创建对象。