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

时间:2015-04-18 10:58:19

标签: java arrays

您好我有一个程序,您可以放置​​瓷砖并销毁瓷砖,然后在您使用瓷砖构建某些东西后,您可以将它们出售给它们。 如果至少有一个瓷砖是驾驶舱瓷砖,我只想卖掉瓷砖。以下是我到目前为止的情况:

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

b是块数组:
          public static ArrayList b = new arrayList(); id 1是驾驶舱瓷砖。这是驾驶舱瓷砖供参考:

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() {

}

}

3 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:1)

看起来您正在将块存储在列表中,在这种情况下,惯用的方法是使用Stream API

public boolean containsCockpit(List<Block> blocks) {
    return blocks.stream().anyMatch(x -> x.id == 1);
}

这也适用于Block数组:

public boolean containsCockpit(Block[] blocks) {
    return Arrays.stream(blocks).anyMatch(x -> x.id == 1);
}

如果您使用的是Java 7或更早版本,则必须迭代块:

public boolean containsCockpit(Block[] blocks) {
    for(Block b : blocks)
        if(b.id == 1)
            return true;
    return false;
}

答案 2 :(得分:-1)

尝试

Arrays.binarySearch(将intArr,searchVal);

其中intArr是数组的名称,searchVal是您要搜索的值

相关问题