Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden. Du solltest ein Upgrade durchführen oder ein alternativer Browser verwenden.
KlassenInstanzen einer Klasse in einer anderen unabhängigen Klasse nutzen
Hallo, ich habe da mal eine Frage wegen Instanzen. Wie kann ich in einer Klasse A , die keine Subklasse von Klasse B ist, trotzdem die Instanzen der Klasse B nutzen? Ich versuche es mit B.Instanzname ,aber leider ohne Erfolg. Ich habe euch mal meine Datei mit angehängt, damit das hoffentlich verständlicher wird.
Außerdem sind auch keine Kommentare mit dabei, da die Aufgabe von einer Altklausur ist und bei denen steht ziemlich genau drauf, was von uns verlangt wird (Zeitlich würde es aber sonst auch ziemlich knapp werden).
Ich freue mich über jede Antwort und gebt gerne Bescheid, falls ihr noch was braucht.
Code bitte nicht als Datei anhängen sondern in Code Tags posten. Dazu einfach den Knopf </> links oberhalb des Eingabebereiches nutzen.
Dein Code war:
Java:
package iam;
import java.util.*;
class Daten {
double _radius;
double _viskositaet;
public Daten( double radius, double viskositaet) {
_radius=radius;
this._viskositaet=viskositaet;
}
public double radius() {
return _radius;
}
public double viskositaet () {
return _viskositaet;
}
}
class Stroemung{
double mittlereGeschwindigkeit;
public Stroemung(Daten daten, double volumenstrom) {
mittlereGeschwindigkeit = volumenstrom /(3.14* daten._radius * daten._radius);
}
public void ausgabeGeschwindigkeit() {
System.out.println("v_mittl.= "+mittlereGeschwindigkeit);
}
public double berechneReynolds (Daten daten) {
double Re= (Math.abs(mittlereGeschwindigkeit)*2*daten._radius)/daten._viskositaet;
return Re;
}
}
class Rohrstroemung{
public static void main (String [] args) {
Locale.setDefault(Locale.US);
Scanner sc=new Scanner (System.in);
double radius,volumenstrom;
final double viskositaet= 1e-6;
System.out.println("Radius >0 eingeben:");
radius= sc.nextDouble();
while(radius<=0) {
System.out.println("radius>0 eingeben:");
radius=sc.nextDouble();
}
System.out.println("Volumenstrom angeben Wert Teil der rellen Zahlen:");
volumenstrom= sc.nextDouble();
Daten daten= new Daten();
daten._radius=radius;
daten._viskositaet= viskositaet;
Stroemung stroemung = new Stroemung();
ausgabeGeschwindigkeit ( Stroemung (daten) );
System.out.println("Reynolds-Zahl= " + Stroemung.berechneReynolds (daten) );
if( Stroemung.berechneReynolds (daten) >2300) {
System.out.println("Reynolds-Zahl Re über krit. Reynolds-Zahl 2300.");
} else {
System.out.println("Reynolds-Zahl Re nicht über krit. Reynolds-Zahl 2300.");
}
}
}
Wenn Du also die Klasse Stroemung nutzen willst, dann musst Du das so machen, wie es die Methoden / der Konstruktor vorgeben.
Der Konstruktor ist ja: public Stroemung(Daten daten, double volumenstrom) { es werden somit zwei Informationen benötigt. Das kann in deinem Code so aussehen: Stroemung stroemung = new Stroemung(daten, volumenstrom);
Wenn Du dann die Methode ausgabeGeschwindigkeit aufrufen willst, dan machst Du es auf der konkreten Instanz, also stroemung.ausgabeGeschwindigkeit()
Wenn Du also die Klasse Stroemung nutzen willst, dann musst Du das so machen, wie es die Methoden / der Konstruktor vorgeben.
Der Konstruktor ist ja: public Stroemung(Daten daten, double volumenstrom) { es werden somit zwei Informationen benötigt. Das kann in deinem Code so aussehen: Stroemung stroemung = new Stroemung(daten, volumenstrom);
Wenn Du dann die Methode ausgabeGeschwindigkeit aufrufen willst, dan machst Du es auf der konkreten Instanz, also stroemung.ausgabeGeschwindigkeit()
An dem Punkt, an dem der Radius deines bereits existierenden Datenobjekts von geändert werden soll. Auf jeden Fall bevor du vorhast, auf den geänderten Wert zuzugreifen.
Dass man die Werte besser hinter Methoden verstecken sollte anstatt direkten Zugriff darauf zu erlauben, ist eh klar.
Auf die Konventionen lass ich mal jemand anderen verweisen, der mehr Spaß daran hat.