2016-10-09 3 views
1

Я делаю веб-сервер, который генерирует контрольные плитки. Изображения на java.Как сделать разницу между 2 ArrayLists

Класс, который моделирует корректор:

package app.app.image; 


import app.app.image.iterate.ImageElementVisitorInterface; 
import app.app.image.tiles.Tile; 

import java.awt.*; 
import java.util.ArrayList; 
import org.apache.commons.collections4.CollectionUtils; 


/** 
* Created by pcmagas on 5/10/2016. 
* 
* Methos that Implements a Checkerboard with multiple color tiles 
*/ 
public class Checker implements ImageElement 
{ 

    /** 
    * The tiles that can be used to Draw the checker 
    */ 
    private ArrayList<Tile> availableTiles=null; 

    /** 
    * The grid where the tiles are drawn 
    */ 
    private Tile[][] checkerGrid=null; 



    /** 
    * The checker width 
    */ 
    private int width=0; 

    /** 
    * The checker Height 
    */ 
    private int height=0; 

    private int tileSize=0; 

    /** 
    * Creates a new Checker 
    * @param width the checker's width 
    * @param height the checker's height 
    */ 
    public Checker(int width, int height) 
    { 
     availableTiles= new ArrayList<Tile>(); 

     this.setHeight(height); 
     this.setWidth(width); 
    } 

    /** 
    * @param height The checker's height 
    */ 
    public void setHeight(int height) 
    { 
     this.height=height; 
    } 

    /** 
    * @return The checker's height 
    */ 
    public int getHeight() 
    { 
     return this.height; 
    } 

    /** 
    * Seth the tile width 
    * @param width 
    */ 
    public void setWidth(int width) 
    { 
     this.width=width; 
    } 

    /** 
    * Returns how wide is the tile 
    * @return 
    */ 
    public int getWidth() 
    { 
     return this.width; 
    } 

    /** 
    * Method that Allows us to append a tile to the Checker 
    */ 
    public void addTile(Tile t) throws Exception 
    { 
     if(this.tileSize >0 && t.getSize()!= this.tileSize) 
     { 
      throw new Exception("The tile does not have the same size with the orthers"); 
     } 
     else if(!this.availableTiles.contains(t)) 
     { 
      this.availableTiles.add(t); 
      this.tileSize=t.getSize(); 
     } 
    } 


    /** 
    * Method that initializes the grid for the checker 
    */ 
    private void initGrid() 
    { 
     if(this.checkerGrid==null) 
     { 
      int width = this.width/this.tileSize; 
      int height = this.height/this.tileSize; 

      this.checkerGrid=new Tile[height][width]; 
     } 
    } 

    /** 
    * Method that selects a tile during the grid generation 
    * @param top The tile that is on top of the current tile 
    * @param previous The tile that is on previously from the current tile 
    * 
    * @return The correctly selected tile 
    */ 
    private Tile selectTile(Tile top,Tile previous) 
    { 
     ArrayList<Tile> tilesNotToUse=new ArrayList<Tile>(); 

     if(top==null) 
     { 
      tilesNotToUse.add(top); 
     } 

     if(previous==null) 
     { 
      tilesNotToUse.add(previous); 
     } 

     //TODO: Create a diff Between this.availableTiles and tilesNotToUse 
     return new Tile(Color.black,10,this); 
    } 

    @Override 
    public void draw(ImageElementVisitorInterface visitor) 
    { 
     this.initGrid(); 

     for(int i=0;i<this.checkerGrid.length;i++) 
     { 
      for(int j=0;j<this.checkerGrid[i].length;j++) 
      { 
       Tile top=(i>0)?this.checkerGrid[i-1][j]:null; 
       Tile previous=(j>0)?this.checkerGrid[i][j-1]:null; 

       Tile currentTile=this.selectTile(top,previous); 
       this.checkerGrid[i][j]= currentTile; 

       currentTile.draw(visitor); 
      } 
     } 

    } 

} 

Пожалуйста, у меня есть некоторые делать-не-знаю-горячей к делу об этом методе:

/** 
* Method that selects a tile during the grid generation 
* @param top The tile that is on top of the current tile 
* @param previous The tile that is on previously from the current tile 
* 
* @return The correctly selected tile 
*/ 
private Tile selectTile(Tile top,Tile previous) 
{ 
    ArrayList<Tile> tilesNotToUse=new ArrayList<Tile>(); 

    if(top==null) 
    { 
     tilesNotToUse.add(top); 
    } 

    if(previous==null) 
    { 
     tilesNotToUse.add(previous); 
    } 


    //TODO: Create a diff Between this.availableTiles and tilesNotToUse 
    return new Tile(Color.black,10,this); 
} 

И я хочу сделать разница между this.availableTiles и tilesNotToUse. Я видел CollectionUtils, но я не могу понять, как это сделать. Я хочу получить аналогичный результат с php's http://php.net/manual/en/function.array-diff.php

+2

Название вашего вопроса: «Должен ли случайный генератор быть локальной переменной внутри метода или переменной экземпляра?» но я не вижу ничего связанного с случайными генераторами внутри вашего вопроса. Как так? –

+0

Это был предыдущий вопрос, не заданный вопросом. Спасибо, что указали это, –

ответ

2

Вы можете использовать list1.removeAll (list2); Java Docs Таким образом, ваш список1 будет иметь только то, что принадлежит списку1, а не list2. И наоборот, если хочешь.

 Смежные вопросы

  • Нет связанных вопросов^_^