Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import java.util.*;
- import java.util.concurrent.TimeUnit;
- class Zentrale
- {
- ArrayList<District> dliste = new ArrayList<District>();
- ArrayList<Fahrer> fliste = new ArrayList<Fahrer>();
- Zentrale(){}
- public void addDistrict(District d)
- {
- dliste.add(d);
- }
- public void addFahrer(Fahrer f)
- {
- fliste.add(f);
- }
- public boolean checkDistrict(String name)
- {
- for (District d: dliste)
- {
- if (d.dname.equals(name)) return true;
- }
- return false;
- }
- public District getDistrictByName(String name)
- {
- District r = new District("error");
- for (District d: dliste)
- {
- if (d.dname.equals(name))
- {
- r = d;
- break;
- }
- }
- return r;
- }
- public void printDliste()
- {
- for (District d: dliste)
- {
- System.out.println("-" + d.getDname());
- for (Fahrer bote: d.vorhandeneBoten)
- {
- long[] warten = bote.getWarten(d.u.getSekunden(), d.u.getMinuten());
- System.out.println(" |-" + bote.getName() +
- "\t - wartet seit " + warten[1] + "min : " + warten[0] + "sek");
- }
- }
- }
- public void closeAllDistricts()
- {
- for (District d: dliste)
- {
- d.u.stopUhr();
- }
- }
- }
- public class District
- {
- Uhr u = new Uhr();
- String dname;
- Deque<Fahrer> vorhandeneBoten = new LinkedList<Fahrer>();
- District (String name)
- {
- this.dname = name;
- u.start();
- }
- public String getDname(){return dname;}
- public void arrive(Fahrer f)
- {
- boolean eingetroffen = vorhandeneBoten.offerLast(f);
- if (eingetroffen)
- {
- String zeit = "Um " + u.getMinuten() + " Minuten und " + u.getSekunden() + " Sekunden ist ";
- System.out.println(zeit + f.getName() + " in " + dname + " eingetroffen");
- f.setWarten(u.getSekunden(), u.getMinuten());
- }
- }
- public void help(Fahrer f)
- {
- boolean eingetroffen = vorhandeneBoten.offerFirst(f);
- if (eingetroffen)
- {
- String zeit = "Um " + u.getMinuten() + " Minuten und " + u.getSekunden() + " Sekunden ist ";
- System.out.println(zeit + f.getName() + " in " + dname + " eingetroffen - durch Auslastung -");
- f.setWarten(u.getSekunden(), u.getMinuten());
- }
- }
- public boolean job(District d)
- {
- if (vorhandeneBoten.size() == 0)
- {
- String zeit = "Um " + u.getMinuten() + " Minuten und " + u.getSekunden() + " Sekunden, Auftrag ohne Fahrer in ";
- System.out.println(zeit + dname);
- return false;
- }
- else
- {
- Fahrer f = vorhandeneBoten.poll();
- String zeit = "Um " + u.getMinuten() + " Minuten und " + u.getSekunden() + " Sekunden, fährt ";
- System.out.println(zeit + f.getName() + " von " + dname + " nach " + d.getDname());
- d.arrive(f);
- }
- return true;
- }
- public void auslasten(District d)
- {
- if (vorhandeneBoten.size() > 0)
- {
- Fahrer f = vorhandeneBoten.poll();
- String zeit = "Um " + u.getMinuten() + " Minuten und " + u.getSekunden() + " Sekunden, fährt ";
- System.out.println(zeit + f.getName() + " von " + dname + " nach " + d.getDname());
- d.help(f);
- }
- }
- public static void main(String[] args)
- {
- Scanner einlesen = new Scanner(System.in);
- String eingabe;
- boolean keepGoing = true;
- Fahrer fritz = new Fahrer("fritz");
- Fahrer sabiene = new Fahrer("sabiene");
- Fahrer kurt = new Fahrer("kurt");
- Fahrer horst = new Fahrer("horst");
- District italien = new District("italien");
- District deutschland = new District("deutschland");
- District osterreich = new District("osterreich");
- Zentrale tower = new Zentrale();
- tower.addDistrict(italien);
- tower.addDistrict(deutschland);
- tower.addDistrict(osterreich);
- tower.addFahrer(fritz);
- tower.addFahrer(sabiene);
- tower.addFahrer(kurt);
- tower.addFahrer(horst);
- italien.arrive(fritz);
- italien.arrive(sabiene);
- italien.arrive(kurt);
- deutschland.arrive(horst);
- tower.printDliste();
- while (keepGoing)
- {
- System.out.println("\n\n print | job | auslasten | ende");
- eingabe = einlesen.next();
- if (eingabe.equals("print"))
- {
- tower.printDliste();
- }
- else if(eingabe.equals("job"))
- {
- System.out.println("- Quelle Distrikt");
- eingabe = einlesen.next();
- if (tower.checkDistrict(eingabe))
- {
- District origin = tower.getDistrictByName(eingabe);
- System.out.println("- Ziel Distrikt");
- eingabe = einlesen.next();
- if (tower.checkDistrict(eingabe))
- {
- District destination = tower.getDistrictByName(eingabe);
- origin.job(destination);
- }
- }
- }
- else if(eingabe.equals("auslasten"))
- {
- System.out.println("- Quelle Distrikt");
- eingabe = einlesen.next();
- if (tower.checkDistrict(eingabe))
- {
- District origin = tower.getDistrictByName(eingabe);
- System.out.println("- Ziel Distrikt");
- eingabe = einlesen.next();
- if (tower.checkDistrict(eingabe))
- {
- District destination = tower.getDistrictByName(eingabe);
- origin.auslasten(destination);
- }
- }
- }
- else if (eingabe.equals("ende"))
- {
- tower.closeAllDistricts();
- keepGoing = false;
- }
- }
- }
- }
- class Fahrer
- {
- private String name;
- private long wartenSekunden = 0;
- private long wartenMinuten = 0;
- Fahrer(String name)
- {
- this.name = name;
- }
- public String getName(){return name;}
- public void setWarten(long sekunden, long minuten)
- {
- wartenSekunden = sekunden;
- wartenMinuten = minuten;
- }
- public long[] getWarten(long sekundenOffset, long minutenOffset)
- {
- long sek = sekundenOffset - wartenSekunden;
- long min = minutenOffset - wartenMinuten;
- long[] warten = {sek, min};
- return (warten);
- }
- }
- class Uhr extends Thread
- {
- boolean go = true;
- long sekunden = 0;
- long minuten = 0;
- Uhr(){}
- public void stopUhr() { go = false; }
- public long getSekunden() { return sekunden; }
- public long getMinuten() { return minuten; }
- public void run()
- {
- while (go)
- {
- sekunden++;
- if (sekunden % 60 == 0) minuten++;
- try
- {
- TimeUnit.SECONDS.sleep(1);
- }
- catch (InterruptedException e)
- {
- e.printStackTrace();
- }
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement