den größten Raum finden

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • den größten Raum finden

    Ich soll im Informatikunterricht eine Mathode programmieren, die den Raum mit der größten Fläche von einem Gebäude ausgibt. Ich komme aber überhaupt nciht weiter und hab inzwischen das Gefühl, dass alles falsch ist. Also bis jetzt hab ich drei Klassen, laube aber, dass für mein problem nur zwei von Relevanz sind.

    Gebäude:

    public class Gebäude
    {
    private int gebäudenummer;
    private int baujahr;
    private int anzahlDerRäume;
    private double maximum;
    private int maxraum;
    Raum[] räumeDesGebäudes;


    public Gebäude(int p_gebäudenummer, int p_baujahr, int p_anzahlDerRäume)
    {
    gebäudenummer=p_gebäudenummer;
    baujahr=p_baujahr;
    anzahlDerRäume=p_anzahlDerRäume;
    räumeDesGebäudes=new Raum[p_anzahlDerRäume+1];
    }
    public void fügeRaumhinzu(int p_raumnummer, double p_raumgröße, boolean p_smartboard, int p_anzahlDerTische)
    {
    anzahlDerRäume=anzahlDerRäume+1;
    new Raum(p_raumnummer, p_raumgröße, p_smartboard, p_anzahlDerTische);
    }
    public void bestimmeRaumMitGrößterFläche()
    {
    double maximum=räumeDesGebäudes[1].getRaumgröße();
    for (int i=1; i<anzahlDerRäume;i++)
    if (räumeDesGebäudes.getRaumgröße()<räumeDesGebäudes[i+1].getRaumgröße())
    {
    maximum=räumeDesGebäudes[i+1].getRaumgröße();
    }
    maxraum=1;
    for (int k=0; k<anzahlDerRäume;k++)
    if (räumeDesGebäudes[k].getRaumgröße()==maximum)
    {
    k=maxraum;
    }
    System.out.println("Raum "+räumeDesGebäudes[maxraum]+" hat die größte Fläche.");
    }
    }


    Raum:

    public class Raum
    {
    private int raumnummer;
    private double raumgröße;
    private boolean smartboard;
    private int anzahlDerTische;
    Klasse[] raumbenutzendeKlassen=new Klasse[25];

    public Raum(int p_raumnummer, double p_raumgröße, boolean p_smartboard, int p_anzahlDerTische)
    {
    raumnummer=p_raumnummer;
    raumgröße=p_raumgröße;
    smartboard=p_smartboard;
    anzahlDerTische=p_anzahlDerTische;
    }
    public int getRaumnummer()
    {
    return raumnummer;
    }
    public double getRaumgröße()
    {
    return raumgröße;
    }
    public boolean smartboardVorhaben()
    {
    return smartboard;
    }
    }


    und Klasse:

    public class Klasse
    {
    private String bezeichner;
    private int anzahlDerSchüler;

    public Klasse(String p_bezeichner, int p_anzahlDerSchüler)
    {
    bezeichner=p_bezeichner;
    anzahlDerSchüler=p_anzahlDerSchüler;
    }
    public String getbezeichner()
    {
    return bezeichner;
    }
    }

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von sophiajmrn ()

  • Abgesehen davon dass das nichts mit Extremwerten zu tun hat... ;)

    Also erst mal würd ich dir gern den Ratschlag geben, für jede for-Schleife einen neuen Block mit {} zu bilden, sowas verursacht oft Fehler nach denen man stundenlang sucht.
    Also mit deiner Methode bestimmeRaumMitGrößterFläche() hast du den richtigen Ansatz gewählt, allerdings mit ein paar kleinen Fehlern:
    • Du fängt mit dem Index 1 an zu zählen, das erste Element hat allerdings den Index 0
    • Du musst in der ersten for-Schleife überprüfen, ob der Raum mit dem aktuellen Index i größer ist als der bislang größte gefundene Raum
    • Die zweite for-Schleife kannst du dir sparen, indem du dir in der ersten Schleife gleich den größten Raum merkst
    • Du hängst am Ende ein Objekt an den Ausgabestring an, da wirst du keine sinnvolle Ausgabe erhalten - stattdessen solltest du z.B. die Raumnummer ausgeben (oder alternativ die Methode toString() in der Klasse Raum überschreiben)


    So sollte dann deine Methode am Ende ungefähr aussehen:

    Quellcode

    1. public void bestimmeRaumMitGrößterFläche() {
    2. Raum maximum=räumeDesGebäudes[0];
    3. for (int i=0; i<anzahlDerRäume;i++) {
    4. if (maximum.getRaumgröße() < räumeDesGebäudes[i].getRaumgröße()) {
    5. maximum = räumeDesGebäudes[i];
    6. }
    7. }
    8. System.out.println("Raum " + maximum.getRaumnummer() + " hat die größte Fläche mit " + maximum.getRaumgröße() + ".");
    9. }


    Liebe Grüße
    Stefan

    //EDIT:
    Ich hab grad noch gesehen, dass du beim Hinzufügen eines Raums zwar einen neuen Raum erzeugst, diesen aber nicht zu deinem Array hinzufügst. Ausserdem musst du dir merken, wieviele Räume du aktuell schon hinzugefügt hast, damit du weißt welchem Index du den neu erzeugten Raum zugewiesen hast. Dafür würde ich die Variable anzahlDerRäume nutzen. Im Konstruktor musst du dieser Variable dann allerdings den Wert 0 zuweißen, der Parameter p_anzahlDerRäume im Konstruktor wird dann nur noch zum initialisieren des Arrays verwendet (das heißt hier musst du dann die maximale Anzahl der Räume übergeben, die dem Gebäude hinzugefügt werden können.
    Dein Konstruktor sähe dann folgendermaßen aus:

    Quellcode

    1. public Gebäude(int p_gebäudenummer, int p_baujahr, int p_anzahlDerRäume) {
    2. gebäudenummer=p_gebäudenummer;
    3. baujahr=p_baujahr;
    4. anzahlDerRäume=0;
    5. räumeDesGebäudes=new Raum[p_anzahlDerRäume];
    6. }


    Hinzufügen von Räumen:

    Quellcode

    1. public void fügeRaumhinzu(int p_raumnummer, double p_raumgröße, boolean p_smartboard, int p_anzahlDerTische)
    2. {
    3. Raum raum = new Raum(p_raumnummer, p_raumgröße, p_smartboard, p_anzahlDerTische);
    4. räumeDesGebäudes[anzahlDerRäume] = raum;
    5. anzahlDerRäume++;
    6. }

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von Stef ()