如何检查ArrayList是否包含来自另一个类

时间:2016-12-23 15:28:13

标签: java arraylist

我有两个类,一个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();

    }
}

2 个答案:

答案 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();