Register for your free account! | Forgot your password?

Go Back   elitepvpers > Coders Den > General Coding
You last visited: Today at 02:02

  • Please register to post and access all features, it's quick, easy and FREE!

Advertisement



[Java] Kennt Beziehungen in Reihe?!

Discussion on [Java] Kennt Beziehungen in Reihe?! within the General Coding forum part of the Coders Den category.

Reply
 
Old   #1
 
Belur's Avatar
 
elite*gold: 0
Join Date: Jul 2009
Posts: 3,441
Received Thanks: 1,473
[Java] Kennt Beziehungen in Reihe?!

Hey E*pvpers.

Habe zu folgendem Beispielquelltext ein Problem:

PHP Code:
/**
 * Write a description of class Buecherkeller here.
 * 
 * @author (your name) 
 * @version (a version number or a date)
 */
public class Buecherkeller
{
    public 
Buch erstesBuch;

    
/**
     * Constructor for objects of class Buecherkeller
     */
    
public Buecherkeller()
    {
        
erstesBuch = new Buch("0"0,0);

    }

    public 
void neuesBuch(String titelint jahrint buchnummer){

        
Buch neuesBuch = new Buch(titeljahrbuchnummer);

        
erstesBuch.nachfolger neuesBuch;
     
        
    }



Erstelle ich weitere Bücher, verweißt das erste Buch immer auf das letzte erstellte. Die anderen sind dann weg O.o Ja mir ist klar warum aber ich weiß nicht wie ich mein eigentliches Ziel erreiche:


Möchte das eig so haben, dass das erste auf das zweite, das zweite auf das dritte, das dritte auf das vierte Buch etc verweißt.

Weiß leider nicht genau wies umsetzbar ist.

Hoffe mir kann jmd helfen.

~Belur
Belur is offline  
Old 11/11/2011, 19:39   #2
 
elite*gold: 115
Join Date: Oct 2007
Posts: 9,390
Received Thanks: 12,344
Du kannst deine Liste in einer Schleife einfach durchgehen, bis du auf ein Buch ohne Nachfolger stößt. Ich habe keine Ahnung von Java, aber in C würde das in etwa so aussehen:

Code:
Buch diesesBuch = erstesBuch;      /* gehe an den Anfang der Bücherliste */
while (diesesBuch.nachfolger)      /* gehe die Liste so lange durch bis das letzte Buch (= kein Nachfolger) gefunden wurde */
    diesesBuch = diesesBuch.nachfolger;
diesesBuch.nachfolger = neuesBuch; /* füge neues Buch an das Ende der Liste hinzu */
ms​ is offline  
Thanks
1 User
Old 11/12/2011, 00:12   #3


 
MrSm!th's Avatar
 
elite*gold: 7110
Join Date: Jun 2009
Posts: 28,904
Received Thanks: 25,394
In Java nicht viel anders, nur dass man nen Zeiger nicht einfach so in nen Bool konvertieren kann :P Man müsse halt while ... != null schreiben.

Aber warum verweist ein Buch auf seinen Nachfolger? oO Das ist kein sehr schönes Design, da würde sich eine Linked-List viel mehr anbieten, in die man dann die Buch-Objekte einfügt.
MrSm!th is offline  
Thanks
1 User
Old 11/12/2011, 00:23   #4
 
elite*gold: 115
Join Date: Oct 2007
Posts: 9,390
Received Thanks: 12,344
Quote:
Originally Posted by MrSm!th View Post
Aber warum verweist ein Buch auf seinen Nachfolger? oO Das ist kein sehr schönes Design, da würde sich eine Linked-List viel mehr anbieten, in die man dann die Buch-Objekte einfügt.
Das ist eine Linked List. ;O
ms​ is offline  
Thanks
1 User
Old 11/12/2011, 11:38   #5


 
MrSm!th's Avatar
 
elite*gold: 7110
Join Date: Jun 2009
Posts: 28,904
Received Thanks: 25,394
Ist es nicht, weil die Bücher etwas davon wissen.
Eine Linked-List wäre eine Liste, in die man die Bücher einfügt und dieses ganze Nachfolgergedöns übernehmen Wrapper Klassen (oft Knoten genannt), sodass die eigene Klasse davon nichts wissen muss.

Hier hat er nun die Klasse Buch, welches aber gleichzeitig noch seinen Nachfolger kennt, was weder designtechnisch schön ist noch der Realität wirklich entspricht, was ja möglichst bei einem OO Design der Fall sein soll.
MrSm!th is offline  
Thanks
1 User
Old 11/12/2011, 12:20   #6
 
xNopex's Avatar
 
elite*gold: 0
Join Date: May 2009
Posts: 827
Received Thanks: 471
Quote:
aber in C würde das in etwa so aussehen:

Code:

Buch diesesBuch = erstesBuch; /* gehe an den Anfang der Bücherliste */
while (diesesBuch.nachfolger) /* gehe die Liste so lange durch bis das letzte Buch (= kein Nachfolger) gefunden wurde */
diesesBuch = diesesBuch.nachfolger;
diesesBuch.nachfolger = neuesBuch; /* füge neues Buch an das Ende der Liste hinzu */
Die Liste ist eine rekursive Datenstruktur, deswegen wird man sie nicht iterativ durchlaufen.

Quote:
Aber warum verweist ein Buch auf seinen Nachfolger? oO Das ist kein sehr schönes Design
Bei ihm wird die Datenstruktur wahrscheinlich gerade eingeführt, da wird das üblicherweise so gelehrt. Später wird das weiter abstrahiert und dann über ein Interface die eigentlichen Daten von den "Knoten" getrennt.

B2T:
Du hast zwei Klassen. Die eine hat nur! eine Referenz auf das erste Element der Liste. Die andere Klasse sind die Elemente der Liste und haben jeweils eine Referenz nur! auf ihren Nachfolger. Willst du ein Element hinten in der Liste einfügen rennst du rekursiv durch und lässt dein letztes Element ein neues Element erstellen und setzt den als neuen Nachfolger fest. That's it.


EDIT:
Evtl. so:
Code:
public class Buecherkeller{
    public Buch erstesBuch;

    public Buecherkeller(){
        erstesBuch = new Buch("0", 0,0);
    }

    public void neuesBuch(String titel, int jahr, int buchnummer){

        Buch newBook = new Buch(titel, jahr, buchnummer);
        if(erstesBuch != null){
            erstesBuch.neuesBuch(newBook);
        }
     }
}

public class Buch{
    private Buch nachfolger;
    //...ctor etc. mal weggelassen
    public void neuesBuch(Buch neu){
        if(nachfolger == null){
            nachfolger = neu;
        }else{
            nachfolger.neuesBuch(neu);
        }
    }
}
Habs ausm Kopf geschrieben, können fehler drinnen sein. Und mit Kompositum wärs natürlich noch schöner, aber das würde das Maß an der Stelle sprengen.
xNopex is offline  
Thanks
2 Users
Reply


Similar Threads Similar Threads
[JAVA Error] Could not create the java virtual machine
07/21/2013 - Technical Support - 10 Replies
Schönen Abend! Leider hat es sich aus einem unerfindlichen Grund ergeben, dass sobald ich die Minecraft.exe starten will die Errormeldung kommt. Die Tips auf Minecraft.net habe ich schon ohne Erfolg befolgt. Hoffe ihr könnt mir weiterhelfen... Mein PC:
Finder-Reihe
06/24/2011 - AutoIt - 0 Replies
Hi, mein Freund hat die Finder-Reihe gecoded! So könnt ihr zum Beispiel eure Mac-Adresse in 20 Sekunden ansehen, ohne lästige Sucherei! Oder ihr erfahrt sofort ob eure IP umgeändert wurde nach dem Online-Banking um euch vor Hacker zu schützen!!! Virustotalscan von DataFinder.exe|0/42
[Java] Could not create the Java virtual machine
06/22/2011 - Minecraft - 1 Replies
hallo ihr minecraftler ^^ habe seit heute das problem das wenn ich minecraft starte original als auch cracked das diese fehlermeldung kommt: Java virtual machine Launcher Could not create the Java virtual machine



All times are GMT +2. The time now is 02:02.


Powered by vBulletin®
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
SEO by vBSEO ©2011, Crawlability, Inc.
This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.

Support | Contact Us | FAQ | Advertising | Privacy Policy | Terms of Service | Abuse
Copyright ©2024 elitepvpers All Rights Reserved.