M Winda/src/winda/logic/AlgorytmGoraDol.java Poprawiona wersja algorytmu

This commit is contained in:
Przemek Grondek 2011-04-13 06:57:47 +00:00
parent 1c4a2c25f0
commit b71315453d

View file

@ -1,8 +1,3 @@
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package winda.logic; package winda.logic;
import java.util.ArrayList; import java.util.ArrayList;
@ -12,6 +7,9 @@ import sun.misc.Sort;
/** /**
* Algortym poruszania się windą przy wsiadaniu pasażerów * Algortym poruszania się windą przy wsiadaniu pasażerów
* jadących tylko w kierunku w którym porusza się winda. * jadących tylko w kierunku w którym porusza się winda.
*
* Napisane nie testowane
*
* @author Przemo * @author Przemo
*/ */
public class AlgorytmGoraDol implements IAlgorytm { public class AlgorytmGoraDol implements IAlgorytm {
@ -23,6 +21,12 @@ public class AlgorytmGoraDol implements IAlgorytm {
public AlgorytmGoraDol(){ public AlgorytmGoraDol(){
this.start_floor = 0; this.start_floor = 0;
this.floor_count = 0;
}
public AlgorytmGoraDol(int floor_count){
this.start_floor = 0;
this.floor_count = floor_count;
} }
public AlgorytmGoraDol(int floor_count, int start_floor){ public AlgorytmGoraDol(int floor_count, int start_floor){
@ -50,13 +54,14 @@ public class AlgorytmGoraDol implements IAlgorytm {
Sort.quicksort(array.toArray(), null); Sort.quicksort(array.toArray(), null);
} }
private void goUp(){ private void goUp(int to){
int i =0; int i =0;
ArrayList<Integer> tmp = new ArrayList<Integer>(); ArrayList<Integer> tmp = new ArrayList<Integer>();
while(this.pasazerowie[i].GetStart()<this.acctual_floor) while(this.pasazerowie[i].GetStart()<this.acctual_floor)
i++; i++;
while(i<this.pasazerowie.length) while(i<this.pasazerowie.length)
if(this.pasazerowie[i].GetStart()<this.pasazerowie[i].GetStop()){ if( this.pasazerowie[i].GetStart()<this.pasazerowie[i].GetStop()&&
this.pasazerowie[i].GetStart()<to){
if(tmp.contains(this.pasazerowie[i].GetStart())) if(tmp.contains(this.pasazerowie[i].GetStart()))
tmp.add(this.pasazerowie[i].GetStart()); tmp.add(this.pasazerowie[i].GetStart());
if(tmp.contains(this.pasazerowie[i].GetStop())) if(tmp.contains(this.pasazerowie[i].GetStop()))
@ -66,6 +71,31 @@ public class AlgorytmGoraDol implements IAlgorytm {
this.floors.addAll(tmp); this.floors.addAll(tmp);
} }
private ArrayList<Integer> sortDown(ArrayList<Integer> array){
Sort.quicksort(array.toArray(), null);
ArrayList<Integer> tmp = new ArrayList();
for(int i= (array.size()-1);i>=0;i--)
tmp.add(array.get(i));
return tmp;
}
private void goDown(int to){
int i =0;
ArrayList<Integer> tmp = new ArrayList<Integer>();
while(this.pasazerowie[i].GetStart()<this.acctual_floor)
i++;
while(i<this.pasazerowie.length)
if( this.pasazerowie[i].GetStart()>this.pasazerowie[i].GetStop()&&
this.pasazerowie[i].GetStart()>to){
if(tmp.contains(this.pasazerowie[i].GetStart()))
tmp.add(this.pasazerowie[i].GetStart());
if(tmp.contains(this.pasazerowie[i].GetStop()))
tmp.add(this.pasazerowie[i].GetStop());
}
tmp = this.sortDown(tmp);
this.floors.addAll(tmp);
}
public int[] setCourse(){ public int[] setCourse(){
this.floors = new ArrayList<Integer>(); this.floors = new ArrayList<Integer>();
floors.add(this.start_floor); floors.add(this.start_floor);
@ -74,6 +104,20 @@ public class AlgorytmGoraDol implements IAlgorytm {
sort.sortByStart(); sort.sortByStart();
this.acctual_floor = this.start_floor; this.acctual_floor = this.start_floor;
/* Jeżeli winda jest poniżej połowy */
if((this.floor_count/2)>this.acctual_floor){
this.goDown(0);
this.goUp(this.floor_count);
this.goDown(this.start_floor);
}
else{
this.goUp(0);
this.goDown(this.floor_count);
this.goUp(this.start_floor);
}
int []ret = new int[floors.size()]; int []ret = new int[floors.size()];
for(int i=0;i<floors.size();i++) for(int i=0;i<floors.size();i++)
ret[i] = floors.get(i).intValue(); ret[i] = floors.get(i).intValue();
@ -86,10 +130,11 @@ public class AlgorytmGoraDol implements IAlgorytm {
} }
public void SetMaxPietro(int maxPietro) { public void SetMaxPietro(int maxPietro) {
this.setFloorCount(maxPietro); this.setFloorCount(floor_count);
} }
public List<Pietro> Trasa(List<Pasazer> pasazerowie) { public List<Pietro> Trasa(List<Pasazer> pasazerowie) {
throw new UnsupportedOperationException("Not supported yet."); throw new UnsupportedOperationException("Not supported yet.");
} }
} }