Unerklärlich: Rekursiver Algorithmus gibt falschen Datentyp zurück...

nevermind

Neues Mitglied
Hallo leute!

Ich beiße mir die Zähne aus! Ich möchte einen rekursiven Algorithmus zur Potenzierung von z^n schreiben. Hier mein Code:

Java:
import java.util.*;
public class PotenzierenRekIter {
	
	
	
	static int Potenziere(int n, int z){
		
		if (n==0) {
			return 1;
			
		}
		if (n==1) {
			return z;
		}
		if (n>1) {
			return (Potenziere(n-1,z))*z;
		}
		
		
	}
	
	public static void main(String[] args){
	System.out.println("Welche Zahl soll potenziert werden? >>");
	
	Scanner scan = new Scanner(System.in);	
	int z = scan.nextInt();
	System.out.println("Wie häufig? >>");	
	int n = scan.nextInt();
	
	int ergebnis;
	ergebnis= (int) Potenziere(n,z);
	System.out.println(ergebnis);
		
		
	}

}


Permanent bekomme ich die Fehlermeldung:

Exception in thread "main" java.lang.Error: Unresolved compilation problem:
This method must return a result of type int

at PotenzierenRekIter.Potenziere(PotenzierenRekIter.java:6)
at PotenzierenRekIter.main(PotenzierenRekIter.java:30)


Aber wieso gibt meine Methode denn keinen int Wert zurück?!
Weiß wirklich nicht weiter 🙁

Danke! nevermind
 
Deine Methode gibt keinen int-Wert zurück, weil Bedingungen erfüllt sein müssen, damit die Methode etwas zurückgibt. Sind diese Bedingungen nicht erfüllt, gibt die Methode auch nichts zurück! Entweder du bastelst ein if-else-Konstrukt oder du entfernst unnötige if-clauses.

1. Brauchst du das
Java:
 if (n==0) {
	            return 1;          
	        }
da, wenn
Java:
if (n==1) {
	            return z;
	        }
erfüllt ist, sowieso das erste nicht mehr ausgeführt wird! Somit eine unnötige Überprüfung!

2. Das if um den rekursiven Aufruf ist auch unnötig. Für was musst du prüfen, ob die zahl größer 1 ist, wenn du sowieso schon vorher prüfst, dass die Zahl nicht 1 entspricht?!?!
 
Deine Methode gibt keinen int-Wert zurück, weil Bedingungen erfüllt sein müssen, damit die Methode etwas zurückgibt. Sind diese Bedingungen nicht erfüllt, gibt die Methode auch nichts zurück! Entweder du bastelst ein if-else-Konstrukt oder du entfernst unnötige if-clauses.

1. Brauchst du das
Java:
 if (n==0) {
	            return 1;          
	        }
da, wenn
Java:
if (n==1) {
	            return z;
	        }
erfüllt ist, sowieso das erste nicht mehr ausgeführt wird! Somit eine unnötige Überprüfung!

2. Das if um den rekursiven Aufruf ist auch unnötig. Für was musst du prüfen, ob die zahl größer 1 ist, wenn du sowieso schon vorher prüfst, dass die Zahl nicht 1 entspricht?!?!

Zu 1: Doch, weil man könnte ja auch 0 als n übergeben.
Zu 2: Nötig weil n < 0 anders berechnet wird.
 
Zu 1: Doch, weil man könnte ja auch 0 als n übergeben.
Mal davon abgesehen, dass es mir erst nach dem Post eingefallen ist. 🙂

Zu 2: Nötig weil n < 0 anders berechnet wird.
Das mag sein, aber dafür müsste dann auch entweder ein else-clause darum oder noch ein if-clause und ein else, damit immer etwas returned wird oder ein return ganz am Ende, in dem dann auch der Code für das andere Verhalten definiert ist, welches hier aber nicht vorzufinden ist!
 

Zurück
Oben