Advertisement
Guest User

Miniprojekt3

a guest
Dec 3rd, 2016
70
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 13.75 KB | None | 0 0
  1.  
  2. public class Miniprojekt3 {
  3.    
  4.     public void zeigeSkigebiet(Station[] skigebiet) {
  5.         // Gib das ganze Skigebiet zeilenweise in Textform aus. Durchlaufe hierfür das Array
  6.         // skigebiet und gib für jede Station alle dort ausgehenden Liftverbindung (Array lifte) und
  7.         // alle dort ausgehenden Pisten (Array pisten) mit ihrem jeweiligen Ziel aus.
  8.         //
  9.         // KEINE BEWERTUNG DURCH JACK
  10.          // Bitte ersetzen Sie diese Zeile durch Ihre Lösung!
  11.         System.out.println("*** Gesamtes Skigebiet ***");
  12.         for (int x = 0; x < skigebiet.length; x++){
  13.             System.out.println(skigebiet[x].name + ": ");
  14.             if (skigebiet[x].lifte != null){
  15.                 for (int i = 0; i < skigebiet[x].lifte.length; i++){
  16.                     System.out.println(" " + skigebiet[x].lifte[i].name + " --> " + skigebiet[x].lifte[i].ziel.name + "   ");
  17.                 }
  18.             }
  19.             if (skigebiet[x].pisten != null){
  20.                 for (int i = 0; i < skigebiet[x].pisten.length; i++){
  21.                     System.out.println(" " + skigebiet[x].pisten[i].name + " --> " + skigebiet[x].pisten[i].ziel.name + "   ");
  22.                 }
  23.             }
  24.         }
  25.     }
  26.    
  27.     public void zeigeRoute(RElement r) {
  28.         // Gib zeilenweise alle Lifte und Pisten auf der Route r in der gegebenen Reihenfolge aus.
  29.         //
  30.         // KEINE BEWERTUNG DURCH JACK
  31.         // Bitte ersetzen Sie diese Zeile durch Ihre Lösung!
  32.         while (r != null){
  33.             if (r.lift != null){
  34.                 System.out.println(r.lift.name);
  35.             }
  36.             if (r.piste != null){
  37.                 System.out.println(r.piste.name);
  38.             }
  39.             r = r.nF;
  40.         }
  41.     }
  42.    
  43.     public int offeneLifte(Station[] skigebiet) {
  44.         // Zähle, wie viele derzeit offene Lifte es im Skigebiet gibt und liefere
  45.         // diesen Wert zurück.
  46.         int zaehler = 0;
  47.        
  48.         for (int i = 0; i < skigebiet.length; i++){
  49.             if (skigebiet[i].lifte != null){
  50.                 for (int j = 0; j < skigebiet[i].lifte.length; j++){
  51.                     if (skigebiet[i].lifte[j].status == true){
  52.                         zaehler++;
  53.                     }
  54.                 }
  55.             }
  56.         }
  57.         return zaehler; // Bitte ersetzen Sie diese Zeile durch Ihre Lösung!
  58.     }
  59.    
  60.     public int pistenMeter(Station[] skigebiet) {
  61.         // Liefere die insgesamt vorhandenen Pistenmeter im Skigebiet (unabhängig davon, ob
  62.         // die Pisten gesperrt oder offen sind).
  63.         int laenge = 0;
  64.        
  65.         for (int i = 0; i < skigebiet.length; i++){
  66.             if (skigebiet[i].pisten != null){
  67.                 for (int j = 0; j < skigebiet[i].pisten.length; j++){
  68.                     laenge += skigebiet[i].pisten[j].laenge;
  69.                 }
  70.             }
  71.         }
  72.        
  73.         return laenge; // Bitte ersetzen Sie diese Zeile durch Ihre Lösung!
  74.     }
  75.    
  76.     public int verbrauchtePunkte(RElement r) {
  77.         // Liefere die auf der Route r verbrauchten Liftpunkte.
  78.         int zaehler = 0;
  79.        
  80.         while (r != null){
  81.             if (r.lift != null){
  82.                 zaehler += r.lift.punkte;
  83.             }
  84.             r = r.nF;
  85.         }
  86.         return zaehler; // Bitte ersetzen Sie diese Zeile durch Ihre Lösung!
  87.     }
  88.    
  89.     public char maxFarbe(RElement r) {
  90.         // Liefere die auf der Route r maximal vorkommende Pisten-Schwierigkeit, entsprechend
  91.         // ihrer Farbe: b)lau = leicht, r)ot = mittel, s)chwarz = schwer.
  92.         // Hinweis: Da 'b' im Alphabet vor 'r' kommt und 'r' vor 's', können Sie die
  93.         // Vergleichsoperatoren <, >, = für den character-Wert "farbe" genau wie beim Vergleich
  94.         // von Zahlen verwenden!
  95.         char ergebnis = 'X';
  96.        
  97.         while (r != null){
  98.             if (r.piste != null && ergebnis < r.piste.farbe){
  99.                 ergebnis = r.piste.farbe;
  100.             }
  101.             r = r.nF;
  102.         }
  103.         return ergebnis; // Bitte ersetzen Sie diese Zeile durch Ihre Lösung!
  104.     }
  105.    
  106.     public int maxHoehe(RElement r) {
  107.         // Liefere die maximal auf der Route r erreichte Höhe ALS DIFFERENZ VOM START DER ROUTE AUS
  108.         // GEMESSEN.
  109.         // Achtung: Dieser Wert hängt sowohl von den gefahrenen Pisten als auch von den benutzten
  110.         // Liften ab!
  111.         int zaehler = 0;
  112.         RElement kopf = r;
  113.        
  114.         while (r != null){
  115.             if (r.piste != null){
  116.                 zaehler++;
  117.             }
  118.             if (r.lift != null){
  119.                 zaehler++;
  120.             }
  121.             r = r.nF;
  122.         }
  123.         int[] hoehe = new int [zaehler + 1];
  124.         zaehler = 1;
  125.         r = kopf;
  126.        
  127.         while (r != null){
  128.             if (r.piste != null){
  129.                 hoehe[zaehler] += hoehe[zaehler - 1] + r.piste.hdiff;
  130.                 zaehler++;
  131.                 //System.out.println(r.piste.hdiff);
  132.             }
  133.             if (r.lift != null){
  134.                 //System.out.println(r.lift.hdiff);
  135.                 hoehe[zaehler] += hoehe[zaehler - 1] + r.lift.hdiff;
  136.                 zaehler++;
  137.             }
  138.             r = r.nF;
  139.         }
  140.         int ergebnis = hoehe[0];
  141.        
  142.         for (int i = 0; i < hoehe.length; i++){
  143.                 if (ergebnis < hoehe[i]){
  144.                     ergebnis = hoehe[i];
  145.                 }
  146.         }
  147.         return ergebnis; // Bitte ersetzen Sie diese Zeile durch Ihre Lösung!
  148.     }
  149.    
  150.     public int anzahlHuetten(RElement r) {
  151.         // Liefere die Anzahl aller auf der Route r erreichten Hütten.
  152.         // Bitte beachten Sie:
  153.         // *) Die Startstation kann ignoriert werden.
  154.         // *) Wenn die Route an einer bereits zuvor erreichten Hütte erneut vorbeiführt,
  155.         //    treten Mehrfachzählungen auf. Das ist im Kontext dieser Aufgabe ok!
  156.         int zaehler = 0;
  157.        
  158.         while (r != null){
  159.             if (r.piste != null && r.piste.ziel.huette == true){
  160.                 zaehler++;
  161.             }
  162.             if (r.lift != null && r.lift.ziel.huette == true){
  163.                 zaehler++;
  164.             }
  165.             r = r.nF;
  166.         }
  167.         return zaehler; // Bitte ersetzen Sie diese Zeile durch Ihre Lösung!
  168.     }
  169.    
  170.     public boolean parallelePistenVon(Station s) {
  171.         // Prüfe, ob es von Station s AUSGEHEND mindestens zwei Pisten mit gleichem Ziel gibt.
  172.         if (s.pisten != null){
  173.             for (int i = 0; i < s.pisten.length; i++){
  174.                 for (int j = 0; j < s.pisten.length; j++){
  175.                     if (s.pisten[i].ziel == s.pisten[j].ziel && i != j){
  176.                         return true;
  177.                     }
  178.                 }
  179.             }
  180.         }
  181.         return false; // Bitte ersetzen Sie diese Zeile durch Ihre Lösung!
  182.     }
  183.    
  184.     public boolean keinLiftAbwaertsZu(Station[] skigebiet, Station s) {
  185.         // Liefert true, wenn kein zu Station s HINFÜHRENDER Lift abwärts geht (hdiff < 0).
  186.         boolean vergleich = true;
  187.        
  188.         for (int i = 0; i < skigebiet.length; i++){
  189.             if ( skigebiet[i].lifte != null ){
  190.                 for (int j = 0; j < skigebiet[i].lifte.length; j++){
  191.                     if (skigebiet[i].lifte[j].ziel == s){
  192.                         if (skigebiet[i].lifte[j].hdiff < 0){
  193.                             vergleich = false;
  194.                             break;
  195.                         }
  196.                     }
  197.                 }
  198.             }
  199.         }
  200.        
  201.         return vergleich; // Bitte durch Ihre Lösung ersetzen!
  202.     }
  203.    
  204.     public boolean hatAnfaengerRoute(Station s) {
  205.         // Liefert true, falls es von Station s ausgehend einen Lift gibt, an dessen Ziel
  206.         // eine blaue Piste beginnt, die wiederum direkt zu s zurückführt ODER umgekehrt.
  207.         boolean checkRoute = false;
  208.        
  209.         if (s.pisten != null){
  210.             for (int i = 0; i < s.pisten.length; i++){
  211.                 if (s.pisten[i].farbe == 'b'){
  212.                     if (s.pisten[i].ziel.lifte != null){
  213.                         for (int j = 0; j < s.pisten[i].ziel.lifte.length; j++){
  214.                             if (s.pisten[i].ziel.lifte[j].ziel == s){
  215.                                 checkRoute = true;
  216.                                 break;
  217.                             }
  218.                         }
  219.                     }
  220.                 }
  221.             }
  222.         }
  223.        
  224.         if (s.lifte != null){
  225.             for (int i = 0; i < s.lifte.length; i++){
  226.                 if (s.lifte[i].ziel.pisten != null){
  227.                     for (int j = 0; j < s.lifte[i].ziel.pisten.length; j++){
  228.                         if (s.lifte[i].ziel.pisten[j].ziel == s && s.lifte[i].ziel.pisten[j].farbe == 'b'){
  229.                             checkRoute = true;
  230.                             break;
  231.                         }
  232.                     }
  233.                 }
  234.             }
  235.         }
  236.  
  237.         return checkRoute; // Bitte ersetzen Sie diese Zeile durch Ihre Lösung!
  238.     }
  239.    
  240.     public int befahrbarBis(RElement r) {
  241.         // Liefere die Anzahl der Pistenmeter, bis zu der die Route r befahrbar (also nicht
  242.         // gesperrt) ist.
  243.         int meterzaehler = 0;
  244.        
  245.         while (r != null){
  246.             if (r.piste != null){
  247.                 if (r.piste.status == true){
  248.                     meterzaehler += r.piste.laenge;
  249.                 }
  250.             }
  251.             r = r.nF;
  252.         }
  253.        
  254.         return meterzaehler; // Bitte ersetzen Sie diese Zeile durch Ihre Lösung!
  255.     }
  256.    
  257.     public boolean sindDisjunkt(RElement r1, RElement r2) {
  258.         // Liefere true, falls die beiden Routen r1 und r2 disjunkt sind, d. h. kein Lift sowohl
  259.         // in r1 und r2 vorkommt und keine Piste sowohl in r1 als auch r2 vorkommt.
  260.         boolean checksame = true;
  261.         RElement kopfr2 = r2;
  262.        
  263.         while (r1 != null){
  264.             while (r2 != null){
  265.                 if (r1.piste != null && r2.piste != null && r1.piste.name == r2.piste.name){
  266.                     checksame = false;
  267.                     break;
  268.                 }
  269.                 if (r1.lift != null && r2.lift != null && r1.lift.name == r2.lift.name){
  270.                     checksame = false;
  271.                     break;
  272.                 }
  273.                 r2 = r2.nF;
  274.             }
  275.             r2 = kopfr2;
  276.             r1 = r1.nF;
  277.         }
  278.        
  279.         return checksame; // Bitte ersetzen Sie diese Zeile durch Ihre Lösung!
  280.     }
  281.    
  282.    
  283.        
  284.     public static void main(String[] args) {
  285.         // alle Stationen
  286.         Station sBrixen = new Station("Brixen", false);
  287.         Station sChoralpe = new Station("Choralpe", true);
  288.         Station sFilzboden = new Station("Filzboden", false);
  289.         Station sOberberg = new Station("Oberberg", false);
  290.         Station sZinsberg = new Station("Zinsberg", false);
  291.         Station sSeidlalm = new Station("Seidlalm", true);
  292.        
  293.         // alle Pisten
  294.         Piste pQuerverbindung = new Piste("Querverbindung", 'r', 800, -200, true, sFilzboden);
  295.         Piste pBuckelpiste = new Piste("Buckelpiste", 's', 500, -200, false, sZinsberg);
  296.         Piste pZinsbergAbfahrt = new Piste("Zinsberg-Abfahrt", 'b', 800, -300, false, sChoralpe);
  297.         Piste pSeidlalmAbfahrt = new Piste("Seidlalm-Abfahrt", 'r', 3800, -400, false, sSeidlalm);
  298.         Piste pTalabfahrtMittel = new Piste("Talabfahrt (mittel)", 'r', 4000, -600, true, sBrixen);
  299.         Piste pTalabfahrtLeicht = new Piste("Talabfahrt (leicht)", 'b', 4200, -600, false, sBrixen);
  300.        
  301.         // alle Lifte
  302.         Lift lGondelbahnAuf = new Lift("Gondelbahn (auf)", 30, 1800, 500, false, sChoralpe);
  303.         Lift lGondelbahnAb = new Lift("Gondelbahn (ab)", 30, 1800, -500, true, sBrixen);
  304.         Lift lOberbergLift = new Lift("Oberberg-Lift", 16, 1700, 700, true, sOberberg);
  305.         Lift lZinsbergLift = new Lift("Zinsberg-Lift", 14, 400, 300, false, sZinsberg);
  306.        
  307.         // ausgehende Lifte und Pisten pro Station
  308.         Lift[] alBrixen = new Lift[]{lGondelbahnAuf};
  309.         Piste[] apBrixen = null;
  310.         Lift[] alChoralpe = new Lift[]{lZinsbergLift, lGondelbahnAb};
  311.         Piste[] apChoralpe = new Piste[]{pQuerverbindung};
  312.         Lift[] alZinsberg = null;
  313.         Piste[] apZinsberg = new Piste[]{pZinsbergAbfahrt};
  314.         Lift[] alFilzboden = new Lift[]{lOberbergLift};
  315.         Piste[] apFilzboden = null;
  316.         Lift[] alOberberg = null;
  317.         Piste[] apOberberg = new Piste[]{pBuckelpiste, pSeidlalmAbfahrt};
  318.         Lift[] alSeidlalm = null;
  319.         Piste[] apSeidlalm = new Piste[]{pTalabfahrtMittel, pTalabfahrtLeicht};
  320.        
  321.         // ausgehende Lifte und Pisten für alle Stationen
  322.         Lift[][] ausgLifte = new Lift[][]{alBrixen, alChoralpe, alZinsberg, alFilzboden, alOberberg, alSeidlalm};
  323.         Piste[][] ausgPisten = new Piste[][]{apBrixen, apChoralpe, apZinsberg, apFilzboden, apOberberg, apSeidlalm};
  324.        
  325.         // erstelle Skigebiet als Array aller Stationen und setze ausgehende Lifte und Pisten für jede Station
  326.         Station[] skigebiet = new Station[]{sBrixen, sChoralpe, sZinsberg, sFilzboden, sOberberg, sSeidlalm};
  327.         for (int is = 0; is < skigebiet.length; is++) {
  328.             skigebiet[is].setzeAusgehendeLifte(ausgLifte[is]);
  329.             skigebiet[is].setzeAusgehendePisten(ausgPisten[is]);
  330.         }
  331.        
  332.         // erstelle Miniprojekt
  333.         Miniprojekt3 m = new Miniprojekt3();
  334.        
  335.         // Beispielroute
  336.         RElement r = new RElement(new Piste[]{pZinsbergAbfahrt},
  337.                                   new Lift[]{lGondelbahnAuf, lZinsbergLift, lGondelbahnAb},
  338.                                   new boolean[]{false, false, true, false});
  339.        
  340.         RElement fahrer1 = new RElement(new Piste[]{pBuckelpiste, pZinsbergAbfahrt, pQuerverbindung},
  341.                                         new Lift[]{lOberbergLift},
  342.                                         new boolean[]{false, true, true, true});
  343.        
  344.         RElement fahrer2 = new RElement(new Piste[]{pSeidlalmAbfahrt, pTalabfahrtLeicht},
  345.                                         new Lift[]{},
  346.                                         new boolean[]{true, true});
  347.        
  348.         RElement fahrer3 = new RElement(new Piste[]{pSeidlalmAbfahrt, pTalabfahrtLeicht, pQuerverbindung, pBuckelpiste, pZinsbergAbfahrt},
  349.                                         new Lift[]{lGondelbahnAuf, lGondelbahnAb, lOberbergLift},
  350.                                         new boolean[]{true, true, false, true, false, true, true, false});
  351.  
  352.  
  353.         // An dieser Stelle können Sie unabhängig von JACK Ihre Methoden testen.
  354.         // Anhand der Skizze auf dem Aufgabenblatt sowie den oben in der Klasse Miniprojekt3
  355.         // erstellten Objekten für Lifte, Stationen und Pisten (ergänzen Sie bei Bedarf die
  356.         // Skizze um Höhenangaben etc.) können Sie leicht von Hand ermitteln, welche Ergebnisse
  357.         // Ihre Methoden für bestimmte Parameterwerte liefern müssten.
  358.         //
  359.        
  360.         // Aufgabe 1
  361.         System.out.println("AUFGABE 1: ");
  362.         m.zeigeSkigebiet(skigebiet);
  363.        
  364.         // Aufgabe 2
  365.         System.out.println("\nAUFGABE 2: ");
  366.         m.zeigeRoute(r);
  367.        
  368.         // Aufgabe 3
  369.         System.out.println("\nAUFGABE 3: ");
  370.         System.out.println("Anzahl offener Lifte: " + m.offeneLifte(skigebiet));
  371.        
  372.         // Aufgabe 4
  373.         System.out.println("\nAUFGABE 4: ");
  374.         System.out.println("Gesamte Laenge aller Pisten: " + m.pistenMeter(skigebiet) + "m");
  375.        
  376.         // Aufgabe 5
  377.         System.out.println("\nAUFGABE 5: ");
  378.         System.out.println("Verbrauchte Punke für Liftbenutzung: " + m.verbrauchtePunkte(r));
  379.        
  380.         // Aufgabe 6
  381.         System.out.println("\nAUFGABE 6: ");
  382.         System.out.println("Höchste Pisten Schwierigkeit auf der Route: " + m.maxFarbe(r));
  383.        
  384.         // Aufgabe 7
  385.         System.out.println("\nAUFGABE 7: ");
  386.         System.out.println("Differenz der Höehe: " + m.maxHoehe(r));
  387.        
  388.         // Aufgabe 8
  389.         System.out.println("\nAUFGABE 8: ");
  390.         System.out.println("Anzahl Huetten in der Route: " + m.anzahlHuetten(r));
  391.        
  392.         // Aufgabe 9
  393.         System.out.println("\nAUFGABE 9: ");
  394.         System.out.println("Haben zwei Pisten das gleiche Ziel? : " + m.parallelePistenVon(sSeidlalm));
  395.        
  396.         // Aufgabe 10
  397.         System.out.println("\nAUFGABE 10: ");
  398.         System.out.println("Kein lift Abwärts: " + m.keinLiftAbwaertsZu(skigebiet, sBrixen));
  399.        
  400.         // Aufgabe 11
  401.         System.out.println("\nAUFGABE 11: ");
  402.         System.out.println("Hat Anfängerroute: " + m.hatAnfaengerRoute(sBrixen));
  403.        
  404.         // Aufgabe 12
  405.         System.out.println("\nAUFGABE 12: ");
  406.         System.out.println("Route befahrbar für " + m.befahrbarBis(fahrer2) + "m");
  407.        
  408.         // Aufgabe 13
  409.         System.out.println("\nAUFGABE 13: ");
  410.         System.out.println("Sind beide Routen disjunkt ?: " + m.sindDisjunkt(fahrer1, fahrer2));
  411.     }
  412.  
  413. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement