Methoden Wert aus Methode verwenden

TschavaNuub

Mitglied
Hallo Leute,

ich muss für die Uni mein erstes kleines Javaprogramm schreiben und bin dabei auf ein Problem gestoßen.
Ich hoffe ihr könnt mir helfen:

Java:
package javaFürAnfänger;

public class Flow {

	public static void main(String[] args) {
		mainTeilA(args);
		mainTeilB(args);
		mainTeilC(args);
	}

	public static void mainTeilA(String[] args) {
		double a = 12; // Höhe des Trapez
		double b1 = 7; // Länge einer der beiden parallelen Seiten
		double b2 = 5; // Länge einer der beiden parallelen Seiten
		double velocity = 10; // Durchflussgeschwindigkeit

		Flow object1 = new Flow();
		object1.getTrapesoidArea(a, b1, b2);
		object1.getFlow(area, velocity);
	}

	public static void mainTeilB(String[] args) {
		// Your Code here
	}

	public static void mainTeilC(String[] args) {
		// Your Code here
	}


	public static double getTrapesoidArea(double b1, double b2, double a) {
		double area = a * (b1 + b2) / 2;
		System.out.println("Trapezfläche: " + area);
		return area;

	}


	public static double getFlow(double area, double velocity) {
		double Flow = velocity * area;
		System.out.println("Durchfluss: " + Flow);
		return Flow;
	}
}

Ich soll die Durchflussmenge durch ein Trapez berechnen. In der main-Methode kann man die Parameter eingeben mit denen die getTrapesoidArea-Methode die Trapezfläche berechnet.

Nun will ich daß, das object1.(area, velocity) das Ergebnis (area) aus der getTrapesoidArea nimmt, damit die getFlow-Methode den Durchfluss berechnen kann.

Vielen Dank im Voraus!
 

FaxXer

Mitglied
Die von getTr..Area zurückgegebene Area einfach in ner Variable zwischenspeichern und damit dann die getFlow Methode aufrufen?
Und sinn machts ja dann nur wenn du dann mit dem zurückgegebenen Flow auch was anstellst.
 

TschavaNuub

Mitglied
Danke erstmal für deine Antwort! Ich weiß leider nicht genau was du meinst, der Wert "area" wird außerhalb der getTrapArea-Methode nicht erkannt. Da muss es doch irgendeinen Befehl geben, der dem object1.getFlow(area, velocity) sagt, welches area zu verwenden ist...

Das Problem ist daß ich die Fläche mit der getTrapArea-Methode berechnen muss. Sonst würd ich in der main-Methode einfach eine Variable mit der Flächenformel einbauen...
 

FaxXer

Mitglied
So nochmal nachgedacht, ich würde es so machen:

Java:
public class Flow {
 
    public void mainTeilA(String[] args) {
        double a = 12; // Höhe des Trapez
        double b1 = 7; // Länge einer der beiden parallelen Seiten
        double b2 = 5; // Länge einer der beiden parallelen Seiten
        double velocity = 10; // Durchflussgeschwindigkeit

        double area = getTrapesoidArea(a, b1, b2);
        double flow = getFlow(area, velocity);
        System.out.println("Das Trapez mit der Fläche: " + area + "m² hat ein Durchfluss von: " + flow + "l/min.");
    }
 
    public void mainTeilB(String[] args) {
        // Your Code here
    }
 
    public void mainTeilC(String[] args) {
        // Your Code here
    }
 
 
    public double getTrapesoidArea(double b1, double b2, double a) {
        double area = a * (b1 + b2) / 2;
        System.out.println("Trapezfläche: " + area);
        return area;
 
    }
 
 
    public double getFlow(double area, double velocity) {
        double Flow = velocity * area;
        System.out.println("Durchfluss: " + Flow);
        return Flow;
    }
}

Und diese Klasse dann extern irwo anderst aufrufen und mit
Java:
object1.mainTeilA(null) // anstatt null halt deine Parameter einsetzen
benutzen.
 
Zuletzt bearbeitet:
V

vanny

Gast
Java:
public class Flow {

    
    public double getTrapesoidArea(double b1, double b2, double a) {
        double area = a * (b1 + b2) / 2;
        System.out.println("Trapezfläche: " + area);
        return area;
 
    }
    
    public double getFlow(double area, double velocity) {
        double Flow = velocity * area;
        System.out.println("Durchfluss: " + Flow);
        return Flow;
    }
	
    public static void main(String[] args) {
    	

    	double a = 12; // Höhe des Trapez
        double b1 = 7; // Länge einer der beiden parallelen Seiten
        double b2 = 5; // Länge einer der beiden parallelen Seiten
        double velocity = 10; // Durchflussgeschwindigkeit
    	
		Flow meinFlow = new Flow();
		double area = meinFlow.getTrapesoidArea(a, b1, b2);
        double flow = meinFlow.getFlow(area, velocity);
        System.out.println("Das Trapez mit der Fläche: " + area + "m² hat ein Durchfluss von: " + flow + " l/min.");
	}
}

ich weiss nich, wie du zu dem Code kommst und warum da alles static ist, aber so funktioniert es

Ausgabe:
Trapezfläche: 47.5
Durchfluss: 475.0
Das Trapez mit der Fläche: 47.5m² hat ein Durchfluss von: 475.0l/min.
 
Zuletzt bearbeitet von einem Moderator:
P

pappawinni

Gast
Na, so richtig nach Konzept schaut das ja nicht aus.
Wozu werden denn da "args" übergeben?
Warum heissen die Methoden mainTeilA, mainTeilB, hätte es da nichts sprechenderes gegeben?
Wozu überhaupt ein Programm, wenn alles fest vorgegeben ist?
Das Ergebnis ist dann ja auch immer das Gleiche, nichtwahr?
Lustig find ich "package javaFürAnfänger;", also so richtig fett deutsch mit Umlauten und dann kommt sowas wie "Flow" und "getTrapesoidArea", aber gut, jedem nach seinem Geschmack :D

Also ich denk, ich hätte vielleicht neben der Klasse Flow noch eine Klasse TrapezRohr erzeugt.
Für diese Klasse hätte ich dann Methoden wie z.B.
set, get, und querschnitt, durchflussmenge erstellt.

In der Flow-Klasse hätt ich dann nach Bedarf Instanzen der Klasse TrapezRohr erstellt und deren Methoden aufgerufen, wenn ich nur Java könnte.
 

TschavaNuub

Mitglied
Vielen Dank für die Hilfe, wieder was gelernt :)! Der Code ist aus der Angabe, deshalb auch mainTeilA, mainTeilB und mainTeilC, jeweils für die 3 verschiedenen Teile der Aufgabe.

Danke nochmal und gute Nacht!!
 
H

hüteüberhüte

Gast
So geht das nach OOP:

Java:
package javaforum;

public class Viereck {

    private final int A;
    private final int B;

    public Viereck(int a, int b) {
        A = a;
        B = b;
    }

    public String toString() {
        return super.toString() + ", A=" + A + ", B=" + B;
    }

    public int getA() {
        return A;
    }

    public int getB() {
        return B;
    }

    public int getUmfang() {
        return (A + B) * 2;
    }

    public int getFlaeche() {
        return A * B;
    }
}


Und noch ne main:

Java:
    public static void main(String[] args) {
        for (int i = 0; i < 10; i++) {
            Viereck v = new Viereck(i * i, (int) Math.pow(i, i));
            System.out.println(v);
            System.out.println("Umfang " + v.getUmfang());
            System.out.println("Fläche " + v.getFlaeche());
            System.out.println();
        }
    }
 
Zuletzt bearbeitet von einem Moderator:

TschavaNuub

Mitglied
Sooooooooo, Aufgabe 1 hab ich dank eurer Hilfe erfolgreich abschließen können.
Nun zu Aufgabe Nr.: 2 :D ich soll die Energiemenge berechnen, die benötigt wird um Wasser zu erwärmen. Soweit hab ichs bis jetzt:
Java:
package aufgabe_2;

public class Aufgabe_2 {

	static double deltaHSm = 334; // kJ/kg Schmelzwärme
	static double deltaHV = 2256; // kJ/kg Kondensationswärme
	static double m = 15; // Masse

	static double T1 = -15.6; // Startemperatur
	static double T2 = -5.1; // Endtemperatur

	public static void main(String[] args) {

		double Cp = 4.2; // spezifische Wärme von flüssigem Wasser

		double deltaT = T1 - T2;
		if (T1 < -273.15 | T2 < -273.15) {
			System.out.println("Ungueltiger Wert!");
		}
		if (deltaT < 0) {
			deltaT *= -1;
		}
		double Q1 = getQ1(m, Cp, deltaT);
		double Q2 = getQ2(m, deltaHSm);
		double Q3 = getQ3(m, deltaHV);
		double Q = getWaermeenergieGes(Q1, Q2, Q3);

		System.out.println("deltaT = " + deltaT);
		if (T1 <= 0) {
			System.out.println("Um " + m + " kg Eis von " + T1 + "°C auf " + T2
					+ "°C zu erwärmen, muss " + Q
					+ "kJ Energie zugegführt werden.");
		} else if (T1 > 0) {
			System.out.println("Um " + m + " kg Wasser von " + T1 + "°C auf "
					+ T2 + "°C zu erwärmen, muss " + Q
					+ "kJ Energie zugeführt werden.");
		}

	}

	public static double getQ1(double m, double Cp, double deltaT) {
		if (T1 < 0 & T2 > 0) {
			double Q1 = -T1 * 2 * m + 4.2 * T2;
			System.out.println("Q1 = " + Q1);
			return Q1;
		} else if (T1 > 100) {
			double Q1 = deltaT * 4.2 * m;
			System.out.println("Q1 = " + Q1);
			return Q1;
		} else if (T1 <= 100 & T2 > 100) {
			double Q1 = ((100 - T1) * 4.2 + 2 * (T2 - 100)) * m;
			System.out.println("Q1 = " + Q1);
			return Q1;
		} else if (T1 < 0 & T2 < 0) {
			double Q1 = 2 * deltaT * m;
			System.out.println("Q1 = " + Q1);
			return Q1;
		}
		double Q1 = m * Cp * deltaT;
		System.out.println("Q1 = " + Q1);
		return Q1;
	}

	public static double getQ2(double m, double deltaHSm) {
		if (T1 < 0 & T2 < 0) {
			m = 0;
		}
		double Q2 = m * deltaHSm;
		System.out.println("Q2 = " + Q2);
		return Q2;
	}

	public static double getQ3(double m, double deltaHV) {
		if (T1 <= 100 & T2 <= 100) {
			m = 0;
		} else if (T1 > 100 & T2 > 100) {
			m = 0;
		}

		double Q3 = m * deltaHV;
		System.out.println("Q3 = " + Q3);
		return Q3;
	}

	public static double getWaermeenergieGes(double Q1, double Q2, double Q3) {
		if (T1 < 0 & T2 < 0) {
			Q2 = 0;
			Q3 = 0;
		}
		double WaermeGes = Q1 + Q2 + Q3;
		return WaermeGes;

	}

}

Ich kann die notwendige Energiemenge für einen Fall, also für jeweils ein T1 und ein T2, berechnen. Laut Aufgabenstellung soll ich aber 7 verschiedene Fälle gleichzeitig berechnen und in der Console ausgeben. Meine Frage lautet nun, wie ich das am vernünftigsten anstelle ohne den obigen Code 7-mal zu kopieren.

Vielen Dank im Voraus!
 

ARadauer

Top Contributor
Na, so richtig nach Konzept schaut das ja nicht aus.
Wozu werden denn da "args" übergeben?
Weil so eine main Methode in Java aussieht.
Warum heissen die Methoden mainTeilA, mainTeilB, hätte es da nichts sprechenderes gegeben?
Um das Problem zu verdeutlichen und uns nicht mit Fachlichkeiten abzulegen
Wozu überhaupt ein Programm, wenn alles fest vorgegeben ist?
Um sich mal auf das Problem konzentrieren zu können....
 

Andi_CH

Top Contributor
Ja logisch musst du den Code 7 mal kopieren :D

Nein Blödsinn - statt ein Main eine Methode schreiben und die aus dem Main 7 mal aufrufen ist natürlich die richtige Variante
 

TschavaNuub

Mitglied
Ja logisch musst du den Code 7 mal kopieren :D

Nein Blödsinn - statt ein Main eine Methode schreiben und die aus dem Main 7 mal aufrufen ist natürlich die richtige Variante

Danke für die schnelle Antwort :toll:

hmm, das heißt ich lösch das public static void main(String[] args) und führe dort eine Methode ein, die mir dann für jeden Fall die Energiemenge berechnet?! Das versteh ich net so ganz...

Das Blöde daran ist, dass T1 und T2 in mehreren Methoden verwendet wird und somit als static double direkt unter public class Aufgabe_2 { deklariert werden muss...oder versteh ich das falsch?! ???:L

In den Übungseinheiten haben wir zwar Methoden gebaut die mehrere Variablen verwenden, jedoch nur für einen Fall...
 

timbeau

Gesperrter Benutzer
Okay, du hast jetzt mehrere Möglichkeiten.

Füge mal zwischen die Main und die berechnenden Methoden gedanklich eine Ebene ein, in der du die verschiedenen Werte W erstellst. Nun rufst du der Reihe nach die berechnenden Methoden mit den Werten w1,w2...w7 € W auf.
 

Gossi

Bekanntes Mitglied
Wie wäre es mit sowas?

Java:
class Aufgabe_2 {
    static double deltaHSm = 334; // kJ/kg Schmelzwärme
    static double deltaHV = 2256; // kJ/kg Kondensationswärme
    static double m = 15; // Masse
 
    static double T1 = -15.6; // Startemperatur
    static double T2 = -5.1; // Endtemperatur

    public [rueckgabewert] berechneEnergiemenge([parameter die du uerbegeben musst zur berechnung]) {
        //Berechne die Energiemenge
        //Gib sie zurueck
    }

    public static void main(String[] args) {
        Aufgabe_2 aufgabe = new Aufgabe_2();
        aufgabe.berechneEnergieMenge([parameter]);
    }
}

mit [c]aufgabe.berechneEnergieMenge([parameter])[/c] führst du dann die Berechnung durch, die momentan bei dir in der main steht...
 

TschavaNuub

Mitglied
Yeah, habs jetzt geschafft :)
Danke Gossi, dein Hinweis hat mir die Augen geöffnet :)

Danke auch an alle anderen!!

Hier der fertige Code:

Java:
package aufgabe_2;

public class Aufgabe_2 {
	static double Cp = 4.2;
	static double deltaHSm = 334; // kJ/kg
	static double deltaHV = 2256; // kJ/kg
	static double m = 15;

	// static double T1 = 112.7;
	// static double T2 = 133.4;

	public static void main(String[] args) {
		Aufgabe_2 aufgabe = new Aufgabe_2();
		aufgabe.getEnergie(-15.6, -5.1);
		aufgabe.getEnergie(-15.6, 32.4);
		aufgabe.getEnergie(-15.6, 122.5);
		aufgabe.getEnergie(-15.6, 32.4);
		aufgabe.getEnergie(16.7, 32.4);
		aufgabe.getEnergie(16.7, 132.5);
		aufgabe.getEnergie(112.7, 133.4);
	}

	public void getEnergie(double T1, double T2) {
		double Q1 = getQ1(m, Cp, T1, T2);
		double Q2 = getQ2(m, deltaHSm, T1, T2);
		double Q3 = getQ3(m, deltaHV, T1, T2);
		getWaermeenergieGes(Q1, Q2, Q3, T1, T2);

	}

	// double deltaT = getDeltaT(T1, T2);
	// double Q1 = getQ1(m, Cp, deltaT);
	// double Q2 = getQ2(m, deltaHSm);
	// double Q3 = getQ3(m, deltaHV);
	// double Q = getWaermeenergieGes(Q1, Q2, Q3);
	//

	public static double getQ1(double m, double Cp, double T1, double T2) {
		double deltaT = T1 - T2;
		if (T1 < -273.15 | T2 < -273.15) {
			System.out.println("Ungueltiger Wert!");
		}
		if (deltaT < 0) {
			deltaT *= -1;
		}
		if (T1 < 0 & T2 > 0) {
			double Q1 = -T1 * 2 * m + Cp * T2;
			// System.out.println("Q1 = " + Q1);
			return Q1;
		} else if (T1 > 100) {
			double Q1 = deltaT * 2 * m;
			// System.out.println("Q1 = " + Q1);
			return Q1;
		} else if (T1 <= 100 & T2 > 100) {
			double Q1 = ((100 - T1) * Cp + 2 * (T2 - 100)) * m;
			// System.out.println("Q1 = " + Q1);
			return Q1;
		} else if (T1 < 0 & T2 < 0) {
			double Q1 = 2 * deltaT * m;
			// System.out.println("Q1 = " + Q1);
			return Q1;
		}
		double Q1 = m * Cp * deltaT;
		// System.out.println("Q1 = " + Q1);
		return Q1;

	}

	public static double getQ2(double m, double deltaHSm, double T1, double T2) {
		if (T1 < 0 & T2 < 0) {
			m = 0;
		} else if (T1 > 0 & T2 > 0) {
			m = 0;
		}
		double Q2 = m * deltaHSm;
//		System.out.println("Q2 = " + Q2);
		return Q2;
	}

	public static double getQ3(double m, double deltaHV, double T1, double T2) {
		if (T1 <= 100 & T2 <= 100) {
			m = 0;
		} else if (T1 > 100 & T2 > 100) {
			m = 0;
		}

		double Q3 = m * deltaHV;
//		System.out.println("Q3 = " + Q3);
		return Q3;
	}

	public static double getWaermeenergieGes(double Q1, double Q2, double Q3,
			double T1, double T2) {
		if (T1 < 0 & T2 < 0) {
			Q2 = 0;
			Q3 = 0;
		}
		double WaermeGes = Q1 + Q2 + Q3;
		if(T1<0){
			System.out.println("\nUm Eis von " + T1 + "°C auf " + T2
					+ "°C zu erwärmen, muss " + WaermeGes + "kJ zugeführt werden.");
		}else if (T1>0){
			System.out.println("\nUm Wasser von " + T1 + "°C auf " + T2
				+ "°C zu erwärmen, muss " + WaermeGes + "kJ zugeführt werden.");
		}
		return WaermeGes;

	}

}
 
Zuletzt bearbeitet:

Neue Themen


Oben