TryCatch in Methoden


#1
Hey Leute,
weiß jemand warum der im TRY-Block erstellte IMensch neuerMensch nicht zurückgegeben wird? Wenn man beim Methodenkopf auf die rot unterstrichene Stelle geht, wird angezeigt das ein RETURN fehlt.
Diese Methode neuerMensch gibt an eine andre Methode die das Menü anzeigt durch return den IMensch neuerMensch zurück und dann erst ist das Programm wieder in der Main.
Ich hoffe irgendwer weiß da eine Lösung. Vielen Dank schon einmal.

javastadt.jpg
 
#2
Hi

was passiert, wenn beim "new Mensch" eine Exception auftritt?

Zuerst springts zum catch, dnan weiter zur while-Bedingung.
exceptioncount ist aber schon 2, also raus aus der Schleife.
Zum Methodenende.
Und da wird ein return fehlen.
 
#3
Wenn eine Exception auftritt, also falls statt einem int irgendwas anderes eingegeben wird, soll die Abfrage nach Namen etc nochmal ablaufen, bis alle Angaben stimmen....mit den Angaben soll dann ein IMensch erstellt werden, der in meinem Fall neuerMensch heißt.
wenn ich das return aus dem try-block herausnehme, steht dort das die variablen vorname name etc die ich im try block ja eigentlich initialisiert habe, nicht initialisiert wurden...also bleibt die Initialisierung irgendwie nur innerhalb des tryblocks und ist nicht nach außen sichtbar. Ich habe es mit einem RETURN im Try-Block versucht, jedoch tritt dann eine Fehlermeldung auf, das diese Methode als return-Wert einen IMensch erwartet.
 

melmager

Erfahrenes Mitglied
#4
Na die beiden Zeilen
Code:
Imensch neuerMensch = new Mensch(vorname,nachname,abschluss);
return neuerMensch;
aus dem try Block raus und nach dem While machen...
 
Zuletzt bearbeitet:

melmager

Erfahrenes Mitglied
#6
wenn ich die erstellung von neuerMensch aus dem try block rausnehme, dann steht da die variablen vorname,name und abschluss wurden nicht initialisiert...
Na ja bei meiner IDE ist sowas nur ein Hinweis - übersetzt wird es trotzdem...
aber anyway
dann mach doch ein init der Variablen mit nix :).
Code:
string vorname = null;
// oder
string nachname = "";
int abschluss = 0;
untested addon:
Code:
int count = 0;
do {
  try {
   switch (count) {
     case 0: system.out.print("Vorname : ");
                    vorname = scan.nextline();
                    break;
     case 1: system.out.print(Nachmame: ");
                    nachname = scan.nextline();
                    break;
     case 2: system.out.print(Abschluss: ");
                    abschluss = scan.nextline();
   }
   count++;
  } catch (Exeption ex) {
    System.out.println("Fehlereingabe");
  }
} while (count < 3);
 
Zuletzt bearbeitet:
#7
Wenn ich dann das Programm laufen lassen möchte kommt folgende Fehlermeldung:

Exception in thread "main" java.lang.Error: Unresolved compilation problems:
The local variable vorname may not have been initialized
The local variable nachname may not have been initialized
The local variable abschluss may not have been initialized

und das Programm wird nicht ausgeführt :/
 

youza

Erfahrenes Mitglied
#8
Also ich hab des jetzt ohne die Klasse Mensch gemacht aber des sollte dir auf jeden Fall so weiter helfen:
Java:
import java.io.BufferedReader;
import java.io.InputStreamReader;


public class Test_Something {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		System.out.println(baueMensch());

	}
	private static String baueMensch(){
		String vorname = null;
		// oder
		String nachname = "";
		int abschluss = 0;
		
		int count = 0;
		do{
		  try {
			  BufferedReader console = new BufferedReader(new InputStreamReader(System.in));

		     System.out.print("Vorname : ");
		                    vorname = console.readLine();
		                    
		     System.out.print("Nachname : ");
             				nachname = console.readLine();
             				
		     System.out.print("Abschluss : ");
		     				abschluss = Integer.parseInt(console.readLine());
		     count = 3;
		  } catch (Exception ex) {
		    System.out.println("Fehlereingabe");
		    count++;
		    if(count == 3)
		    {
		    	System.out.println("Dreimal Falsch eingegeben damit bist du der Depp des Jahres servus!");
		    	return null;
		    }
		  }
		}while (count < 3);
		return "Vorname:\t"+vorname+"\nNachname:\t"+nachname+"\nAbschluss:\t"+abschluss;
	}

}