Von Methode in Main-Programm zurückkehren

Status
Nicht offen für weitere Antworten.

Christofer

Mitglied
Zuerst mal Hallo :), bin ganz neu hier und auch noch ein ziemlicher Java-Anfänger, studiere seit einem halben ja Info-Managment und da haben wir als Programmiersprache Java als Unterrichtsgegenstand.

Das Tempo ist relativ hoch für mich als Anfänger und deshalb blick ich bei einigen Sachen auch noch nicht so richtig durch, aber durch sehr viel eigenen Recherche und Eigenarbeit komm ich schön langsam (aber wirklich langsam) ein wenig hinter die Thematik.

Ok dann mal zu meinem Problem. Ich suche heute shcon seit 4 Stunden seit ich auf der Uni bin nach einer Lösung, ich weis net genau wie ich das ganze Problem beschreiben soll. Es handelt sich um ein Rechnenprogramm in das Stringwerte eingelesen werden die vor der Berechnung in die Double-Werte umgewandelt werden.

Dazu hat man ein Hauptprogramm und eine Methode die die Strings in Double-Zahlen umwandelt. Dabei arbeite ich mit einen try, catch anweisung. Das geht so, dass der eingelesen String in eine Double-Zahl umgewandelt werden soll mit Double.parsedouble(s); funktioniert das nicht, wenn man z.B. ein Zeichen eingibt (außer 'q', q dient zum beenden), dann gibt es eine exception und das Programm weist einen daraufhin dass man die Zahl erneut eingeben soll, das Problem ist nun folgendes dass das Einlesen aber nicht in der Methoder sondern im Main-Programm erfolgt. Wie komme ich jetzt zurück in das Main-Programm ... hab schon alles versucht, gibts da einen Befehl? Dazu sei gesagt, dass wir ein halbfertiges Programm als Aufgabe vorgesetzt kriegen und dieses erweitern müssen (wenn ich das Programm selber geschrieben hätte, hätte ich das sowieso ganz anders gemacht ;)).

Zur besseren Verständis schreib ich den Code der Methode rein ich hoffe das reicht.

private static double readNumber(String s) {
double d = 1d;
boolean format = false;

while(!format){
try{
d = Double.parseDouble(s);
format = true;
}

catch (NumberFormatException x){
Out.print("Die Eingabe ist keine Zahl! Geben Sie eine Zahl ein (q-quit): ");

}
}
//Use a try-catch statement to avoid such a situation!
//If the parsing was unsuccessful, the user should be
//prompted with the following message:
//
//Furthermore, put your try-catch statement inside a while-loop
//which runs until a correct double value has been assigned
//to the x variable or the user has entered a "q" for quit.
return d;

}

ich hoffe ihr könnt mir helfen
danke Christofer
 

André Uhres

Top Contributor
Naja, da gibt's ja keine 36 Möglichkeiten: entweder du machst das Einlesen in der Methode, oder du fängst die Exception im Hauptprogramm auf.
 

FelixB

Bekanntes Mitglied
ich verstehe dein Problem nicht ganz. du liest in der Methode ein double ein.

dieses wird mit "return d" zurückgegeben.
 

Christofer

Mitglied
@Andre

ja das ist ja eben mein Problem wie gesagt, ist das eine Aufgabe die wir Lösen müssen. Wir haben das so vorgesetzt bekommen und müssen eine Lösung finden, wie gesagt wenn ich selber das ganze Programm schreiben müsste, würde ich das Einlesen sowieso in der methode machen.

Hier ist die Angabe:
Das Programm Aufgabe10_1 ist eine modifizierte Implementierung der Aufgabe
2.7. Sie müssen sicherzustellen, dass für sx bzw. sy nur solche Strings eingelesen
werden, die als gültige Double-Werte interpretiert werden können. Ungültige
Eingaben sollen mit einer NumberFormatException abgefangen werden. Folgen Sie
den Anweisungen in den Code-Kommentaren um diese Aufgabe zu lösen!
------------------------------------------------

leider bekommen wir oft solche sinnlosen Angaben, aber da ich Java-Neuling bin, weis ich ja nie genau, ob das vielleicht ja doch richtig sein könnte.


@Felix

Im Main wird ein String eingelesen:
public class Aufgabe10_1{
public static void main(String[] args){
while(true){
//read first number
Out.print("Geben Sie die erste Zahl ein (q-quit): ");
String sx = In.readString();

if(sx.equals("q")){
printCiao();
return;
}

double x = readNumber(sx);
-------------------------------------------------------

mit double x = readNumbers(sx); hüpft er dann zur Methode und dort versucht er dann den String zu parsen in Double, gibts da einen Fehler (als wenn man z.B. einen Buchstaben eingibt) gibt es eine Exception und er soll den Benutzer nochmal auffordern eine Zahl einzugeben und hier muss ich dann wieder zurück ins Hauptprogramm ... was aber eben nicht funktioniert da ich keinen Befehl oder Funktion (keine Ahnung) dafür finde.
 

Onkel Hatti

Bekanntes Mitglied
Moinsen

Dafür würde mir spontan folgendes einfallen:

Damit nach Eingabe einer ungültigen zahl nochmals eine Abfrage erfolgt, sollte die Abfrage in einer Schleife laufen:

Code:
while(!(sx=in.ReadString()).equals("q"))
{

}

Innerhalb der Schleife liegt jetzt die Bearbeitung der Eingabe.
Da diese über ein NumberFormatException auf Gültigkeit überprüft werden soll, sollte die Methode die Exception auslösen:

Code:
private Double readNumber(String sx) throws NumberFormatException
{
}

Jetzt kann (muss?) in der Schleife der Methodenaufruf in ein try-catch-Block eingeschlossen werden.
Im catch-Block wird die NumberFormatException ausgewertet. Dort kann jetzt z.B. ausgegeben werden, daß die Eingabe kein Double war. Danach springt das Programm aus dem catch Block und macht weiter im Ablauf - es durchläuft die Schleife erneut.
Solange, bis ein 'q' eingegeben wird.

Gruß
Hatti.
 

Christofer

Mitglied
@Hatti

danke für den Vorschlag ich hab das jetzt mal versucht umzusetzen, aber jetzt kapier ich gar nix mehr ... ich poste einfach mal den ganzen Code

Code:
package esop.ueb10;

import esop.simpleIO.*;

public class Aufgabe10_1{
	public static void main(String[] args){

			//read first number
			String sx = null;
			Out.print("Geben Sie die erste Zahl ein (q-quit): ");
			while(!(sx=In.readString()).equals("q")){ 
			
				double x = readNumber(sx);
			}	
			
			if(sx.equals("q")){
				printCiao();
			}
			
			//read second number
			Out.print("Geben Sie die zweite Zahl ein (q-quit): ");
			String sy = In.readString();
			
			if(sy.equals("q")){
				printCiao();
				return;
			}
			
			double y = readNumber(sy);
						
			//read operation
			Out.print("Geben Sie die Operation ein (q-quit): ");	
			char z = In.readChar();
			if(z == 'q'){
				printCiao();
				return;
			}
			
			String knownOperations = "+-*:q"; 
			while(knownOperations.indexOf(z) < 0){
				Out.println(z + " ist kein gültige Operation!");
				Out.print("Geben Sie ein Operation ein (q-quit): ");	
				z = In.readChar();
				if(z == 'q'){
					printCiao();
					return;
				}
			

			//compute result
			double res = 1d;
			boolean isError = false;
			switch(z){
			case '+': 
				res = x + y;
				break;
			case '-': 
				res = x - y; 
				break;
			case '*': 
				res = x * y; 
				break;
			case ':':
				if (y == 0){
					Out.println("Fehler. Division durch 0");
					isError = true; 
				}else{
					res = x / y;
				}
			}
			if (isError == false){
				Out.println("Ergebnis: "  + x + " " + z + " " + y + " = " + res );
			}
		}
	}

	private static double readNumber(String s) throws NumberFormatException {
		double d = 1d;
		
		try {
			d = Double.parseDouble(s);
		}
		catch (NumberFormatException x){
			Out.print("Die Eingabe ist keine Zahl! Geben Sie eine Zahl ein (q-quit): ");
		}
		//If parameter sy cannot be parsed to a double,
		//the method parseDouble will cast a NumberFormatException.
		
		//Use a try-catch statement to avoid such a situation!
		//If the parsing was unsuccessful, the user should be
		//prompted with the following message:
		//Out.print("Die Eingabe ist keine Zahl! Geben Sie eine Zahl ein (q-quit): ");
		//Furthermore, put your try-catch statement inside a while-loop
		//which runs until a correct double value has been assigned
		//to the x variable or the user has entered a "q" for quit.
		return d;
	}
	
	public static void printCiao(){
		Out.println("Ciao!");
		Out.println("Press any key to continue...");
		In.readChar();
	}
}


so wenn hab jetzt nur mal den Codeteil bearbeitet wo die erste Zahl eingelesen wird sowie die Methode unten umgeschrieben. aber jetzt hab ich das Problem dass er mir das x nicht auflösen kann warum auch immer ...

langsam nervt mich dieser komische Aufbau (das is fast in allen Aufgaben so) unserer Professoren, wäre es nicht einfach wenn ich alles in der Main machen würde, ja ok ich muss dann mehr Code schreiben aber dafür spare ich mir diese ganzen Probleme mit denen ich mich hier rumschlage ... oder was sagt ihr? ... nur das Problem ist halt dass genau das die Aufgabenstellung und ich es nur so machen kann (darf :()
 

Onkel Hatti

Bekanntes Mitglied
Also wenn das in den "//" die Anweisung in englisch des Professors :meld: sind, dann sind meine Ideen schon richtig. :)

Ich mach dir hier nicht die Hausaufgaben - nööööööö. :noe:
Aber:

Die ganze Methode "readNumber" löst eine Exception aus, wenn was nicht stimmt.
In der Methode benutzt du nochmal einen try-catch-Block. Damit ist die Exception aufgebraucht... Das ist also nicht im Sinne des Programmierers. Vielmehr muss der Methodenaufruf in der main-Methode in einen try-catch-Block, innerhalb der "readNumber"-Methode nicht.
Damit wird die Exception dahin weitergereicht.

also in main:

Code:
try
{
   double x = readNumber(sx);
}
catch (NumberFormatException n)
{
   System.out.println("Die Eingabe war fürn A...");
}

Für die Eingabe von sy natürlich das Gleiche.
Die while-Schleife wird solange durchlaufen, bis 'q' eingegeben wird.

Greetz
Hatti
 
G

Guest

Gast
hmm ich hab mir das jetzt nochmal durchgedacht und bin drauf gekommen, dass ich das auch in der Methode selber lösen kann .... hmm naja wenigstens hab ichs nach der ganzen Grübellei heute den ganzen Tag gelöst

Code:
private static double readNumber(String s){
		double d = 1d; //Zahlenformat für die double-Variable
		boolean format = false; //boolean Variable die für die while-Schleife als Bedingung benötigt wird

		do{
			try { //Aufruf der Methode parseDouble, wird die Zahl erfolgreich umgewandelt wird format zu true gesetzt und die Schleife beendet
				d = Double.parseDouble(s); //kann er die Zahl nicht umwandeln, weil es sich vielleicht um einen Buchstaben
				format = true; //handelt dann springt er zum catch-Block, da sich um einen NumberFormatException handelt
			}
			catch (NumberFormatException x){//hier wird der Fehler aufgefangen und behandelt
				Out.print("Die Eingabe ist keine Zahl! Geben Sie eine Zahl ein (q-quit): ");
				s = In.readString();
				if(s.equals("q")){
					printCiao();
				}
			}
		}while (!format);//die Schleife wird solange ausgeführt bis format true ist bzw. false ist

		return d;
	}

danke an alle :)
 

André Uhres

Top Contributor
Dann kannst du ja unten links auf das Häkchen klicken, um so das Problem in diesem Thema als gelöst zu markieren.
 

Onkel Hatti

Bekanntes Mitglied
Naja, fast ganz.

Die Anweisung lautet:

//Furthermore, put your try-catch statement inside a while-loop
//which runs until a correct double value has been assigned
//to the x variable or the user has entered a "q" for quit.

Jetzt steht der try-catch Block nicht innerhalb der while-Schleife. Nur um eine Ecke herum gedacht, weil die Methode innerhalb einer while-Schleife steht.

Gibt nur halbe Punktzahl :)
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
K Methoden Programm ohne Main Methode starten Java Basics - Anfänger-Themen 2
B Java Programm ohne statische Main Methode aufrufen Java Basics - Anfänger-Themen 5
J Programm in main Methode testen Java Basics - Anfänger-Themen 29
K Programm in der main()-Methode starten: Wie? Komme von C++ Java Basics - Anfänger-Themen 11
P Main Methode scheint Constructor aufzurufen, ohne dass es so gecoded ist Java Basics - Anfänger-Themen 2
N Throw an Main Methode übergeben Java Basics - Anfänger-Themen 7
J Die statische Main-Methode ändert Instanzvariable? Java Basics - Anfänger-Themen 10
D Array in Main Methode aus anderer Klasse aufrufen Java Basics - Anfänger-Themen 3
G jButton führt Main Methode nicht richtig aus Java Basics - Anfänger-Themen 3
G Main Methode wird beim ersten Aufruf nicht richtig ausgeführt Java Basics - Anfänger-Themen 1
C60 Methoden Main-Methode erkennt meine Arrays nicht. Java Basics - Anfänger-Themen 7
C Kein Zugriff auf Klassenmethoden in Main Methode Java Basics - Anfänger-Themen 23
N Wozu nutzt man in der Main Methode das args Array? Java Basics - Anfänger-Themen 10
H Warum kann man keine Parameter in die main-Methode packen? Java Basics - Anfänger-Themen 4
KogoroMori21 Methode in der main ausgeben Java Basics - Anfänger-Themen 2
s_1895 zu viele Zeilen in der Main Methode Java Basics - Anfänger-Themen 4
B Wie kann ich etwas vor der Main-Methode ausführen? Java Basics - Anfänger-Themen 21
K Übergabe von Werten (zweidimensionales Array) aus einer Methode an zweidimensionales Array in main() Java Basics - Anfänger-Themen 3
G main Methode Java Basics - Anfänger-Themen 5
1 main-Methode erweitern, Nachfrage nach wiedeholung Java Basics - Anfänger-Themen 2
J main methode Java Basics - Anfänger-Themen 1
E Was kommt in ein Objekt und was in die Main Methode? Java Basics - Anfänger-Themen 8
D java main methode kann nicht kompiliert werden (Erstellen eines Objekts) Java Basics - Anfänger-Themen 6
M String außerhalb der main-Methode Java Basics - Anfänger-Themen 4
scratchy1 ArrayOutOfBoundException in main-Methode Java Basics - Anfänger-Themen 17
P Parameterübergabe, von Methode zu Methode zu main Java Basics - Anfänger-Themen 4
D Compiler-Fehler Aufrufen einer Methode von Main Java Basics - Anfänger-Themen 4
M Methode mit Array als Parameter an Main übergeben Java Basics - Anfänger-Themen 1
W Exception in Main abfangen oder in der Methode? Java Basics - Anfänger-Themen 10
J Timer bauen, Main Methode immer wieder neu starten Java Basics - Anfänger-Themen 13
M Maven Main-Methode Interface und Klasse Java Basics - Anfänger-Themen 2
G Instanzvariable in main-Methode verboten? Java Basics - Anfänger-Themen 3
M Objekt starten von der main-Methode Java Basics - Anfänger-Themen 1
A Methode aufrufen in main-Methode Java Basics - Anfänger-Themen 5
AssELAss Klassen Java Klasse in main-methode ausführen Java Basics - Anfänger-Themen 7
R Methoden Nicht statische Methode aus Main aufrufen Java Basics - Anfänger-Themen 2
J Methode in main-Methode aufrufen Java Basics - Anfänger-Themen 5
M Klassen Main Methode in einer anderen Klasse aufrufen Java Basics - Anfänger-Themen 13
TheMenox Methoden Auslagerung von Code aus der "main" Methode sinnvoll? Java Basics - Anfänger-Themen 70
S Methode auf Main zugreifen Java Basics - Anfänger-Themen 5
S Methoden main-Methode integrieren Java Basics - Anfänger-Themen 2
F Erste Schritte (Gelöst) Anfängerfrage Arraylist ausserhalb der Main Methode Java Basics - Anfänger-Themen 2
N Variablen Variable in Main deklarieren und in anderer Methode nutzen Java Basics - Anfänger-Themen 12
T Mehrere Methoden in der main-Methode verknüpfen und aufeinander anwenden Java Basics - Anfänger-Themen 2
A Methoden Zugriff auf eingelesene Variablen in der main Methode (ohne Änderung der Parameterliste) Java Basics - Anfänger-Themen 4
U Umschreiben ohne main methode ;-) Java Basics - Anfänger-Themen 8
A Fehlermeldung beim aufruf der main Methode Java Basics - Anfänger-Themen 17
F Threads Variable aus einem Thread in main Methode? Java Basics - Anfänger-Themen 9
V Arrays aus eigener Klasse erstellt, zuweisung aber spuckt Fehler in verbindung mit main Methode aus. Java Basics - Anfänger-Themen 3
M Exception von main Methode weiterwerfen? Java Basics - Anfänger-Themen 1
D main-Methode und Tread parallel ausführen Java Basics - Anfänger-Themen 0
A Was stimmt mit Main-Methode nicht? Java Basics - Anfänger-Themen 4
T In main-Methode Parameter übergeben Java Basics - Anfänger-Themen 3
R Methoden Main-Methode verhält sich in .jar anders als in Eclipse Java Basics - Anfänger-Themen 2
P Verständnisproblem main Methode Java Basics - Anfänger-Themen 9
O Main-Methode static modifier umgehen Java Basics - Anfänger-Themen 10
P Verwirrung mit AWT Frame und main Methode Java Basics - Anfänger-Themen 19
T Threads Neuen Thread nicht aus main-Methode starten Java Basics - Anfänger-Themen 3
iB0T Main Methode Variablen übergeben Java Basics - Anfänger-Themen 6
H Applet - main()-Methode Java Basics - Anfänger-Themen 4
S Constructor und Main Methode Java Basics - Anfänger-Themen 3
N Methoden Main Methode Java Basics - Anfänger-Themen 7
B main methode ohne public Java Basics - Anfänger-Themen 5
E Methoden Methode in main-Methode ausführen Java Basics - Anfänger-Themen 3
R Fragen über Fragen, main-Methode und Co. Java Basics - Anfänger-Themen 32
1 Werte zur main Methode übergeben Java Basics - Anfänger-Themen 5
J Main-Methode Java Basics - Anfänger-Themen 14
B Erste Schritte ergebnis der funktion in der main-methode ausgeben Java Basics - Anfänger-Themen 7
T Klasse in Main Methode Java Basics - Anfänger-Themen 3
C Main Methode überschreibt Werte Java Basics - Anfänger-Themen 3
D Von einer Methode auf eine lokale Variable in der Main zugreifen? Java Basics - Anfänger-Themen 15
M andere Main Methode Java Basics - Anfänger-Themen 5
I Nur main-Methode über Konsole aufrufbar? Java Basics - Anfänger-Themen 3
D Jar klappt nicht trotz main Methode Java Basics - Anfänger-Themen 19
D main Methode? Java Basics - Anfänger-Themen 19
M Main methode innerhalb von Java aufrufen Java Basics - Anfänger-Themen 11
M Frage zu main Methode Java Basics - Anfänger-Themen 11
B Problem bei dem erstellen einer Main Methode Java Basics - Anfänger-Themen 4
S Main Methode String... args Java Basics - Anfänger-Themen 2
S Main-Methode aus anderer Klasse heraus starten Java Basics - Anfänger-Themen 8
X Array von Methode in Main übergeben? Java Basics - Anfänger-Themen 11
G Immer mehr Threads beim Selbstaufruf der main-Methode Java Basics - Anfänger-Themen 3
K Variable von main- Methode in Untermethode "holen" Java Basics - Anfänger-Themen 3
A main Variable in Methode ansprechen Java Basics - Anfänger-Themen 4
T Datentypen Verständnisproblem mit main Methode Java Basics - Anfänger-Themen 3
Y Ergebnis einer Berechnung an die Main Methode übergeben Java Basics - Anfänger-Themen 11
N main Methode und String Java Basics - Anfänger-Themen 11
W Parameter für die main-Methode Java Basics - Anfänger-Themen 7
C Konstanten zu einfachen Berechnungen unterhalb Main Methode Java Basics - Anfänger-Themen 19
J arraylist ausserhalb der main Methode zugänglich machen (Elemente adden und updaten) Java Basics - Anfänger-Themen 4
A Fehlende Main-Methode? Java Basics - Anfänger-Themen 12
Z Funktionsaufruf in der main-Methode Java Basics - Anfänger-Themen 12
S Problem mit main Methode Java Basics - Anfänger-Themen 2
V Wofür steht das args / arguments in Main Methode Java Basics - Anfänger-Themen 4
I Fehlendes Argument in Main-Methode abfangen Java Basics - Anfänger-Themen 15
S main-Methode gibt unerwartetes Ergebnis aus Java Basics - Anfänger-Themen 4
M Parameter an main()-Methode Java Basics - Anfänger-Themen 6
M Unterschied main-Methode und Konstruktor Java Basics - Anfänger-Themen 13
Spin class und main Methode Java Basics - Anfänger-Themen 6
J unterprogramm in main-methode einbinden Java Basics - Anfänger-Themen 9

Ähnliche Java Themen

Neue Themen


Oben