Uni Aufgabe lösen


lui96

Grünschnabel
#1
Hallo Leute,

ich studiere derzeit im 2ten Semester Informatik und hänge momentan an dieser Aufgabe:

Aufgabe 2 (Garage)
Nun legen wir im Paket de.hsrm.mi.autogarage.garage eine Klasse Garage an, die die Anzahl der Stellpla ̈tze als Konstruktorparameter erwartet. Anfangs sind die Stellpla ̈tze alle unbelegt (null). Sie sind ab Null durchnumeriert, eine Garage mit 17 Stellpla ̈tzen hat also Pla ̈tze Nr. 0, 1, 2, . . . , 16.
Versehen Sie Ihre Garage bitte nun mit folgenden Methoden:
• int einparken(Auto a) stellt das u ̈bergebene Auto auf dem ersten freien Platz (beginnend von vorne, also Platz 0) ab und liefert die Platznummer als Ergebnis. Falls kein Platz frei ist, ist das Ergebnis -1.
• Nun mo ̈chte man auch noch nach einem bestimmten Auto suchen. Die u ̈berladene MethodesucheAuto() hilft dabei:
  • – int sucheAuto(String Kennzeichen) liefert den Platz des Autos mit dem u ̈bergebenen Kennzei- chen.
  • – int sucheAuto(Auto a) liefert die Platznummer eines Autos “gleich dem u ̈bergebenen”.
  • – int sucheAuto(Person besitzer) liefert die Platznummer des Autos, das besitzer
    gehört


  • Falls die Suche nicht erfolgreich war, wird stets -1 zurückgegeben.
    • Auto ausparken(int platznr) entfernt das Auto vom Stellplatz platznr, markiert den Platz als unbelegt und gibt das Auto-Objekt zuru ̈ck.
    • int zaehleFreiePlaetze() gibt die Anzahl der unbelegten (null) Stellpla ̈tze zuru ̈ck
    Wie Sie bemerkt haben, hat Garage keine toString-Methode. Manchmal mo ̈chte man aber gerne mal in die Garage hineinschauen, um (wa ̈hrend des Programmablaufs) ihren aktuellen Zustand zu sehen und das Programmverhalten nachvollziehen zu ko ̈nnen.
    Die gute Nachricht: Auch JUnit-Tests lassen sich in Eclipse debuggen. Von der JUnit-Testausfu ̈hrung wissen Sie, in welcher Testmethode ein Fehler entdeckt wurde.
    Sie ko ̈nnen dort direkt einen Breakpoint setzen, den Test erneut mit dem Debugger ausfu ̈hren und dann z.B. dem Garage-Objekt gleich in seine Innereien schauen. Bitte u ̈ben Sie so etwas unabha ̈ngig von einer konkreten Aufgabe laufend, eine ordentliche Beherrschung des Debuggers spart Ihnen u ̈ber das ganze Studium gerechnet sehr viel Zeit.


gegeben ist diese Klasse

Garage_einparken_ausparken

Java:
package de.hsrm.mi.autogarage.tests;

import static org.junit.Assert.*;

import org.junit.Test;

import de.hsrm.mi.autogarage.auto.Auto;
import de.hsrm.mi.autogarage.garage.Garage;

public class A2_a_Garage_einparken_ausparken {

    @Test
    public void testGarage() {
        Garage g = new Garage(17);
    }

    @Test
    public void testEinparken() {
        Garage g = new Garage(10);
        
        for (int i=0; i<10; i++) {
            int platz = g.einparken(new Auto("KA-VI 10"+i));
            assertEquals(i, platz);
        }
    }

    @Test
    public void testEinparkenGarageVoll() {
        final int PLAETZE = 10;
        Garage g = new Garage(PLAETZE);
        
        for (int i=0; i<PLAETZE; i++) {
            int platz = g.einparken(new Auto("KA-VI 10"+i));
            assertEquals(i, platz);
        }
        int keinPlatz = g.einparken(new Auto("HH-AB 6482"));
        assertEquals(-1, keinPlatz);
    }
    @Test
    public void testAusparken() {
        Garage g = new Garage(10);
        int platz0 = g.einparken(new Auto("PLA-TZ 0"));
        
        Auto auto1 = new Auto("PLA-TZ 1");
        int platz1 = g.einparken(auto1);
        int platz2 = g.einparken(new Auto("PLA-TZ 2"));
        
        Auto ausgeparkt = g.ausparken(1);
        assertSame(auto1, ausgeparkt);
        
        int neu1 = g.einparken(new Auto("NEU-AUF 1"));
        assertEquals(1, neu1);
        
        int neu3 = g.einparken(new Auto("NEU-AUF 3"));
        assertEquals(3, neu3);
    }

}

Mein Code ist noch am Anfang, wenn man das so sagen kann.. denn ich habe nämlich keine Ahnung, wie ich weiter machen soll.
Soll man die Garagenstellplätze als Array übergeben, oder wie soll das sein?

hier ist mein ‚Code‘..

Java:
package de.hsrm.mi.autogarage.garage;

import de.hsrm.mi.autogarage.auto.Auto;
import de.hsrm.mi.autogarage.person.Person;

public class Garage {
    
    private int platz;
    private int[] plaetze;
    private int i;

    
    public Garage(int platz) {
        this.platz = platz;
        
        
    plaetze = new int [17];
    

    if(command.length > 17) {
        System.out.println("kein platz");
    }
}
    
    
    public int einparken(Auto a) {
        return plaetze[i];
    }
    
    public int sucheAuto(String kennzeichen) {
        return plaetze[i].getKennzeichen();
    }
    
    public int sucheAuto(Auto a) {
        return Auto;
    }
    
    public int sucheAuto(Person besitzer) {
        return plaetze[i].besitzer;
    }
    
    

    
    }

vielleicht hat der ein oder andere von euch ein paar Tipps für mich, so, dass ich die Aufgabe evtl besser verstehe.
Mir ist bewusst, dass mir hier keiner die Lösung codiert und das ist auch gut so, hoffe dennoch auf Hilfe.

Die Aufgabe 1 und damit verbundenen Klassen wie bspw Person oder Auto, habe ich schon geschrieben.

Ich danke euch schonmal herzlich!!

LG
 

lui96

Grünschnabel
#2
Das gehört übrigens zu den überladenen Methoden, ist schon gegeben:

Java:
package de.hsrm.mi.autogarage.tests;

import static org.junit.Assert.*;

import org.junit.Test;

import de.hsrm.mi.autogarage.auto.Auto;
import de.hsrm.mi.autogarage.garage.Garage;
import de.hsrm.mi.autogarage.person.Datum;
import de.hsrm.mi.autogarage.person.Person;

public class A2_b_Garage_suche {

    private void fuellmal(Garage g, int plaetze, int jederNte) {
        for (int i=0; i<plaetze; i+=jederNte) {
            Person pers = new Person("Name"+i, new Datum(1+i, 1+i%12, 1980+17*i));
            Auto auto = new Auto(String.format("U-DE %03d", i));
            auto.setBesitzer(pers);
            auto.setTuevDatum(new de.hsrm.mi.autogarage.auto.Datum(1+i%12, 1980+12*i));
            pers.setAuto(auto);
            g.einparken(auto);
        }
    }

    @Test
    public void testSucheAutoString() {
        Garage g = new Garage(20);
        fuellmal(g, 17, 2);
        g.ausparken(2);
        
        int platz3 = g.sucheAuto("U-DE 006");
        assertEquals(3, platz3);
        
        int platz6 = g.sucheAuto("U-DE 012");
        assertEquals(6, platz6);       
    }

    @Test
    public void testSucheAutoAuto() {
        Garage g = new Garage(20);
        fuellmal(g, 20, 3);
        int platz3 = g.sucheAuto(new Auto("U-DE 009"));
        assertEquals(3, platz3);
        
        int platz4 = g.sucheAuto("U-DE 012");
        assertEquals(4, platz4);
    }

    @Test
    public void testSucheAutoPerson() {
        Garage g = new Garage(20);
        fuellmal(g, 21, 4);
        int platz2 = g.sucheAuto(new Person("Name8", new Datum(9,9,2116)));
        assertEquals(2, platz2);
        
        int platz5 = g.sucheAuto(new Person("Name20", new Datum(21,9,2320)));
        assertEquals(5, platz5);
    }
}
 

zerix

Hausmeister
Moderator
#3
Hallo,

ohne jetzt zu viel zu verraten, deine Klasse muss zu den Aufrufen in der gegebenen Klasse passen. Das heißt, es wird eine Klasse Garage verwendet, die im Konstruktor die Anzahl der Plätze bekommt (10,17,PLAETZE). Anhand dieser Variable musst du dann im Konstruktor ein Array anlegen mit den Stellplätzen.

Viele Grüße
Sascha
 

lui96

Grünschnabel
#4
Hallo,

ohne jetzt zu viel zu verraten, deine Klasse muss zu den Aufrufen in der gegebenen Klasse passen. Das heißt, es wird eine Klasse Garage verwendet, die im Konstruktor die Anzahl der Plätze bekommt (10,17,PLAETZE). Anhand dieser Variable musst du dann im Konstruktor ein Array anlegen mit den Stellplätzen.

Viele Grüße
Sascha

Danke!

Ich steh dennoch auf dem Schlauch, hab mich jetzt erstmal nur mit dem Konstruktor beschäftigt und bin mir nicht sicher, denn mir wird es als Failure angezeigt: „expected 0 but was 10“..

wie binde ich das array denn in die Methode einparken mit ein, sodass die autos nacheinander einparken können und mir die parkplatznr ausgegeben wird :(

Java:
package de.hsrm.mi.autogarage.garage;

import de.hsrm.mi.autogarage.auto.Auto;

public class Garage {
    
    private int plaetze;
    private Auto kennzeichen;
    
    
    public Garage(int plaetze) {
        this.plaetze = plaetze;
        
    int [] platz = new int [17];
    for(int i = 0; i < platz.length; i++) {
        if(platz[i] == 0) {
            platz[i] = i; }
        else {
            platz[i] = -1; }
            
        }
    }
        

    public int einparken(Auto a) {
        
        return plaetze;
        
    }
    
//    public Auto ausparken(int platznr) {
    
//        return Auto;

//}

    
    }
 

zerix

Hausmeister
Moderator
#5
Du hast schon verstanden, was ich gesagt habe, oder? :p
Deine Klasse Garage bekommen die Anzahl der Parkplätze übergeben, du legst aber weiterhin fest 17 Plätze an, statt dich nach der gewünschen Anzahl zu richten.
 

Neue Beiträge