我有两个类,一个Fighter
类和一个Player
类。 Player
类包含一个名为ArrayList
的{{1}},其中包含玩家的船只。
我可以毫无问题地向玩家的舰队添加船只,但是当我尝试检查玩家的舰队中是否存在战斗机时,它会给我一个错误fleet
。
我很困惑为什么我可以为舰队添加战斗机,但无法检查战斗机中是否存在战斗机。
Fighter.java
Fighter cannot be resolved to a variable
Player.java
public class Fighter extends Ship {
public Fighter(){
super(9,1,1); //Sets attack and defense values
}
}
Core.java
import java.util.ArrayList;
import java.util.Scanner;
public class Player {
ArrayList<Ship> fleet = new ArrayList<Ship>();
public void takeAHit(){
if (fleet.contains(Fighter)){ //Error happens here
System.out.println("Fighter found");
}
}
public void buildFleet(){
Scanner userInput = new Scanner(System.in);
System.out.println("How many fighters?");
int fighters = Integer.parseInt(userInput.next());
while (fighters > 0){
fleet.add(new Fighter());
fighters--;
}
userInput.close();
}
}
答案 0 :(得分:7)
不幸的是,contains
方法需要类的实例而不是类本身
要引用一个类,您需要将.class
附加到名称。
我能想到的最佳解决方案是创建一个使用instanceof
关键字的方法,类似于:
public boolean isFighterInFleet() {
for(Ship ship : this.fleet)
if(ship instanceof Fighter)
return true;
return false;
}
然后使用:
if (isFighterInFleet()){
而不是
if (fleet.contains(Fighter)){
答案 1 :(得分:1)
在Java 8中:
this.fleet.stream()。filter(ship - &gt; ship instanceof 战士).findFirst()。isPresent();