Auf Thema antworten

Die Klasse Schacht. Sie hat eine id - den Identifier - dazu bekommen.


[code=Java]package forumProblems.Rohrnetz.MitNamen;


public class Schacht {


    private String id;

    private double xKoordinate;

    private double yKoordinate;

    private double zKoordinate;

    private double durchmesser;

    private double tiefe;

    private double zulaufmenge;


    public Schacht(String id, double xKoordinate, double yKoordinate,

            double zKoordinate, double durchmesser, double tiefe,

            double zulaufmenge) {

        this.id = id;

        this.xKoordinate = xKoordinate;

        this.yKoordinate = yKoordinate;

        this.zKoordinate = zKoordinate;

        this.durchmesser = durchmesser;

        this.tiefe       = tiefe;

        this.zulaufmenge = zulaufmenge;

    }


    public String getId() {

        return id;

    }


    public double getxKoordinate() {

        return xKoordinate;

    }


    public double getyKoordinate() {

        return yKoordinate;

    }


    public double getzKoordinate() {

        return zKoordinate;

    }


    public double getDurchmesser() {

        return durchmesser;

    }


    public double getTiefe() {

        return tiefe;

    }


    public double getZulaufmenge() {

        return zulaufmenge;

    }


}

[/code]


Die Klasse Haltung. Sie hat eine id - den Identifier - dazu bekommen. Außerdem sind Anfangs- und Endpunkt nun keine Indices mehr, sondern die IDs der Schächte, die die Haltung verbindet.


[code=Java]package forumProblems.Rohrnetz.MitNamen;


public class Haltung {


    private String id;

    private int durchmesser;

    private String anfangspunkt;

    private String endpunkt;


    public Haltung(String id, int durchmesser, String anfangspunkt,

            String endpunkt) {

        this.id = id;

        this.durchmesser = durchmesser;

        this.anfangspunkt = anfangspunkt;

        this.endpunkt = endpunkt;

    }


    public String getId() {

        return id;

    }


    public int getDurchmesser() {

        return durchmesser;

    }


    public String getAnfangspunkt() {

        return anfangspunkt;

    }


    public String getEndpunkt() {

        return endpunkt;

    }


}

[/code]


Das Rohrnetz ohne verwirrende Dinge, wie ich hoffe, dafür mit Abfragen, ob man eine schon vorhandene ID nochmal ablegen will:


[code=Java]package forumProblems.Rohrnetz.MitNamen;


import java.util.HashMap;

import java.util.Map;


public class Rohrnetz {

    private Map<String, Schacht> schaechte;

    private Map<String, Haltung> haltungen;


    public Rohrnetz() {

        schaechte = new HashMap<String, Schacht>();

        haltungen = new HashMap<String, Haltung>();

    }


    public void neuerSchacht(Schacht schacht) {

        String id = schacht.getId();

        if (schaechte.containsKey(id)) {

            throw new RuntimeException("Schacht mit der id " + id

                    + " schon vorhanden!");

        }

        schaechte.put(id, schacht);

    }


    public void neueHaltung(Haltung haltung) {

        String id = haltung.getId();

        if (haltungen.containsKey(id)) {

            throw new RuntimeException("Haltung mit der id " + id

                    + " schon vorhanden!");

        }

        haltungen.put(id, haltung);

    }


    public void print() {

        System.out.println("Rohrnetz:");

        for (Haltung haltung : haltungen.values()) {

            System.out.println("Haltung " + haltung.getId() + " verbindet Schacht "

                    + haltung.getAnfangspunkt() + " mit "

                    + haltung.getEndpunkt() + ".");

        }

    }


}

[/code]


Und schließlich die angepasste Testklasse:


[code=Java]package forumProblems.Rohrnetz.MitNamen;


public class RohrnetzTest {


    public static void main(String[] args) {

        Rohrnetz rohrnetz = new Rohrnetz();


        /* Schächte anlegen: */

        Schacht s1 = new Schacht("S001", 0, 0, 0, 0.5, 20, 50);

        Schacht s2 = new Schacht("S002", 25, 30, 0, 0.5, 10, 50);

        Schacht s3 = new Schacht("S003", 10, 25, 0, 0.5, 30, 50);

        rohrnetz.neuerSchacht(s1);

        rohrnetz.neuerSchacht(s2);

        rohrnetz.neuerSchacht(s3);


        /* Haltungen anlegen: */

        Haltung h1 = new Haltung("H001", 55,  "S001",  "S002");

        Haltung h2 = new Haltung("H002", 66,  "S002",  "S003");

        rohrnetz.neueHaltung(h1);

        rohrnetz.neueHaltung(h2);


        /* Verbindungen im Rohrnetz ausgeben: */

        rohrnetz.print();

    }


}[/code]


Die Ausgabe ist schlicht:


[CODE]Rohrnetz:

Haltung H002 verbindet Schacht S002 mit S003.

Haltung H001 verbindet Schacht S001 mit S002.

[/CODE]



Würde man in der Testklasse statt H002 nochmal H001 einfügen, bekämen wir einen schönen Fehler:


[CODE]Exception in thread "main" java.lang.RuntimeException: Haltung mit der id H001 schon vorhanden!

    at forumProblems.Rohrnetz.MitNamen.Rohrnetz.neueHaltung(Rohrnetz.java:27)

    at forumProblems.Rohrnetz.MitNamen.RohrnetzTest.main(RohrnetzTest.java:20)

[/CODE]



Oben