Altklausur SS 2007

zwieback-dude
Neuling
Neuling
Beiträge: 10
Registriert: 28. Aug 2008 23:47

Altklausur SS 2007

Beitrag von zwieback-dude »

Hallo,

ich hab mal ne Frage zur Aufgabe 4.

Code: Alles auswählen

DList(Object info) {
   this.info = info;   
   this.next = this;   //darf man das schreiben? ist dann mit this das aktuelle DList gemeint?
   this.prev = this;
}

void insert(DList o) {   //Die Methode soll das Objekt o an der nächsten Stelle einfügen.. ist das Objekt o nun vom Typ DList oder Object??
   o.next = this.next.next;
   o.prev = this;
   o.next.prev = this;
   this.next = o;
}
Stimmt das einigermaßen? Bei der Methode insert bin ich mir ziemlich unsicher..
Grüße,
dude

Benutzeravatar
Bjoern
Mausschubser
Mausschubser
Beiträge: 53
Registriert: 1. Nov 2007 08:39
Wohnort: Darmstadt
Kontaktdaten:

Re: Altklausur SS 2007

Beitrag von Bjoern »

Hi,

Dein Konstruktor ist soweit in Ordnung, das darfst du so schreiben. Mit this ist die gerade neu erstellte Instanz von DList gemeint, also löst du so die Aufgabe wie gefordert (das Element hat sich selbst als Vorgänger und Nachfolger)
Ausgehend vom ersten Teil der Aufgabe, in der in die Liste ja ein Object gespeichert werden sollte, dürfte der Methodenkopf der insert-Methode so aussehen:

Code: Alles auswählen

public void insert(Object o) { ... }
Das würde bedeuten, deine Methode insert wird so nicht funktionieren. Die Aufgabenstellung ist da aber wirklich nicht gut formuliert.
insert könnte bspw. so aussehen (a ist das alte nachfogeelement, n das neu eingefügte element:

Code: Alles auswählen

public void insert(Object o) {
     DList a = this.next;
     DList n = new DList(o);
     n.next = a;
     n.prev = this;
     a.prev = n;
     this.next = n;
}
Gruß,
Björn
Und mit den Worten "Learning by doing" packte der ETler in die Steckdose.

zwieback-dude
Neuling
Neuling
Beiträge: 10
Registriert: 28. Aug 2008 23:47

Re: Altklausur SS 2007

Beitrag von zwieback-dude »

Danke!! Wenn ich noch Fragen hab, meld ich mich noch mal.

zwieback-dude
Neuling
Neuling
Beiträge: 10
Registriert: 28. Aug 2008 23:47

Re: Altklausur SS 2007

Beitrag von zwieback-dude »

Ok, hier kommt schon die nächste Frage. Darf ich um auf das übernächste Element zuzugreifen ein Befehl wie Beispiel a) benutzen oder muss ich das so umständlich machen wie in b)?

Code: Alles auswählen

a)
DList uebernaechster = this.next.next;    

b)
DList naechster = this.next;
DList uebernaechster = naechster.next;
Grüße,
dude

Benutzeravatar
Bjoern
Mausschubser
Mausschubser
Beiträge: 53
Registriert: 1. Nov 2007 08:39
Wohnort: Darmstadt
Kontaktdaten:

Re: Altklausur SS 2007

Beitrag von Bjoern »

Methode a ist absolut in Ordnung. Manchmal kann es aber trotzdem Sinn machen, eine neue Variable einzuführen, um die Lesbarkeit zu erhöhen.
Und mit den Worten "Learning by doing" packte der ETler in die Steckdose.

zwieback-dude
Neuling
Neuling
Beiträge: 10
Registriert: 28. Aug 2008 23:47

Re: Altklausur SS 2007

Beitrag von zwieback-dude »

Ok! Hab noch ne Frage(oder mehr) zur Aufgabe 5. Hier mal der Code..

Code: Alles auswählen

a)
public abstract class Fahrzeug {
   public abstract int radanzahl();
   private int sitze;

   public int getSitzeAnzahl() {
      return sitze;
   }
   
   public void setSitzAnzahl(int sitze) {
      this.sitze = sitze;
   }
}
b)
public interface HatMotor {
   public double ps();
}

c)
public class PKW extends Fahrzeug
                         implements HatMotor {
   public int radanzahl() {
      return 4;
   }

   public double ps(double PS) {   //ist die Anzahl der PS hier variabel?
      return PS;
   }
}
Bei der c) bin ich mir noch nicht so sicher.. die Anzahl der Sitze soll ja auch variabel sein, aber die Methode habe ich ja schon in der abstrakten Klasse Fahrzeug implementiert. Muss ich die Methode dann in der Klasse PKW noch mal erwähnen oder wird die ganz normal vererbt? Soweit wäre die c) glaube ich dann auch komplett.

Zur d)

Code: Alles auswählen

public PKW(int PS, int sitze) {
   double ps(PS);
   setSitzAnzahl(sitze);    
}

Benutzeravatar
Bjoern
Mausschubser
Mausschubser
Beiträge: 53
Registriert: 1. Nov 2007 08:39
Wohnort: Darmstadt
Kontaktdaten:

Re: Altklausur SS 2007

Beitrag von Bjoern »

die c) ist so auch nicht richtig: du musst die abstrakte Methode ps genau mit dem selben Methodenkopf definieren:

Code: Alles auswählen

public double ps() { ... }
, also kannst du hier nicht noch einen Wert übergeben (was eh nicht wirklich Sinn macht). Die Anzahl der PS sollst du in der Klasse PKW als double speichern:

Code: Alles auswählen

public class PKW extends Fahrzeug implements HatMotor {
   private double PS;
   public int radanzahl() {
      return 4;
   }
   public double ps() {
      return PS;
   }
}
Die implementierten Methoden aus der abstrakten Klasse werden vererbt, du sollst sie laut Aufgabenstellung auch nicht noch einmal überschreiben.

Dein Konstruktor müsste jetzt auch etwas anders aussehen, etwa so:

Code: Alles auswählen

public PKW(double PS, int sitze) {
   this.PS = PS;
   setSitzAnzahl(sitze);    
}
Man könnte bei der Aufgabenstellung als "nötige Methode" der Ordentlichkeit halber auch noch eine setPS Methode schreiben und diese dann auch im Konstruktor nutzen. Nötig ist es aber nicht.
Und mit den Worten "Learning by doing" packte der ETler in die Steckdose.

Boros
Neuling
Neuling
Beiträge: 2
Registriert: 25. Jul 2008 01:26

Re: Altklausur SS 2007

Beitrag von Boros »

bei diser aufgabe 5
>> Musst nicht die Klasse PKW eher : public abstrakt class PKW extends Fahrzeug implement Fahrzeug sein ?
da diese klasse die abstrakte klasse Fahrzeug mit der abstrakte methode public abstrakt int radanzahl(); erweitert und aus diesem Grund dann also abstrakt ?

Benutzeravatar
Bjoern
Mausschubser
Mausschubser
Beiträge: 53
Registriert: 1. Nov 2007 08:39
Wohnort: Darmstadt
Kontaktdaten:

Re: Altklausur SS 2007

Beitrag von Bjoern »

Hallo,

also implements Fahrzeug kann schon nicht sein, da es kein Interface Fahrzeug gibt. Ich denk aber mal, hier hast du dich nur vertippt, also zu deiner abstract-Frage:
Aufgabenstellung Aufgabe 5 hat geschrieben:Implementieren Sie auch alle notwendigen Methoden. Methoden die geerbt werden können sollen nicht überschrieben werden.
Du sollst also in der Klasse PKW noch die Methode radanzahl implementieren, wie ich es im Vorschlag oben ja auch gemacht habe. Diese Methode ist dann nicht abstrakt, warum sollte die Klasse abstrakt sein?

Gruß,
Björn
Und mit den Worten "Learning by doing" packte der ETler in die Steckdose.

sheme
Neuling
Neuling
Beiträge: 7
Registriert: 24. Mai 2008 15:39

Re: Altklausur SS 2007

Beitrag von sheme »

Hi ich hänge an der 6:

Code: Alles auswählen

public static Set schnelleAutos(Map autos){
        Set fast = new HashSet();
        
        for(Iterator it = autos.keySet().iterator();it.hasNext();){
            if(((PKW)it.next()).ps()>=100.00)
                fast.add(it.next());
            }
            return fast;
        }    
mein erstes Problem der Typcast nach PKW im if geht nicht ich denk mal weil ich vorher mit keySet() nur die keys übergeben habe hab aber im monet kein bessere idee.
ob das mit der add methode so geht bin ich mir auch nicht sicher aber kanns leider nicht testen da der typecast fehler schon vorher auftritt. :shock:

Benutzeravatar
Bjoern
Mausschubser
Mausschubser
Beiträge: 53
Registriert: 1. Nov 2007 08:39
Wohnort: Darmstadt
Kontaktdaten:

Re: Altklausur SS 2007

Beitrag von Bjoern »

Probier zuerst mal aus, ob mit dieser Klammerung der Fehler verschwindet, dann gucken wir mal weiter ^^

Code: Alles auswählen

if( ((PKW) (it.next())).ps() <= 100.0 ) { ... }
Außerdem fehlt bei dir eine geschweifte Klammer.
Und mit den Worten "Learning by doing" packte der ETler in die Steckdose.

sheme
Neuling
Neuling
Beiträge: 7
Registriert: 24. Mai 2008 15:39

Re: Altklausur SS 2007

Beitrag von sheme »

hmm gibt den gleichen Fehler

ClassCastException
java.lang.String cannot be cast to PKW

sheme
Neuling
Neuling
Beiträge: 7
Registriert: 24. Mai 2008 15:39

Re: Altklausur SS 2007

Beitrag von sheme »

So würde es übrigens gehn aber dann gibt er mir ja die ps zahlen aus und nicht die autonummern.

Code: Alles auswählen

public static Set schnelleAutos(Map autos){
        Set fast = new HashSet();
        
        for(Iterator it = autos.values().iterator();it.hasNext();){
            PKW x = (PKW) it.next();
            if(x.ps()>=100.00)
                fast.add(x);
            }
            return fast;
        }    

Benutzeravatar
Bjoern
Mausschubser
Mausschubser
Beiträge: 53
Registriert: 1. Nov 2007 08:39
Wohnort: Darmstadt
Kontaktdaten:

Re: Altklausur SS 2007

Beitrag von Bjoern »

Also, ich kann dir ja mal meine Lösung geben, das sollte eigentlich klappen...
EDIT: Methode ist falsch, bitte weiter unten gucken!

Code: Alles auswählen

public static Set schnelleAutos(Map autos) {
        Iterator it = autos.keySet().iterator();
        HashSet ret = new HashSet();
        while (it.hasNext()) {
            String key = (String) it.next();
            if (((Double) autos.get(key)).doubleValue() >= 100.0) {
                ret.add(key);
            }
        }
        return ret;
}
Zuletzt geändert von Bjoern am 2. Sep 2008 21:58, insgesamt 2-mal geändert.
Und mit den Worten "Learning by doing" packte der ETler in die Steckdose.

Stao
Mausschubser
Mausschubser
Beiträge: 60
Registriert: 12. Feb 2008 20:54

Re: Altklausur SS 2007

Beitrag von Stao »

Bjoern hat geschrieben:Also, ich kann dir ja mal meine Lösung geben, das sollte eigentlich klappen...

Code: Alles auswählen

public static Set schnelleAutos(Map autos) {
        Iterator it = autos.keySet().iterator();
        HashSet ret = new HashSet();
        while (it.hasNext()) {
            String key = (String) it.next();
            if (((Double) autos.get(key)).doubleValue() >= 100.0) {
                ret.add(key);
            }
        }
        return ret;
}
Bjoern dein Type Cast zu Double in der If Bedingung ist mir nicht ganz klar.
So wie ich die Aufgabe verstanden habe soll die Map autos aus Autonummern bestehen die die keys darstellen
und aus PKW Objekten, welche die values darstellen. Du versuchst in deiner Methode ein PKW Object zu einem Double zu casten, was aber meiner Ansicht nach nicht möglich ist.


meine Methode sieht so aus und funktioniert.






Code: Alles auswählen

public static Set schnelleAutos (Map autos) {
        
        Set res = new HashSet();
        Set bla = autos.keySet();
        Iterator ble = bla.iterator();
        while(ble.hasNext()) {
            Object depp = ble.next();
            if( ((PKW)(autos.get(depp))).ps() >= 100) { 
                res.add(depp); 
            }
        }
        return res;
    }

Antworten

Zurück zu „Archiv“