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]