user3929251
user3929251

Reputation: 173

How to check if an array contains a certain object?

Hello I have a programme where you place tiles and destroy tiles and then after you build something with the tiles you place you can sell them for money. I only want to be able to sell the tiles if at least one of the tiles is a cockpit tile. Here is what I have so far:

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

b is an array of blocks:
public static ArrayList b = new arrayList(); the id 1 is the cockpit tile. Here is the cockpit tile for reference:

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);

        }
    }
}

here is the play class(its big):

public class play extends screen {

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

}

}

Upvotes: 0

Views: 108

Answers (3)

folkol
folkol

Reputation: 4883

It looks like you are storing the Blocks in a list, in that case the idiomatic way would be to use the Stream API.

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

This also works for Block arrays:

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

If you are using Java 7 or older, you will have to iterate the Blocks:

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

Upvotes: 1

Kuba
Kuba

Reputation: 839

If you are using plain array, the only way to find object inside is to iterate thru the array and compare desired value like you did, or using equals(). If you are looking for more effective way check classes like HashSet and other collections.

Upvotes: 1

Saurabh Jhunjhunwala
Saurabh Jhunjhunwala

Reputation: 2922

Try

Arrays.binarySearch(intArr,searchVal);

where intArr is the name of the array and searchVal is the value you want to search

Upvotes: -1

Related Questions