package skyline; /** * Voorstelling van een skyline. * Het is NIET toegelaten bestaande methodes en/of signaturen te wijzigen, maar * het staat je vrij naar behoefte methodes en velden toe te voegen. * @author Timbermont Bouke **/ public class Skyline implements Comparable { /** * Array met coordinaten van de skyline. * Deze array bestaat uit een reeks van x-coordinaten en * de hoogtes die ze verbinden, gerangschikt van links naar * rechts. **/ protected final int [] coords; /** * Creatie van een nieuwe instantie van Skyline * bestaande uit 1 enkel gebouw * @param left linkse positie van het gebouw * @param height hoogte van het gebouw * @param right rechtse positie van het gebouw **/ public Skyline(int left,int height,int right) { this(new int [] {left,height,right,0}); } public Skyline(Building building) { this(new int[] {building.getLeft(),building.getHeight(),building.getRight(),0}); } /** * Creatie van een nieuwe instantie van Skyline; het argument * wordt niet gekopieerd en mag dus niet gewijzigd worden!! * @param coords array met coordinaten van de skyline **/ public Skyline(int [] coords) { this.coords = coords; // ! referentie wordt geregistreerd. } /** * Statische methode die een merge doet van twee skylines. * !! Merk hierbij op dat de twee skylines die als parameter * van de methode meegegeven worden door het aanroepen van deze * methode niet mogen gewijzigd worden. * @param skyLine1 de eerste skyline * @param skyLine2 de tweede skyline * @return de merge van de twee skylines **/ public static Skyline merge(Skyline skyline1, Skyline skyline2){ int[] newCoords = new int[skyline1.coords.length + skyline2.coords.length]; int s1=0,s2=0; for(int i=0;i=skyline1.coords.length||s2>=skyline2.coords.length){ if(s1>=skyline1.coords.length){ newCoords[i]=skyline2.coords[s2]; s2+=2; }else{ newCoords[i]=skyline1.coords[s1]; s1+=2; } }else{//einde if 1 if(skyline1.coords[s1] skyline.coords[i]) return 1; } if (coords.length < skyline.coords.length) return -1; else if (coords.length > skyline.coords.length) return 1; else return 0; } }