2015-04-19 3 views
0

Здравствуйте, у меня есть программа, где вы размещаете плитки для строительства домов, а затем продаете дома. Я только хочу продать дома, если у здания есть дверь, по крайней мере, на одно окно. Мой ArrayList выглядит следующим образом:Java, как проверить, содержит ли объект в arraylist определенное значение

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

каждый тип плитки имеет свой идентификатор. дверь плитка 1 и окна плитка 2 и стены плитка 3.

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

} 

Как я могу проверить, если объект в ArrayList содержит определенное значение, в этом случае значение 1.

здесь класс двери:

public class door 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); 

     } 


    } 
} 
+0

Так, если список содержит номера 1 и 2, он может быть продан? –

+0

да, он может быть продан независимо от того, какие числа объекты в arryalist до тех пор, пока два из этих объектов имеют идентификатор 1 и 2 – user3929251

+1

Вы пробовали 'if (list.contains (1) && list.contains (2)) '? –

ответ

1

Это кажется довольно прямо вперед.

Обратите внимание: нет необходимости вводить «id» ... ArrayList хранит сами значения.

Вам просто нужно проверить, если значение размещения индекса в массиве содержит значение, которое вы ищете:

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

Это должно ответить на ваш вопрос, если нет, то это действительно помощь: JArrayLists

Надеюсь, это ответит на ваш вопрос.

Позвольте мне знать о результатах

0

if(play.b.contains(play.b.get(i).id == 1)){ будет оценивать что-то вроде if(play.b.contains(true)){ (или ложным, соответственно). Таким образом, поскольку у вас есть int в вашем ArrayList вы должны изменить код следующее:

cansell = play.b.contains(1); 

вместо этого весь цикл.

0

За обновление в комментариях:

public void canSell() { 
     cansell = play.b.contains(1) && play.b.contains(2); 
    } 

От: Oracle Java Docs on Lists

+0

Если это жизнеспособный подход, вы можете уменьшить его до 'cansell = play.b.contains (1) && play.b.contains (2);'. – Makoto

+0

Ницца! Я даже об этом не думал. Спасибо @ Makoto, я обновил свой ответ с этим. –