# Methode aufrufen funktioniert nicht ganz - Rückgabewert Bool



## David-Clp (27. Apr 2007)

Hallo alle zusammen,

ich habe hier ein kleines Java Programm, komme allerdings nicht weiter. Die meiner Meinung nach falschen Zeilen habe ich kommentiert. 

Ich möchte gerne die Variable vom Typ boolean in die main reingeben und dort via if Schleife auswerten, das klappt aber nicht. Eclipse sagt folgendes:

Exception in thread "main" java.lang.Error: Unresolved compilation problems: 
	ergebnis cannot be resolved
	ergebnis cannot be resolved
	eingabe cannot be resolved
	eingabe cannot be resolved

Kann mir jemand eventuell einen Tipp geben? Das wäre echt super nett...



```
public class Palindrom {
	
	public static boolean testen(String[] args){	//Hier eventuell ein Fehler?	
                                boolean ergebnis;
		String eingabe = "Otto"; 
		int i = 0;
		int laengemax = eingabe.length();
		int laengemin = laengemax / laengemax;
		
			
				for (i = 1; i <= eingabe.length(); i++){
					
					if(eingabe.charAt(laengemax) == eingabe.charAt(laengemin)){
					ergebnis = true;	
					}
					else 
						ergebnis = false;
					
					laengemax--;
					laengemin++;
		
				}
				
		return ergebnis;
	}
	
	
	public static void main(String[] args) {

		testen(ergebnis); //Hier eventuell ein Fehler?
		
		if (ergebnis = true){
			System.out.println("Das Wort"+eingabe+" ist ein Palindrom");
		}
		else
			System.out.println("Das Wort"+eingabe+" ist kein Palindrom");

	}

}
```


----------



## Ariol (27. Apr 2007)

du hast keine Variable "ergebnis angelegt"


----------



## Dadvid-CLP (27. Apr 2007)

Danke für die Antwort,

allerdings habe ich doch folgendes stehen:


```
boolean ergebnis;
```

ist etwas eingerückt oben in der Methode testen, vielleicht hast du das übersehen?


----------



## SlaterB (28. Apr 2007)

in der main fehlt sie,

falsch:
testen(ergebnis);

richtig:
boolean ergebnis = testen(null);

(Parameter String[] args wird nicht genutzt?)


----------



## Dadvid-CLP (28. Apr 2007)

Danke für die vielen tollen Antworten bisher, aber auch jetzt erscheint immer noch folgendes:

Exception in thread "main" java.lang.Error: Unresolved compilation problem: 
	The local variable ergebnis may not have been initialized


----------



## Ariol (28. Apr 2007)

```
public class Palindrom {
   
   boolean ergebnis = false; <-- muss ausserhalb der Methode stehen, wenn mehrere Methoden darauf zugreifen sollen

   public static boolean testen(String eingbabe){   //Die Eingabe als Parameter mitliefern
                                
      //int i = 0; <--kann man direkt in der Schleife initialisieren - Java != C
      int laengemax = eingabe.length();
      int laengemin = 1;
      //int laengemin = laengemax / laengemax;<--Warum so Seltsam??
      
         
            for (int i = 1; i <= eingabe.length(); i++){
               
               //So klappt deine Abfrage nicht wirklich! Versuchs mal mitt dem Wort ruhr
               //Da wird als letzes r mit r verglichen und somit true ausgegeben
               //Außerdem ist 'O' != 'o'

               if(eingabe.charAt(laengemax) == eingabe.charAt(laengemin)){
               ergebnis = true;   
               }
               else
                  ergebnis = false;
               
               laengemax--;
               laengemin++;
      
            }
            
      return ergebnis;
   }
   
   
   public static void main(String[] args) {

       String eingabe = "Otto";
      
      if (testen(eingabe)){
         System.out.println("Das Wort"+eingabe+" ist ein Palindrom");
      }
      else
         System.out.println("Das Wort"+eingabe+" ist kein Palindrom");

   }

}
```


----------



## Marcel_Handball (28. Apr 2007)

```
public class Palindrom {
   
   public static boolean testen(String eingabe){ 
      boolean ergebnis=true;
      int laengemax = eingabe.length()-1;
      int laengemin = 0;
      
      for (int i=0; i < eingabe.length()/2; i++){
    	  
          if(eingabe.charAt(laengemax) == eingabe.charAt(laengemin)){
          ergebnis = true;   
          }
          else
             return false;
          
          laengemax--;
          laengemin++;
 
       }
            
      return ergebnis;
   }
   
   
   public static void main(String[] args) {
	   String eingabe="oottoo".toLowerCase();
	   boolean ergebnis = testen(eingabe);
      
      if (ergebnis){
         System.out.println("Das Wort "+eingabe+" ist ein Palindrom");
      }
      else
         System.out.println("Das Wort "+eingabe+" ist kein Palindrom");
   }

}
```


----------



## David-Clp (28. Apr 2007)

Danke Ariol, deine Ausführungen fand ich sehr gelungen und bin jetzt ein Stückchen weiter. Allerdings funktioniert als einziges immer noch nicht, dass ich Ergebnis übergeordnet definiere, es erscheint folgende Fehlermeldung:

Exception in thread "main" java.lang.Error: Unresolved compilation problem: 
	Cannot make a static reference to the non-static field ergebnis


```
boolean ergebnis = false; <-- muss ausserhalb der Methode stehen, wenn mehrere Methoden darauf zugreifen sollen
```

funktioniert daher nicht. Hast du oder jemand anderes einen kleinen Tipp? Handballs Lösung geht mir schon ein wenig zu weit, ich wollte es schon gerne selber machen mit meinem Wissen, aber ich bekomme ja leider keine Ausgabe hin...


----------



## Leroy42 (28. Apr 2007)

Bevor ich dir jetzt sage daß du die Variable static machen mußt
und damit deinen falschen Weg noch unterstütze, habe ich das
Programm mal neu geschrieben, so daß es mit einer Klasse realisiert wird.


```
public class Palindrom {
	boolean isPalindrom(String eingabe) {
	      boolean ergebnis=true; 
	      int laengemax = eingabe.length()-1; 
	      int laengemin = 0; 
	      
	      for (int i=0; i < eingabe.length()/2; i++){ 
	          if(eingabe.charAt(laengemax) != eingabe.charAt(laengemin)) 
	             return false; 
	          laengemax--; 
	          laengemin++; 
	       } 
	      return ergebnis; 
	}
	public static void main(String[] args) {
		Palindrom pali = new Palindrom();
		String wort;
		
		wort = "oottoo";
		System.out.printf("Das Wort %s ist %sein Palindrom%n", wort, pali.isPalindrom(wort) ? "" : "k");
		
		wort = "ootto";
		System.out.printf("Das Wort %s ist %sein Palindrom%n", wort, pali.isPalindrom(wort) ? "" : "k");
	}

}
```

Deine testen(isPalindrom) - Methode funktionierte auf Anhieb.    :applaus:


----------



## David-Clp (5. Mai 2007)

Ich habe nun einfach mal weiter probiert, leider brachten mir die meisten Antworten hier nicht sehr viel, da einfach Befehle verwendet wurden, die ich bis dato nicht kannte, bzw. nicht kenne und nicht verwenden darf. Es ist mir einfach nur wichtig, wenn jemand sagen könnte, wo der Fehler stecken könnte, auch wenn die Methode so nicht funktionieren sollte, würde ich gerne erstmal wissen, das außer der Methode alles falsch ist, denn das ausbessern der Methode kann ich erst dann machen wenn ich überhaupt eine Ausgabe bekomme. Vielen Dank...


```
package Programmieren;

public class Palindrom {
	
	public static void main(String[] args) {		
		
		String eingabe = "Otto"; // Eingabe = Otto, daher müsste es als Palindrom erkannt werden
		
		boolean ergebnis = testen(eingabe); // Der Wert wahr oder falsch der Methode testen wird in ergebnis abgespeichert
		
		if (ergebnis = true){ // Wenn das Ergebnis wahr ist, gebe aus, dass:
			System.out.println("Das Wort ist ein Palindrom!");
		}
		else // Wenn das Ergebnis falsch ist, gebe aus, dass:
			System.out.println("Das Wort ist kein Palindrom!");

	}
	
	public static boolean testen(String eingabe){
		
		int i = 0;
		int laengemax = eingabe.length();
		int laengemin = laengemax / laengemax;
		
				for (i = 1; i <= eingabe.length(); i++){ // Solange wiederholen, bis i = Wortlänge ist 
					
					if(eingabe.charAt(laengemax) == eingabe.charAt(laengemin)){ // Wenn Letzter Buchstabe = Erster Buchstabe dann führe aus
						
					return true;	// Gebe an Klasse ein wahr zurück
					
					laengemax--; // Längemax - 1 = Zweitletzter, Drittlertzter, Viertletzer Buchstabe usw.
					laengemin++; // Längemin + 1 = Erster, Zweiter, Dritter, Vierter Buchstabe usw. 
					
					}
					else // Wenn Buchstaben nicht gleich sind, dann führe folgendes aus
						return false; // Gebe an Klasse ein falsch zurück
		
				}
	}

}
```

Eclipse sagt:

Exception in thread "main" java.lang.Error: Unresolved compilation problems: 
	This method must return a result of type boolean
	Unreachable code

	at Programmieren.Palindrom.testen(Palindrom.java:27)
	at Programmieren.Palindrom.main(Palindrom.java:17)

------------------------------------------------------------------------------------------------------------------


----------



## SlaterB (5. Mai 2007)

der Operation fehlt ein Rückgabewert,
wenn eingabe.length() 0 ist wird die Schleife nicht durchlaufen
und du sagst nicht, was zurückgegeben werde soll, wenn die Schleife nicht durchlaufen wird,
das ist ein inkonsistentes Programm,

schreibe
return false; 
ans Ende der Operation


----------



## David-Clp (5. Mai 2007)

Hallo Slater, aber das beuge ich doch vor, indem ich den String als "Otto" vordefiniere... Da muss er ja die Schleife durchlaufen.


----------



## SlaterB (6. Mai 2007)

quatsch, das ist eine allgemeine (sogar statische) Operation, die kann von jedermann überall aufgerufen werden,
der Compiler schaut doch nicht alle diese Stellen an 

schon erstaunlich genug, dass der Compiler das mit der for-Schleife untersucht aber selbst eine Unterscheidung

```
if (length == 0) {
  return ..
} else {
  for (length) {
   if return
   else return
  }  
}
```
dürfte nicht zu durchschauen sein obwohl narrensicher


----------

