java - 如何检查数组是否包含某个对象?

标签 java arrays

您好,我有一个程序,您可以放置​​瓷砖并销毁瓷砖,然后在用放置的瓷砖 build 一些东西后,您可以将它们出售以换取金钱。 我只希望能够在至少其中一 block 瓷砖是驾驶舱瓷砖的情况下出售这些瓷砖。这是我到目前为止所拥有的:

for(int i = 0; i < play.b.toArray().length;i++){
    if(play.b.get(i).id == 1 ){
        cansell= true;
    }else{
        cansell= false;
    }       
}

b 是 block 数组:
公共(public)静态ArrayList b = new arrayList(); id 1 是驾驶舱图 block 。这是驾驶舱图 block 供引用:

public class cockpit extends block{

    public cockpit(int x,int y,int rot){
        this.x = x;
        this.y = y;
        this.rotate = rot;
        r = new Rectangle(x - (int)play.camx,y - (int)play.camy,20,20);
        id = 3;
    }

    public void tick(){
        createCollisionRect();

        if(Comp.mr && r.contains(new Point((Comp.mx ) ,(Comp.my) ))){
            remove = true;

        }
        if(remove){
            //play.gui.money +=800;

        }

    }

    public void render(Graphics g){
        Graphics2D g2 = (Graphics2D) g;

        if (rotate == 0) {
            ImageIcon i62 = new ImageIcon("res/tiles/cockpit.png");
            img = i62.getImage();
            g.drawImage(img, x - (int) play.camx, y - (int) play.camy,20,20, null);
        }
        if (rotate == 1) {
            AffineTransform at = AffineTransform.getTranslateInstance(x, y);
            at.rotate(Math.toRadians(90),10,10);

            ImageIcon i62 = new ImageIcon("res/tiles/cockpit.png");
            img = i62.getImage();

            g2.drawImage(img,at, null);
        }
        if (rotate == 2) {
            AffineTransform at = AffineTransform.getTranslateInstance(x, y);
            at.rotate(Math.toRadians(180),10,10);

            ImageIcon i62 = new ImageIcon("res/tiles/cockpit.png");
            img = i62.getImage();

            g2.drawImage(img, at, null);
        }
        if (rotate == 3) {
            AffineTransform at = AffineTransform.getTranslateInstance(x, y);
            at.rotate(Math.toRadians(-90),10,10);

            ImageIcon i62 = new ImageIcon("res/tiles/cockpit.png");
            img = i62.getImage();

            g2.drawImage(img, at, null);

        }
    }
}

这是游戏课(它很大):

公开课游戏延伸屏幕{

public Image img, img1;

public static Rectangle r = new Rectangle(0, 200, 1000, 50);

private Image i;

public int turn = 1;

public static player p;
public static gui gui;
public static entitiesManager em;
public static sell s;

public static int camx, camy;

public static ArrayList<block> b = new ArrayList<block>();

public static int selectedRot = 0;
public static int selectedID = 0;
public static int maxSelectedID = 13;

public static int bx, by, w, h;

public static int dragX, dragY, drawWitdh, drawHeight, curX, curY;

public static boolean canPlaceATile = true;

public static boolean loadSave1;
public static boolean loadSave2;
public static boolean loadSave3;

public static boolean dragging;

public boolean hasloaded = false;

public static boolean canplace = true;

public static boolean testingMode = false;

// bankruptcy
public static boolean bankrupt = false;
public static int pos = -200;
public static int time = 0;
public static int timer = 0;

public play(manager m) {
    super(m);
    b.clear();
    hasloaded = false;
    p = new player(Comp.size.width / 2 - 10, Comp.size.height / 2 - 10);
    gui = new gui(Comp.size.width / 2 - 10, 20);
    em = new entitiesManager();
    s = new sell(Comp.size.width / 2 + 50, 20);
    if (b.toArray().length <= 0) {
        play.b.add(new invisible(-1000, -1000, play.selectedRot));
    }
    pos = -400;
}

public void tick() {
    if (hasloaded == false) {
        if (loadSave1) {
            load.loadship1();
            load.loadMoney1();
        }
        if (loadSave2) {
            load.loadship1();
            load.loadMoney1();
            play.gui.money = 10000;
            play.gui.s.HJSshares = 0;
            play.gui.s.MSshares = 0;
            play.gui.s.KSshares = 0;
            play.gui.s.MScost = 100;
            play.gui.s.KScost = 1000;
            play.gui.s.HJScost = 10000;
            play.gui.day = 30;
            play.gui.dividend = 0;
            play.bankrupt = false;
            play.b.clear();
            play.b.add(new invisible(-1000, -1000, play.selectedRot));
            play.selectedID = 1;
            play.selectedRot = 0;

            save.saveMoney1();
            save.saveShip();

        }

        hasloaded = true;
    }

    handleinput();
    s.tick();
    p.tick();
    gui.tick();
    em.tick();

    for (int i = 0; i < b.toArray().length; i++) {
        b.get(i).tick();

        if (b.get(i).remove && !play.testingMode) {
            b.remove(i);
            i--;
        }
    }

    if (selectedRot >= 4) {
        selectedRot = 0;
    }

    if (selectedID > maxSelectedID) {
        selectedID = 0;
    } else if (selectedID < 0) {
        selectedID = maxSelectedID;
    }

    // System.out.println(""+b.toArray().length);

    if (b.toArray().length <= 0) {
        play.b.add(new invisible(-1000, -1000, play.selectedRot));

    }

    if (pos >= -30) {
        pos = -30;
        time = 0;
    }

    if(bankrupt){
        if(time >= timer && pos<= -31){
            pos++;
            time = 0;
        }else {
            time++;
        }
    }
}

public void handleinput() {
    if (Keys.isPressed(Keys.z)) {
        selectedRot++;
    }
    if (Keys.isPressed(Keys.s)) {
            save.saveShip();
            save.saveMoney1();


    }

    if (Keys.isPressed(Keys.ESCAPE)) {
        m.setScreen(manager.menu);
        play.selectedID = 0;
        play.selectedRot = 0;
    }




}

public void render(Graphics g) {

    Graphics2D g2 = (Graphics2D) g;

    RenderingHints rh = new RenderingHints(RenderingHints.KEY_TEXT_ANTIALIASING, RenderingHints.VALUE_TEXT_ANTIALIAS_GASP);
    g2.setRenderingHints(rh);

    ImageIcon i622 = new ImageIcon("res/bg/universFIN.png");
    img = i622.getImage();
    g.drawImage(img, 0, 0, null);

    p.render(g);
    em.render(g);

    for (int i = 0; i < b.toArray().length; i++) {
        b.get(i).render(g);

    }

    gui.render(g);
    s.render(g);

    bx = Math.min((dragX / 20) * 20, (curX / 20) * 20);
    by = Math.min((dragY / 20) * 20, (curY / 20) * 20);
    w = Math.abs((curX / 20) * 20 - (dragX / 20) * 20);
    h = Math.abs((curY / 20) * 20 - (dragY / 20) * 20);

    if (dragging && w >= 20 && h >= 20 && Comp.ml) {
        g.setColor(new Color(26, 216, 26, 128));
        g.fillRect(bx, by, w, h);
        g.setColor(new Color(17, 142, 17, 255));
        g.drawRect(bx, by, w, h);

    }
    if (dragging && w >= 20 && h >= 20 && Comp.mr) {
        g.setColor(new Color(216, 26, 26, 128));
        g.fillRect(bx, by, w, h);
        g.setColor(new Color(142, 17, 17, 255));
        g.drawRect(bx, by, w, h);

    }


    if (bankrupt) {
        ImageIcon i6221 = new ImageIcon("res/bg/bankrupt.png");
        img = i6221.getImage();
        g.drawImage(img, 0, pos, null);

    }
}

public void init() {

}

}

最佳答案

如果您使用普通数组,则查找内部对象的唯一方法是像您一样迭代数组并比较所需的值,或者使用equals()。如果您正在寻找更有效的方法,请检查 HashSet 等类和其他集合。

关于java - 如何检查数组是否包含某个对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29716308/

相关文章:

java - 如何用汉诺塔调用递归

java - 当关闭相关(相同)entityManager 时,entityManager 先前找到或获取的实体怎么样?

java - 获取 sqlite 数据到 ExpandableListView

python - 获得二维数组的列计数

arrays - 将 C 字符数组转换为字符串

java - Gradle 构建,然后忽略子项目

java - 更新插入文档时索引未更新

java - 将 char 附加到 char 数组 java

javascript - 使用 JavaScript 在复选框选中和取消选中时从全局数组中删除特定元素

c - 如何以指针格式访问结构内的数组?