Vererbung Auslesen von Werten einer ArrayList

P

PhilBauing

Gast
Hallo,

ich habe mich hier angemeldet, da ich ein paar Probleme mit Java habe. Ich studiere Bauingenieurwesen und eines unserer Module ist Ingenieurinformatik. Ich möchte Info gut verstehen und abschließen, da ich mir die Option offen halten will, meinen Master in Computational Engineering zu machen.

So, nun zu dem Problem.

Ich habe eine Klasse "Schacht", welcher mit verschiedenen Attributen gefüllt ist.
------------------------------------------------------------------------------------------------
public class Schacht {
private double x_koordinate;
private double y_koordinate;
private double z_koordinate;
private double durchmesser;
private double tiefe;
private double zulaufmenge;

public Schacht(double x, double y, double z, double d, double t, double zu){
this.setX_koordinate(x);
this.setY_koordinate(y);
this.setZ_koordinate(z);
this.setDurchmesser(d);
this.setTiefe(t);
this.setZulaufmenge(zu);

}

public double getX_koordinate() {
return x_koordinate;
}

public void setX_koordinate(double x_koordinate) {
this.x_koordinate = x_koordinate;
}

public double getY_koordinate() {
return y_koordinate;
}

public void setY_koordinate(double y_koordinate) {
this.y_koordinate = y_koordinate;
}

public double getDurchmesser() {
return durchmesser;
}

public void setDurchmesser(double durchmesser) {
this.durchmesser = durchmesser;
}

public double getTiefe() {
return tiefe;
}

public void setTiefe(double tiefe) {
this.tiefe = tiefe;
}

public double getZulaufmenge() {
return zulaufmenge;
}

public void setZulaufmenge(double zulaufmenge) {
this.zulaufmenge = zulaufmenge;
}

public double getZ_koordinate() {
return z_koordinate;
}

public void setZ_koordinate(double z_koordinate) {
this.z_koordinate = z_koordinate;


}
}
----------------------------------------------------------------------------------------
Außerdem habe ich eine Klasse Rohrnetz, in welcher eine ArrayList mit dem Datentyp Schacht ist.

import inf.v3d.obj.Cylinder;
import inf.v3d.obj.Arrow;
import inf.v3d.view.Viewer;

import java.util.ArrayList;

public class Rohrnetz {
//ArrayList der Schächte
private ArrayList<Schacht> schaechte = new ArrayList<Schacht>();

//Methode um Schacht der ArrayList schaechte zuzufügen
public void neuerSchacht(Schacht s) {
this.schaechte.add(s);

}

public void zeichne(Viewer v) {
for (Schacht s : this.schaechte) {
Cylinder c = new Cylinder(s.getX_koordinate(), s.getY_koordinate(),
s.getZ_koordinate(), s.getX_koordinate(),
s.getY_koordinate(), -s.getTiefe());
c.setRadius(s.getDurchmesser());
Arrow a = new Arrow(s.getX_koordinate(), s.getY_koordinate(),
2+s.getZ_koordinate(), s.getX_koordinate(),
s.getY_koordinate(), s.getZ_koordinate());

a.setRadius(0.1);
a.setColor("blue");
v.addObject3D(a);
v.addObject3D(c);
}
}
}
------------------------------------------------------------------------------------------
Ich möchte jetzt eine Klasse Haltungen erstellen, welche als Attribut z.B. Durchmesser, Anfangspunkt und Endpunkt hat. Die Anfangs und Endpunkte der Haltungen sollen die Anfangs und Endpunkte der Schächte sein, der Benutzer soll praktisch sagen können: Ich habe 3 Schächte erstellt, verbinde Schacht 1 und 3 miteinander und Schacht 2-3 miteinander. Am ende soll es natürlich mit Visualisiert werden, darum würde ich mich dann aber selber kümmern. Mein größtes Problem liegt darin bestimmte Daten aus der ArrayList auszulesen.

Ich danke euch im Voraus

-Phil
 

Crian

Top Contributor
Java™ Quelltext ist bitte in
Java:
-Tags zu schreiben: [JAVA ]hier Java Code einfügen[/JAVA ][/COLOR][/B]
[/QUOTE]

steht nicht ohne Grund groß, fett und rot über der Beitrag-Box. ;)

[QUOTE]
Mein größtes Problem liegt darin bestimmte Daten aus der ArrayList auszulesen.
[/QUOTE]

Wie sind diese bestimmt? Vermutlich nicht über den Index, oder?



[QUOTE]
Ich möchte jetzt eine Klasse Haltungen erstellen, welche als Attribut z.B. Durchmesser, Anfangspunkt und Endpunkt hat. Die Anfangs und Endpunkte der Haltungen sollen die Anfangs und Endpunkte der Schächte sein, der Benutzer soll praktisch sagen können: Ich habe 3 Schächte erstellt, verbinde Schacht 1 und 3 miteinander und Schacht 2-3 miteinander.
[/QUOTE]

Nach den Klassen da oben zu schließen, ist das erstellen der Klasse nicht das Problem, oder? Sind es die Verbindungen?
 
Zuletzt bearbeitet:
P

PhilBauing

Gast
Da Java relativ neu ist für mich, weiß ich nicht 100% was du damit meinst, also wie diese bestimmt sind. Ich habe noch eine Testklasse, in welcher ich den Schächten werte gegeben habe.

Java:
import inf.v3d.view.Viewer;;

public class RohrnetzTest {
	public static void main(String[] args) {
		Rohrnetz r=new Rohrnetz();
		Schacht s= new Schacht(0, 0, 0, 0.5, 20, 50);
		Schacht s1=new Schacht(25, 30, 0, 0.5, 10, 50);
		Schacht s2=new Schacht(10, 25, 0, 0.5, 30, 50);
		
		r.neuerSchacht(s2);
		r.neuerSchacht(s1);
		r.neuerSchacht(s);
		Viewer v=new Viewer();
		r.zeichne(v);
		v.setVisible(true);
	}
	}
 
P

PhilBauing

Gast
Ja, also ich weiß einfach nicht, wie ich jetzt z.B. auf die Zahlen in der Testklasse zugreifen kann. Ich habe daran gedacht, den einzelnen werten der Schächte irgendwie Variablen zuzuordnen, stehe aber total auf dem Schlauch wie ich das angehen könnte.

Ich habe auch versucht eine neue ArrayList für die Haltungen zu machen. Das sah dann so aus:
Java:
public void neueHaltung(Haltung h){
		for (Haltung h :this.haltungen){
			Cylinder c=new Cylinder(s.getXkoordinate(1),s.getY_koordinate(1),s.getZ_koordinate(1),s.getXkoordinate(2),s.getY_koordinate(2),s.getZ_koordinate(2));
		}
	}

Das Problem ist aber, dass er die Variable s nicht kennt. Ich hab jetzt mal in die Klammern (1/2) geschrieben. Das soll verdeutlichen, dass die ersten 3 Koordinaten von Schacht 1 und die zweiten 3 Koordinaten von Schacht 2 kommen sollen.
 

Crian

Top Contributor
Was soll dein s denn darstellen? Das s aus RohrnetzTest? Du steckst tief in deiner Gedankenwelt drin, wir nicht, du musst deutlicher erklären, wenn wir helfen sollen.
 

Crian

Top Contributor
Klar. Hier schonmal ein Rohgerüst für deine Haltungen:

Java:
public class Haltung{
    private int durchmesser;
    private int anfangspunkt;
    private int endpunkt;

    public Haltung(int durchmesser, int anfangspunkt, int endpunkt) {
        this.durchmesser = durchmesser;
        this.anfangspunkt = anfangspunkt;
        this.endpunkt = endpunkt;
    }

    public int getDurchmesser() {
        return durchmesser;
    }

    public int getAnfangspunkt() {
        return anfangspunkt;
    }

    public int getEndpunkt() {
        return endpunkt;
    }

}
 

Crian

Top Contributor
Ja, also ich weiß einfach nicht, wie ich jetzt z.B. auf die Zahlen in der Testklasse zugreifen kann. Ich habe daran gedacht, den einzelnen werten der Schächte irgendwie Variablen zuzuordnen, stehe aber total auf dem Schlauch wie ich das angehen könnte.

Ich habe auch versucht eine neue ArrayList für die Haltungen zu machen. Das sah dann so aus:
Java:
public void neueHaltung(Haltung h){
		for (Haltung h :this.haltungen){
			Cylinder c=new Cylinder(s.getXkoordinate(1),s.getY_koordinate(1),s.getZ_koordinate(1),s.getXkoordinate(2),s.getY_koordinate(2),s.getZ_koordinate(2));
		}
	}

Das Problem ist aber, dass er die Variable s nicht kennt. Ich hab jetzt mal in die Klammern (1/2) geschrieben. Das soll verdeutlichen, dass die ersten 3 Koordinaten von Schacht 1 und die zweiten 3 Koordinaten von Schacht 2 kommen sollen.


Da passt irgendwas nicht zusammen. Du definierst da einen
Code:
Cylinder
(was immer das ist) ohne mit dem irgendwas zu machen.


Ich würde sagen, erstmal brauchst du sowas:

Java:
public class Rohrnetz {
    private List<Schacht> schaechte;
    private List<Haltung> haltungen;

    public Rohrnetz() {
        schaechte = new ArrayList<Schacht>();
        haltungen = new ArrayList<Haltung>();
    }

    public void neuerSchacht(Schacht schacht) {
        this.schaechte.add(schacht);
    }

    public void neueHaltung(Haltung haltung) {
        this.haltungen.add(haltung);
    }

   [...]
 
P

PhilBauing

Gast
In meiner Klasse Schacht hat verschieden Attribute auf welche ich von der Klasse Rohrnetz zugreife und eine ArrayList mit diesen Daten fülle.

Java:
import inf.v3d.obj.Cylinder;
import inf.v3d.obj.Arrow;
import inf.v3d.view.Viewer;

import java.util.ArrayList;

public class Rohrnetz {

//hier starte ich die ArrayList mit dem Datentyp Schacht

	private ArrayList<Schacht> schaechte = new ArrayList<Schacht>();


//eine Methode zum hinzufügen von neuen Schächten zur ArrayList


	public void neuerSchacht(Schacht s) {
		this.schaechte.add(s);
	
	}
//eine for schleife zum zeichnen der Schächte. Wie ihr seht, werden die Attribute der verschiedenen Cylinder mit den Daten der Schächte gefüllt. Soweit ich das richtig verstanden habe, weiß eclipse, dass es auf die Klasse "Schacht" zugreifen soll, daher dass ich die Variable "s" eingeführt habe, oder?
	
	public void zeichne(Viewer v) {
		for (Schacht s : this.schaechte) {
			Cylinder c = new Cylinder(s.getX_koordinate(), s.getY_koordinate(),
					s.getZ_koordinate(), s.getX_koordinate(),
					s.getY_koordinate(), -s.getTiefe());
			c.setRadius(s.getDurchmesser());

			v.addObject3D(c);
		}
	
	}

Hier ist meine Testklasse, in welcher ich Schächte erzeugen und im Viewer abbilden kann.

Java:
import inf.v3d.view.Viewer;;

public class RohrnetzTest {
	public static void main(String[] args) {
		Rohrnetz r=new Rohrnetz();
		Schacht s= new Schacht(0, 0, 0, 0.5, 20, 50);
		Schacht s1=new Schacht(25, 30, 0, 0.5, 10, 50);
		Schacht s2=new Schacht(10, 25, 0, 0.5, 30, 50);
		
		r.neuerSchacht(s2);
		r.neuerSchacht(s1);
		r.neuerSchacht(s);
		Viewer v=new Viewer();
		r.zeichne(v);
		v.setVisible(true);
	}
	}

Ich hoffe bis hierhin ist alles verständlich.

Ich möchte jetzt eine neue Klasse erstellen die Haltung heißt. Diese Klasse soll als Attribut durchmesser, anfangspunkt, endpunkt haben. Dann wollte ich in der Klasse Rohrnetz eine weitere ArrayList<Haltung> haltungen erstellen, welcher mit einer Methode neueHaltung neue Objekte zugeführt werden können, genauso wie bei der ArrayList<Schacht> auch. Dann will ich, dass die Haltungen genauso im Viewer gezeigt werden wie die Schächte auch, nur sollen die Anfangs und Endpunkte genau die selben Werte sein, wie die der Schächte. Hier also meine Frage: Wie kann ich meinem Programm sagen, dass wenn es die Haltungen zeichnet, dass es alle Werte außer dem Durchmesser aus ArrayList<Schacht> bekommt?
 

Crian

Top Contributor
Haltung (Kanalisation) ? Wikipedia hat mich etwas schlauer gemacht. Offenbar verbinden Haltungen Schächte miteinander, richtig?

Ich möchte jetzt eine neue Klasse erstellen die Haltung heißt. Diese Klasse soll als Attribut durchmesser, anfangspunkt, endpunkt haben. Dann wollte ich in der Klasse Rohrnetz eine weitere ArrayList<Haltung> haltungen erstellen, welcher mit einer Methode neueHaltung neue Objekte zugeführt werden können, genauso wie bei der ArrayList<Schacht> auch.

Das habe ich oben schon angefertigt, beides.


Im Grunde hast du Graphen und deine Haltungen sind die Knoten und die Schächte die Kanten, ja? Sowas hält man in der Graphentheorie folgendermaßen vor: Man hat eine Eckenmenge E = { e1, e2, ..., en } und eine Kantenmenge K = { k1, k2, ..., km }, wobei eine Kante k einen Anfangspunkt a und einen Endpunkt e mit a aus E und e aus E hat.

Sowas in der Art brauchst du also auch.


Das mit der Visualisierung würde ich erstmal weglassen.
 
Zuletzt bearbeitet:
P

PhilBauin

Gast


Die Senkrechten Stäbe sind die Schächte, welche per eingabe bestimmt werden sollen. Die Haltungen verbinden die einzelnen Schächte miteinander. Hier soll man nur den durchmesser bestimmen sollen und von wo nach wo die Haltung verlaufen soll, da müssen dann aber ja die Endpunkte der Schächte dran.
 

Crian

Top Contributor
Ah ok. Die Schächte sind die senkrechten "Rohre" und die Haltungen die diese unten mehr oder weniger horizontal verbindenden? Es können an einen Schacht aber mehrere Haltungen stoßen, an eine Haltung aber immer nur zwei Schächte, oder?
 
P

PhilBauing

Gast
Ganz genauso ist es!!!

Der Benutzer gibt an wo die Schächte sind, welchen Durchmesser sie haben und den jeweiligen Zufluss.
Dann gibt er an welche Schächte über Haltungen miteinander verbunden sind und welchen Durchmesser sie haben.

Ist der Gedanke denn richtig das über ArrayList zu machen?
 

Crian

Top Contributor
Ja, ich hab mal folgendes gebastelt, hier ohne Visualisierung, schau mal, ob das im Prinzip das ist was du brauchst:

Klasse Schacht:

Java:
package forumProblems.Rohrnetz;

public class Schacht {

    private double xKoordinate;
    private double yKoordinate;
    private double zKoordinate;
    private double durchmesser;
    private double tiefe;
    private double zulaufmenge;

    public Schacht(double xKoordinate, double yKoordinate, double zKoordinate,
            double durchmesser, double tiefe, double zulaufmenge) {
        this.xKoordinate = xKoordinate;
        this.yKoordinate = yKoordinate;
        this.zKoordinate = zKoordinate;
        this.durchmesser = durchmesser;
        this.tiefe       = tiefe;
        this.zulaufmenge = zulaufmenge;
    }

    public double getxKoordinate() {
        return xKoordinate;
    }

    public void setxKoordinate(double xKoordinate) {
        this.xKoordinate = xKoordinate;
    }

    public double getyKoordinate() {
        return yKoordinate;
    }

    public void setyKoordinate(double yKoordinate) {
        this.yKoordinate = yKoordinate;
    }

    public double getzKoordinate() {
        return zKoordinate;
    }

    public void setzKoordinate(double zKoordinate) {
        this.zKoordinate = zKoordinate;
    }

    public double getDurchmesser() {
        return durchmesser;
    }

    public void setDurchmesser(double durchmesser) {
        this.durchmesser = durchmesser;
    }

    public double getTiefe() {
        return tiefe;
    }

    public void setTiefe(double tiefe) {
        this.tiefe = tiefe;
    }

    public double getZulaufmenge() {
        return zulaufmenge;
    }

    public void setZulaufmenge(double zulaufmenge) {
        this.zulaufmenge = zulaufmenge;
    }

}

Klasse Haltung:

Java:
package forumProblems.Rohrnetz;

public class Haltung {

    /** Durchmesser der Haltung */
    private int durchmesser;

    /** Index des Schachts am Anfang */
    private int anfangspunkt;

    /** Index des Schachts am Ende */
    private int endpunkt;

    public Haltung(int durchmesser, int anfangspunkt, int endpunkt) {
        this.durchmesser = durchmesser;
        this.anfangspunkt = anfangspunkt;
        this.endpunkt = endpunkt;
    }

    public int getDurchmesser() {
        return durchmesser;
    }

    public int getAnfangspunkt() {
        return anfangspunkt;
    }

    public int getEndpunkt() {
        return endpunkt;
    }

}

Klasse Rohrnetz:

Java:
package forumProblems.Rohrnetz;

import java.util.ArrayList;
import java.util.List;

public class Rohrnetz {
    private List<Schacht> schaechte;
    private List<Haltung> haltungen;

    public Rohrnetz() {
        schaechte = new ArrayList<Schacht>();
        haltungen = new ArrayList<Haltung>();
    }

    public void neuerSchacht(Schacht schacht) {
        schaechte.add(schacht);
    }

    public void neueHaltung(Haltung haltung) {
        haltungen.add(haltung);
    }

    public void print() {
        List<Schacht> unverbundeneSchaechte = new ArrayList<Schacht>();
        List<Haltung> unverbundeneHaltungen = new ArrayList<Haltung>();
        List<Haltung> verbundeneHaltungen = new ArrayList<Haltung>();
        List<Haltung> einseitigUnverbundeneHaltungen = new ArrayList<Haltung>();

        for (int index=0; index<schaechte.size(); ++index) {
            boolean found = false;
            for (Haltung haltung : haltungen) {
                int anfangspunkt = haltung.getAnfangspunkt();
                int endpunkt = haltung.getEndpunkt();
                if (index == anfangspunkt || index == endpunkt) {
                    found = true;
                    break;
                }
            }
            if (!found) {
                unverbundeneSchaechte.add(schaechte.get(index));
            }
        }

        for (Haltung haltung : haltungen) {
            int anfangspunkt = haltung.getAnfangspunkt();
            int endpunkt = haltung.getEndpunkt();
            if (
                    (anfangspunkt < 0 || anfangspunkt > schaechte.size())
                        &&
                    (endpunkt     < 0 || endpunkt     > schaechte.size())
            ) {
                unverbundeneHaltungen.add(haltung);
            }
            if (
                    (anfangspunkt < 0 || anfangspunkt > schaechte.size())
                        ||
                    (endpunkt     < 0 || endpunkt     > schaechte.size())
            ) {
                einseitigUnverbundeneHaltungen.add(haltung);
            }
            else {
                verbundeneHaltungen.add(haltung);
            }
        }

        System.out.println("Rohrnetz:");
        System.out.println("~~~~~~~~~");
        System.out.println("Unverbundene Schächte: " + unverbundeneSchaechte.size());
        System.out.println("Unverbundene Haltungen: " + unverbundeneHaltungen.size());
        System.out.println("Einseitig unverbundene Haltungen: " + unverbundeneHaltungen.size());
        System.out.println("Verbundene Haltungen:");
        for (int index=0; index<verbundeneHaltungen.size(); ++index) {
            Haltung haltung = verbundeneHaltungen.get(index);
            System.out.println("Haltung " + index + " verbindet Schacht "
                    + haltung.getAnfangspunkt() + " mit "
                    + haltung.getEndpunkt() + ".");
        }
    }

}

Klasse Rohrnetztest:
Java:
package forumProblems.Rohrnetz;

public class RohrnetzTest {

    public static void main(String[] args) {
        Rohrnetz rohrnetz = new Rohrnetz();

        /* Schächte anlegen: */
        Schacht s1 = new Schacht(0, 0, 0, 0.5, 20, 50);
        Schacht s2 = new Schacht(25, 30, 0, 0.5, 10, 50);
        Schacht s3 = new Schacht(10, 25, 0, 0.5, 30, 50);
        Schacht s4 = new Schacht(40, 37, 0, 0.5, 30, 50);
        Schacht s5 = new Schacht(40, 37, 0, 0.5, 30, 50);
        rohrnetz.neuerSchacht(s1); /* Schacht Index 0 */
        rohrnetz.neuerSchacht(s2); /* Schacht Index 1 */
        rohrnetz.neuerSchacht(s3); /* Schacht Index 2 */
        rohrnetz.neuerSchacht(s4); /* Schacht Index 3 */
        rohrnetz.neuerSchacht(s5); /* Schacht Index 4 */

        /* Haltungen anlegen: */
        Haltung h1 = new Haltung(55,  0,  1); /* Verbindet s1 mit s2 */
        Haltung h2 = new Haltung(66,  1,  2); /* Verbindet s2 mit s3 */
        Haltung h3 = new Haltung(77,  3, 17); /* Verbindet s4 mit nicht vorhandenem */
        Haltung h4 = new Haltung(88, 21, 22); /* Verbindet nicht vorhandenes */
        rohrnetz.neueHaltung(h1);
        rohrnetz.neueHaltung(h2);
        rohrnetz.neueHaltung(h3);
        rohrnetz.neueHaltung(h4);

        /* Verbindungen im Rohrnetz ausgeben: */
        rohrnetz.print();
    }

}

Ausgabe:

Code:
Rohrnetz:
~~~~~~~~~
Unverbundene Schächte: 1
Unverbundene Haltungen: 1
Einseitig unverbundene Haltungen: 1
Verbundene Haltungen:
Haltung 0 verbindet Schacht 0 mit 1.
Haltung 1 verbindet Schacht 1 mit 2.
 
P

PhilBauin

Gast
Danke schonmal!!

Ich beschäftige mich jetzt mal damit, wie die Klasse Rohrnetz funktioniert und ob das das ist was ich brauche. Sieht aber stark danach aus!
 

Crian

Top Contributor
Die Analyse der (teilweise) unverbundenen Dinge ist vielleicht etwas Spielerei. Wenn du dir das sparst, ist die Analyse in
Code:
print()
sehr viel kürzer:

Java:
        System.out.println("Rohrnetz:");
        for (int index=0; index<haltungen.size(); ++index) {
            Haltung haltung = haltungen.get(index);
            System.out.println("Haltung " + index + " verbindet Schacht "
                    + haltung.getAnfangspunkt() + " mit "
                    + haltung.getEndpunkt() + ".");
        }

Allerdings ist die Ausgabe dann natürlich auch so:

Code:
Rohrnetz:
Haltung 0 verbindet Schacht 0 mit 1.
Haltung 1 verbindet Schacht 1 mit 2.
Haltung 2 verbindet Schacht 3 mit 17.
Haltung 3 verbindet Schacht 21 mit 22.

Wenn du aber gar nicht erst unverbundenes einfügst, macht das nichts.


Generell würde ich noch überlegen, den Schächten und Haltungen vielleicht eindeutige Namen (Identifier) mitzugeben. Kann ja sowas der Art H0000001, H0000002 ... für Haltungen und S0000001, S0000002, S0000003 für Schächte sein. Irgendwie ist das arbeiten mit der ID etwas hakelig. Dann bräuchtest du aber auch Maps statt ArrayLists und es würde etwas komplexer.
 
Zuletzt bearbeitet:

PhilBauing

Mitglied
Ein paar Fragen zum Aufbau der Klasse Rohrnetz.

[Java] private List<Schacht> schaechte;[/Java]

Ist ein Attribut der Klasse Rohrnetz, vom Typ List<Schacht> mit der Variablen schaechte !?

Java:
public Rohrnetz() {
		schaechte = new ArrayList<Schacht>();

Ordnet der Variablen schaechte die ArrayList<Schacht> zu ?!

Java:
public void print() {
		List<Schacht> unverbundeneSchaechte = new ArrayList<Schacht>();
		List<Haltung> unverbundeneHaltungen = new ArrayList<Haltung>();
		List<Haltung> verbundeneHaltungen = new ArrayList<Haltung>();
		List<Haltung> einseitigUnverbundeneHaltungen = new ArrayList<Haltung>();[/Java]

hier verstehe ich ehrlich gesagt nur Bahnhof. Könntest du mir das vielleicht erklären? Ich glaub dann fällt es mir leichter die for-Schleifen zu verstehen.

Danke echt vielmals für deine Hilf
 

PhilBauing

Mitglied
Ein paar Fragen zum Aufbau der Klasse Rohrnetz.

[Java] private List<Schacht> schaechte;[/Java]

Ist ein Attribut der Klasse Rohrnetz, vom Typ List<Schacht> mit der Variablen schaechte !?

Java:
public Rohrnetz() {
		schaechte = new ArrayList<Schacht>();

Ordnet der Variablen schaechte die ArrayList<Schacht> zu ?!

Java:
public void print() {
		List<Schacht> unverbundeneSchaechte = new ArrayList<Schacht>();
		List<Haltung> unverbundeneHaltungen = new ArrayList<Haltung>();
		List<Haltung> verbundeneHaltungen = new ArrayList<Haltung>();
		List<Haltung> einseitigUnverbundeneHaltungen = new ArrayList<Haltung>();[/Java]

hier verstehe ich ehrlich gesagt nur Bahnhof. Könntest du mir das vielleicht erklären? Ich glaub dann fällt es mir leichter die for-Schleifen zu verstehen.

Danke echt vielmals für deine Hilfe
 

Crian

Top Contributor
Ein paar Fragen zum Aufbau der Klasse Rohrnetz.

[Java] private List<Schacht> schaechte;[/Java]

Ist ein Attribut der Klasse Rohrnetz, vom Typ List<Schacht> mit der Variablen schaechte !?

Ja genau. Die Variable heißt schaechte und ist vom Typ List<Schacht>, also eine Liste von Schächten. Im Moment ist sie allerdings noch null.

Java:
public Rohrnetz() {
		schaechte = new ArrayList<Schacht>();

Ordnet der Variablen schaechte die ArrayList<Schacht> zu ?!

Es initialisiert die Variable mit einer neuen Liste von Schächten. Die Liste selbst ist leer, aber schaechte ist nun nicht mehr null.

Java:
public void print() {
		List<Schacht> unverbundeneSchaechte = new ArrayList<Schacht>();
		List<Haltung> unverbundeneHaltungen = new ArrayList<Haltung>();
		List<Haltung> verbundeneHaltungen = new ArrayList<Haltung>();
		List<Haltung> einseitigUnverbundeneHaltungen = new ArrayList<Haltung>();[/Java]

hier verstehe ich ehrlich gesagt nur Bahnhof. Könntest du mir das vielleicht erklären? Ich glaub dann fällt es mir leichter die for-Schleifen zu verstehen.

Danke echt vielmals für deine Hilfe[/QUOTE]

Das lass erstmal weg, ich hab gerade eine neue Variante mit Maps erstellt, die ich schöner finde, da nun die Schächte und Haltungen einfach zu identifizieren und anzusprechen sind. Die poste ich gleich.
 

Crian

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

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;
    }

}

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.

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;
    }

}

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

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() + ".");
        }
    }

}

Und schließlich die angepasste Testklasse:

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();
    }

}

Die Ausgabe ist schlicht:

Code:
Rohrnetz:
Haltung H002 verbindet Schacht S002 mit S003.
Haltung H001 verbindet Schacht S001 mit S002.


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)
 

PhilBauing

Mitglied
jap, genau dort hab ich es mir durchgelesen und so auch verstanden.

Im Prinzip läuft da jetzt auch schon fast das ab, was ich möchte. Nur weiß zwar jetzt eine Haltung von welchem Schacht sie zu welchem läuft, aber kennt ja die Koordinaten nicht, welche für weitere Berechnungen und Visualisierung denke notwendig wäre.

oder könnte man sowas machen wie "S001".getx_koordinate?
 

Crian

Top Contributor
Ja, du könntest im Rohrnetz folgendes machen, wenn du zu einem Schacht in einer Halterung genaueres wissen willst:

Java:
    Haltung haltung = ... // Deine haltung, die du gerade irgendwie betrachtest
    Schacht anfangsSchacht = schaechte.get(haltung.getAnfangspunkt);
    Schacht endSchacht = schaechte.get(haltung.getEndpunkt);

Und dann kannst du natürlich auf die Daten der Schächte zugreifen.

Oder auch zusammengekuddelmuddelt:

Code:
int xKoordinate = schaechte.get(haltung.getEndpunkt).getxKoordinate();
 

PhilBauing

Mitglied
Der Ansatz ist doch dafür da, dass ich, falls ich etwas genaueres über eine Halterung wissen will, ich es nachgucken kann.

Ich möchte aber, wenn ich eine Halterung zwischen zwei Schächten erzeuge, dass die Daten der Schächte immer irgendwohin gegeben werden, damit ich die Daten dann verarbeiten kann. z.B. soll das Gefälle einer Halterung immer berechnet werden. Das passiert ja über die horizontal- und vertikaldifferenz. Jetzt weiß meine Halterung ja praktisch um welche beiden Schächte es geht, aber nicht welche Differenzen die beiden Schächte haben. Ein anderes Bsp.: Am Ende, wenn alle Schächte und Halterungen erzeugt worden sind, sollen alle Zuflüsse miteinander addiert werden.

Könnte man nicht eine for schleife machen, welche die Schächte nummeriert um dann z.B. sagen zu können getxKoordinate(2).

Damit das Programm weiß, dass es um die XKoordinate des 2. Schachtes geht?
 

Crian

Top Contributor
Ich weiß nicht genau, ob ich verstehe, was du meinst. Ich habe mal in der Klasse Rohrnetz die folgenden Methoden hinzugefügt:

Java:
    public Haltung getHaltung(String id) {
        return haltungen.get(id);
    }

    public Schacht getSchacht(String id) {
        return schaechte.get(id);
    }

    public Collection<Haltung> getHaltungen() {
        return haltungen.values();
    }

    public Collection<Schacht> getSchaechte() {
        return schaechte.values();
    }

Und nun kann man mit

Java:
package forumProblems.RohrnetzMitNamen;

public class Rohrnetztest2 {

    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);

        /* Gefälle für Haltungen ausrechnen: */
        for (Haltung haltung : rohrnetz.getHaltungen()) {
            Schacht anfangsSchacht = rohrnetz.getSchacht(haltung.getAnfangspunkt());
            Schacht endSchacht = rohrnetz.getSchacht(haltung.getEndpunkt());
            double x1 = anfangsSchacht.getxKoordinate();
            double x2 = endSchacht.getxKoordinate();
            double y1 = anfangsSchacht.getyKoordinate();
            double y2 = endSchacht.getyKoordinate();
            double z1 = anfangsSchacht.getzKoordinate();
            double z2 = endSchacht.getzKoordinate();

            System.out.println("Haltung " + haltung.getId() + ":");
            System.out.println("x: " + x1 + "-" + x2 + ", diff = " + (x1-x2));
            System.out.println("y: " + y1 + "-" + y2 + ", diff = " + (y1-y2));
            System.out.println("z: " + z1 + "-" + z2 + ", diff = " + (z1-z2));
        }

    }

}

Das Ergebnis

Code:
Haltung H002:
x: 25.0-10.0, diff = 15.0
y: 30.0-25.0, diff = 5.0
z: 0.0-0.0, diff = 0.0
Haltung H001:
x: 0.0-25.0, diff = -25.0
y: 0.0-30.0, diff = -30.0
z: 0.0-0.0, diff = 0.0

bekommen. Ist das in deinem Sinne?
 

PhilBauing

Mitglied
Ich habe mir den Quelltext angeschaut und denke ich auch verstanden.

[Java]
public Collection<Schacht> getSchaechte() {
return schaechte.values();
}
[/code]

Ist das eine Methode vom Typ Collection<Schacht> (Also eine Sammlung der Werte die die verschiedenen Schächte haben?!) mit dem Namen getSchaechte() und sie gibt mir die Werte(Values) der Schaechte wieder?

Eigentlich kann ich glaub ich alles rechnerische mit diesen Klassen machen was nötig ist, jetzt stellt sich mir nur die Frage ob ich z.B. die Testklassen in eine Swing-Benutzeroberfläche schreiben kann. Ich weiß nicht ob ich mich richtig ausdrücke, aber über die Benutzeroberfläche soll das ganze ja geschehen, dann sollen die Rechnungen ausgeführt werden und eine Visualisierung des ganzen soll stattfinden.
Ich möchte eigentlich nur wissen ob das der richtige Weg ist, damit ich weiter tüfteln kann :)

Grüße
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
babel ein Vector mit verschiedenen Werten auslesen und berechnen Java Basics - Anfänger-Themen 34
S Daten aus Import Datei auslesen und sortieren Java Basics - Anfänger-Themen 2
T array auslesen Java Basics - Anfänger-Themen 2
I Klassen von einem package laden, Statisches Feld auslesen und Objekt erstellen Java Basics - Anfänger-Themen 8
N Einzelne Werte aus einem TreeSet auslesen Java Basics - Anfänger-Themen 2
D Eclipse will nicht auslesen Java Basics - Anfänger-Themen 6
E TIF Datei auslesen Java Basics - Anfänger-Themen 2
krgewb Breite und Höhe eines Bildes in base64 auslesen Java Basics - Anfänger-Themen 3
sserio TXT-Datei Auslesen und den Wert jedes Namen ausrechnen etc. Java Basics - Anfänger-Themen 37
J Speichern von zwei Variablen durch Auslesen aus einem Numberfield Java Basics - Anfänger-Themen 2
U Sekunden von LocalTime auslesen, wie möglich? Java Basics - Anfänger-Themen 1
E Outlook ordner auslesen Java Basics - Anfänger-Themen 4
R Eigenschaft über Parameter auslesen und ändern Java Basics - Anfänger-Themen 15
B Bin komplett am verzweifeln :( Verkettete Liste die Objekte hat Attribut auslesen Java Basics - Anfänger-Themen 14
J Datei aus Netzwerk auslesen Java Basics - Anfänger-Themen 9
J Jsonfile auslesen Java Basics - Anfänger-Themen 8
A Eine Textdatei auslesen Java Basics - Anfänger-Themen 16
N Aus einem String die Anzahl der Vokale auslesen Java Basics - Anfänger-Themen 40
H Array rückwärts auslesen funktioniert nicht Java Basics - Anfänger-Themen 3
J Bestimmte parameter aus Jsonfile auslesen Java Basics - Anfänger-Themen 15
AleXusher Mehrdimensionales Array aus txt.file auslesen Java Basics - Anfänger-Themen 4
L Zeichen an bestimmter Stelle auslesen Java Basics - Anfänger-Themen 4
3 Textdatei Zeilenweise auslesen Java Basics - Anfänger-Themen 3
J Json Datei auslesen Java Basics - Anfänger-Themen 4
I Java String einlesen und auslesen Java Basics - Anfänger-Themen 11
S Tastatureingabe auslesen und in Konsole ausgeben Java Basics - Anfänger-Themen 6
S CSV Datei auslesen und anders darstellen Java Basics - Anfänger-Themen 2
G Scanner nutzen und Index auslesen Java Basics - Anfänger-Themen 8
N JTable auslesen Java Basics - Anfänger-Themen 6
N Java CSV Datei auslesen Java Basics - Anfänger-Themen 6
F Webseiten Quelltext auslesen Java Basics - Anfänger-Themen 5
J Datei auslesen (nur bestimmte Stellen) Java Basics - Anfänger-Themen 2
I csv auslesen, mittels List Java Basics - Anfänger-Themen 18
S Letzte Zahl eines Integer auslesen? Java Basics - Anfänger-Themen 3
G If / While Programm (Datei auslesen) Java Basics - Anfänger-Themen 6
S Aus einer .bz2 Datei auslesen Java Basics - Anfänger-Themen 2
K Textdatei auslesen und über Mqtt schicken Java Basics - Anfänger-Themen 4
B Name von Verzeichnis bekommen - Files von einem Ordner auslesen Java Basics - Anfänger-Themen 4
A Daten auslesen/vergleichen Java Basics - Anfänger-Themen 3
D XML von Seite auslesen Jsoup Java Basics - Anfänger-Themen 2
I Druckerauflösung auslesen - mittlerweile möglich? Java Basics - Anfänger-Themen 4
B WSDL auslesen? Java Basics - Anfänger-Themen 8
D Methoden Textdokument erstellen und auslesen. Java Basics - Anfänger-Themen 46
B HTML Code / Seite auslesen und JAVA Objekte erstellen Java Basics - Anfänger-Themen 12
S Datein auslesen und verarbeiten Java Basics - Anfänger-Themen 1
J Geld speichern und wieder auslesen Java Basics - Anfänger-Themen 10
S CSV auslesen UTF-8 Problem Java Basics - Anfänger-Themen 7
D Datei auslesen & Werte in Variable speichern Java Basics - Anfänger-Themen 12
K String buchstaben auslesen Java Basics - Anfänger-Themen 9
S Amazon Produktbeschreibung auslesen und nach Keywords suchen Java Basics - Anfänger-Themen 2
x-tshainge Interface Wie kann ich aus Textfeldern auslesen Java Basics - Anfänger-Themen 6
Z Ersten Buchstaben eines Elements eines String-Arrays auslesen Java Basics - Anfänger-Themen 5
B .txt. Datei auslesen und bestimmten Wert wiedergeben Java Basics - Anfänger-Themen 5
CptK x wert eines Bildes auslesen Java Basics - Anfänger-Themen 1
T Website auslesen Java Basics - Anfänger-Themen 2
T String auslesen bzw. überprüfen Java Basics - Anfänger-Themen 1
L CSV Auslesen Java Basics - Anfänger-Themen 5
B Auslesen von PDF / Bilder Java Basics - Anfänger-Themen 5
das_leon Alle Zeilen einer CSV-Datei auslesen Java Basics - Anfänger-Themen 1
D Mit Java HTML bzw Javascript auslesen Java Basics - Anfänger-Themen 1
F Arrays Sätze speichern und einzelne Worte mit Index Angabe auslesen Java Basics - Anfänger-Themen 4
F Zwischenwerte aus Browser auslesen Java Basics - Anfänger-Themen 19
S Jede Ziffer einer Zahl auslesen, damit rechnen und beim Ergebnis wiederholen ? Java Basics - Anfänger-Themen 20
G Servlet - externe HTML (URL) auslesen Java Basics - Anfänger-Themen 1
T class Datei auslesen Java Java Basics - Anfänger-Themen 5
P Liste auslesen und in Variablen speichern Java Basics - Anfänger-Themen 7
D String erste Zahl mit LKZ auslesen lassen Java Basics - Anfänger-Themen 36
J Hashmap auslesen Java Basics - Anfänger-Themen 7
J Auslesen/speichern und wieder einlesen Java Basics - Anfänger-Themen 7
D String untereinander auslesen lassen Java Basics - Anfänger-Themen 2
M Aus Datei auslesen und untersuchen ob diese Zeile schon vorhanden ist Java Basics - Anfänger-Themen 3
DaCrazyJavaExpert Variablen Zahlen aus Strings auslesen Java Basics - Anfänger-Themen 4
J Informationen aus Webseiten auslesen Java Basics - Anfänger-Themen 1
S Text aus einer HTML Datei auslesen Java Basics - Anfänger-Themen 1
M Einzelne Pixel in einem Bild auslesen und bearbeiten Java Basics - Anfänger-Themen 1
dragonfight86 Erste Schritte OpenDocument auslesen Java Basics - Anfänger-Themen 13
I Texte mit Absätzen in Dateien speichern und auslesen Java Basics - Anfänger-Themen 1
W DNS Name auslesen + weitere Anfängerfrage Java Basics - Anfänger-Themen 4
C Werte aus JTable auslesen Java Basics - Anfänger-Themen 4
Chrizzey45 Calc-Dokument in Java auslesen? Java Basics - Anfänger-Themen 2
B Datei auslesen und 2D-Array anlegen Java Basics - Anfänger-Themen 1
B Key auslesen/ausgeben innerhalb von foreach() Java Basics - Anfänger-Themen 5
M Eigenschaften einer Datei auslesen Java Basics - Anfänger-Themen 5
M Textarea auslesen und beschreiben Java Basics - Anfänger-Themen 8
JokerBlacky Klassen Klasse Queue Klasse mit Attributen anhängen und auslesen können Java Basics - Anfänger-Themen 4
Y Bildschirmauflösung auslesen Java Basics - Anfänger-Themen 4
S for schleife auslesen Java Basics - Anfänger-Themen 4
Voreck String Zeichen für Zeichen auslesen Java Basics - Anfänger-Themen 9
Voreck Array aus txt datei auslesen Java Basics - Anfänger-Themen 2
N JFreeChart --> TimeSeries auslesen Java Basics - Anfänger-Themen 9
OlafHD Datei Auslesen Java Basics - Anfänger-Themen 6
M Metadaten OpenOffice mit Java auslesen Java Basics - Anfänger-Themen 9
P JList, aus selectedValue bestimmten Wert aus Containerklasse auslesen Java Basics - Anfänger-Themen 4
J OpenOffice Dokumentenvariable mit Java auslesen Java Basics - Anfänger-Themen 1
P Daten von Internetseite auslesen Java Basics - Anfänger-Themen 10
L Text eingeben und im Textfeld auslesen lassen Java Basics - Anfänger-Themen 2
T Combobox Wert auslesen und damit weiterrechnen Java Basics - Anfänger-Themen 6
J Datei auslesen klappt nicht Java Basics - Anfänger-Themen 4
D String Zeichen für Zeichen auslesen Java Basics - Anfänger-Themen 5
Viktim Website auslesen Java Basics - Anfänger-Themen 8

Ähnliche Java Themen

Neue Themen


Oben