Methode als Parameter übergeben

minipom

Mitglied
Hi,

ich bin den ganzen Tag schon am Java Lernen und langsam geht es bergauf, ich habe jetzt aber eine Frage zu dieser Aufgabenstellung:

fr652ajl.png


Ich habe das ganze so gelöst, aber ich weiß nicht genau was der Prof mit dem "...werden der Methode als double Parameter übergeben" meint.

Hier meine Lösung:

[Java]
import java.util.Scanner;

public class berechneKegelvolumen {

public static void main(String[]args) {

System.out.println("Geben Sie die Höhe ein");
double h = new Scanner(System.in).nextDouble();
System.out.println("Geben Sie den Radius ein");
double r = new Scanner(System.in).nextDouble();

if ((r < 0) || (h < 0))
{
System.out.println(Double.NaN);
}
else
{
double volumen;
volumen = ((r*r*Math.PI*h)*1/3);
System.out.println("Das Volumen ist: " +volumen);

}
}
}
[/Java]
 
Zuletzt bearbeitet von einem Moderator:
du solltest mehr über das 'schreiben Sie eine Methode berechneKegelvolumen()' nachdenken, statt eine derartige Klasse zu schreiben,
wenn es erstmal eine Methode gibt, dann sind auch Parameter zu übergeben, falls dir diese Begriffe etwas sagen
 
du solltest mehr über das 'schreiben Sie eine Methode berechneKegelvolumen()' nachdenken, statt eine derartige Klasse zu schreiben,
wenn es erstmal eine Methode gibt, dann sind auch Parameter zu übergeben, falls dir diese Begriffe etwas sagen


Ich habe es mal angepasst, aber bekomme leider einen Fehler:
[Java]
import java.util.Scanner;

public class uebung11 {

public static void main(String[]args)
{

System.out.println("Geben Sie die Höhe ein");
double h = new Scanner(System.in).nextDouble();
System.out.println("Geben Sie den Radius ein");
double r = new Scanner(System.in).nextDouble();

berechneKegelvolumen(h,r);
}

public static double berechneKegelvolumen(double zahl1, double zahl2) // hier ist der Fehler in der Zeile Eclipse unterstreicht es mir, was ist da falsch?

{

if ((zahl1 < 0) || (zahl2 < 0))
{
System.out.println(Double.NaN);
}
else
{
double volumen;
volumen = ((zahl2*zahl2*Math.PI*zahl1)*1/3);
System.out.println("Das Volumen ist: " +volumen);

}
}
}
[/Java]
 
du hast als rückgabe typ double gibst aber nix zurück...

das ist eigenltich genau das was eclipse sagt

This method must return a result of type double

also statt der ausgabe in der methode machst du ein return volumen und gibst es beim aufrufer aus

drück mal strg+shift+F
 
du hast als rückgabe typ double gibst aber nix zurück...

das ist eigenltich genau das was eclipse sagt



also statt der ausgabe in der methode machst du ein return volumen und gibst es beim aufrufer aus

drück mal strg+shift+F
:toll:
OK stimmt, aber welchen return Befehl muss ich jetzt geben und warum?

return zahl1;

oder

return zahl2;

Will das Ganze jetzt richtig verstehen, fand Java am Anfang echt doof, aber umso mehr ich damit mache umso mehr mag ich es.
 
das hat weniger mit Java zu tun als mit Intelligenz

Chef gibt Mitarbeiter X zwei Zahlen zahl1 und zahl2 , und sagt ihm, er soll ein Volumen berechnen,
was muss X am nächsten Tag zurückgeben, zahl1, vielleicht, die der Chef schon kennt? oder zahl2? oder doch das berechnete Volumen?

interessant wird natürlich noch was im if-Fall zurückzugeben ist..
 
außerhalb des else-Blocks ist die Variable nicht sichtbar,

wenn du nur
> double volumen;
davor ziehst, dann muss noch ein Wert hin, sonst nicht initialisiert im if-Fall,
(edit: ach, da gibts ja auch einen Wert, ich dachte eben nur eine Ausgabe)

die Auswertung sollte generell eher in die main-Methode, etwas zurückgeben was dort nicht verwendet wird ist unschön
 
Zuletzt bearbeitet von einem Moderator:
vielen Dank erstmal für die Hilfe, ich habe das jetzt mit der Methode verstanden, aber ich verstehe einfach nicht, wo ich jetzt genau den return Befehl einbauen muss, kannst du mir zeigen wo im folgenden Code der "return volumen;" Befehl hin muss, ich komm einfach nichtmehr weiter :/

Java:
import java.util.Scanner;

public class uebung11 {

	public static void main(String[]args) 
	{		
		System.out.println("Geben Sie die Höhe ein");
double h = new Scanner(System.in).nextDouble();
		System.out.println("Geben Sie den Radius ein");
double r = new Scanner(System.in).nextDouble();

	berechneKegelvolumen(h,r);
	}
public static double berechneKegelvolumen(double zahl1, double zahl2)
{
if ((zahl1 < 0) || (zahl2 < 0))
{
System.out.println(Double.NaN);	
}
else
	{
	double volumen;
 volumen = ((zahl2*zahl2*Math.PI*zahl1)*1/3);
 System.out.println("Das Volumen ist: " +volumen);
	}
}

}
 
Java:
import java.util.Scanner;

public class Uebung11 {

	public static void main(String[] args) {
		Scanner input = new Scanner(System.in);
		System.out.println("Geben Sie die Höhe ein");
		double h = input.nextDouble();
		System.out.println("Geben Sie den Radius ein");
		double r = input.nextDouble();

		double volumen = berechneKegelvolumen(h, r);
		
		System.out.println("Bei einem Radius von " + r + " und einer Höhe von "
				+ h + " besitzt der Kegel ein Volumen von " + volumen + ".");
		input.close();
	}

	public static double berechneKegelvolumen(double h, double r) {
		double volumen;
		if (h < 0 || r < 0) {
			volumen = Double.NaN;
		} else {
			volumen = r * r * h * Math.PI / 3.0;
		}
		return volumen;
	}

}
oder
Java:
public static double berechneKegelvolumen(double h, double r) {		
		if (h < 0 || r < 0) {
			return Double.NaN;
		} 
		return r * r * h * Math.PI / 3.0;		
	}
 
Hey Minipom!

Also, so sieht das am besten aus. Da Du frustriert klingst und das viele vom Programmieren abschrekct, will ich Dir jetzt mal helfen:

Java:
public class uebung11 {

	public static void main(String[] args) {
		System.out.println("Geben Sie die Höhe ein");
		double h = new Scanner(System.in).nextDouble();
		System.out.println("Geben Sie den Radius ein");
		double r = new Scanner(System.in).nextDouble();

		double ergebnis = berechneKegelvolumen(h, r);
		if (ergebnis == Double.NaN) {
			System.out.println("Ups! Du hast ungültige Werte eingegeben!");
		} else {
			System.out.println("Das Ergebnis ist: " + ergebnis);
		}
	}

	public static double berechneKegelvolumen(double zahl1, double zahl2) {
		if ((zahl1 < 0) || (zahl2 < 0)) {

			return Double.NaN;

		} else {
			double volumen;
			volumen = ((zahl2 * zahl2 * Math.PI * zahl1) * 1 / 3);

			return volumen;
		}
	}

}

Anregungen:
1. CTRL + SHIFT + F rückt Dir den ganzen Code mal wieder gerade... Öfter mal machen, dann ist es deutlich übersichtlicher!!!
2. Wenn die Methode double zurückgeben soll, dann bau nicht in die Methode System.out's ein... Sondern lass die Methode wirklich bei ihrer eigentlichen Afugabe sein: Methode soll double zurückgeben, die Ausgabe (mittels System.out) passiert in der main-methode.
3. Für den Fall, dass Zahl1 oder Zahl2 nicht stimmt, arbeitest Du mit Double.NaN
 
Danke an Jcoda für die Lösungen, wir hatten allerdings den Befehl input.close(); noch nicht gelernt, deswegen ist die Lösung eher nicht so gut für mich, aber trotzdem vielen Dank!

Hey Minipom!

Also, so sieht das am besten aus. Da Du frustriert klingst und das viele vom Programmieren abschrekct, will ich Dir jetzt mal helfen:

Java:
public class uebung11 {

	public static void main(String[] args) {
		System.out.println("Geben Sie die Höhe ein");
		double h = new Scanner(System.in).nextDouble();
		System.out.println("Geben Sie den Radius ein");
		double r = new Scanner(System.in).nextDouble();

		double ergebnis = berechneKegelvolumen(h, r);
		if (ergebnis == Double.NaN) {
			System.out.println("Ups! Du hast ungültige Werte eingegeben!");
		} else {
			System.out.println("Das Ergebnis ist: " + ergebnis);
		}
	}

	public static double berechneKegelvolumen(double zahl1, double zahl2) {
		if ((zahl1 < 0) || (zahl2 < 0)) {

			return Double.NaN;

		} else {
			double volumen;
			volumen = ((zahl2 * zahl2 * Math.PI * zahl1) * 1 / 3);

			return volumen;
		}
	}

}

Anregungen:
1. CTRL + SHIFT + F rückt Dir den ganzen Code mal wieder gerade... Öfter mal machen, dann ist es deutlich übersichtlicher!!!
2. Wenn die Methode double zurückgeben soll, dann bau nicht in die Methode System.out's ein... Sondern lass die Methode wirklich bei ihrer eigentlichen Afugabe sein: Methode soll double zurückgeben, die Ausgabe (mittels System.out) passiert in der main-methode.
3. Für den Fall, dass Zahl1 oder Zahl2 nicht stimmt, arbeitest Du mit Double.NaN

WOW! Danke für die Hilfe, ich schau mir jetzt mal alles an und versuche es ganz zu verstehen.
:toll: :toll:
 
Danke an Jcoda für die Lösungen, wir hatten allerdings den Befehl input.close(); noch nicht gelernt, deswegen ist die Lösung eher nicht so gut für mich, aber trotzdem vielen Dank!

Es geht einfach darum, dass du in deinem Code mehrere "anonyme" Scanner verwendest. Ich benutze nur einen und diesen nenne ich input und eigentlich sollte man eben Scanner auch wieder "schließen" das funktioniert eben durch die Methode close() auf der Scanner-Referenz.
 
einen Scanner braucht man nicht wirklich schließen, interessant ist das immer nur in Hinblick auf die Quelle darunter,
einen Scanner auf einen String etwa wird hoffentlich niemand mit close() nerven,

und die Quelle hier ist System.in, da ist das auch nicht nötig, kann immer offen bleiben

wenn man natürlich rein aus Gewohnheit oder in allgemeinen Code das close() hat, schadet das freilich auch nicht,
aber sollte jedenfalls nicht früh im Programm passieren, einmal System.in geschlossen -> keine Eingabe mehr von der Konsole zu lesen 😉
 
Code:
return r * r * h * Math.PI / 3.0;
ist super, so sollten am wenigsten double-Ungenauigkeiten auftreten, das lernt man aber erst nach jahrelanger Erfahrung.

Übersichtlich ist (das early return (weis nicht, ob es so heißt)) es auch.

Stichwörter zum Weiterlesen:
- (Methoden)-Parameter,
- Rückgabe einer Methode,
- Auswertungsreihenfolge usw.,
- double-Arithmetik (wenn dir langweilig is),
- Variablen,
- Scanner (API-Beschreibung) und BufferedReader und Double#parseDouble usw.

Grüßle
 
Zuletzt bearbeitet von einem Moderator:
rant
Methode als Parameter übergeben
ist völlig falsch formuliert. Deine Frage ist ganz anders, es geht um Werte, die AN EINE Methode übergeben werden
Ich habe das ganze so gelöst, aber ich weiß nicht genau was der Prof mit dem "...werden der Methode als double Parameter übergeben" meint.
Wenn du irgendwann mal Erfolg in der IT haben willst, gewöhn dir eine gewisse Präzision an.
 

Neue Themen


Zurück
Oben