# return Befehl in einer if-Anweisung



## flosi (13. Mrz 2007)

Hi,
ich habe hier ein kleines Programm, dass mir eine beliebeige (positive, natürliche Zahl) Potenz einer natürlichen, positiven Zahl ausrechnet, also z.B. 6^4.
Ich habe zum Einlesen, der Zahlen ein tool(ein jar-file) zur Verfügung gestellt bekommen, dass Werte einzeln aus der Standardeingabe einliest. Das Programm läuft, und so sieht es aus:
	
	
	
	





```
import tum.Urc;
public class BerechnePotenz
{
public static void main(String[] args)
{
int x, n, k;


System.out.print("Bitte Exponent eingeben!: ");
if (Urc.readInt()) n = Urc.getInt();
else return;

System.out.print("Bitte Basis eingeben!: ");
if (Urc.readInt()) x = Urc.getInt();
else return;

k=1;

while( n >= 1 )
{

if ( n%2 > 0)
{k*=x;
 n-=1;}
else
{x*=x;
 n/=2;}}

System.out.println(k);
}
}
```

Ich verstehe hier nicht, was die return Anweisung macht, wenn ich beim Exponent oder der Basis ein nicht-Integer angebe, wird das Programm beendet, return bedeutet ja, dass zurückgekehrt wird zum Aufrufer, logischer weide müsste das ja die Anweisung sein, die nach dem Aufruf der main Methode kommt, ist das dann etwa immer sowas, wie system.exit?
Wenn ich statt den beiden returns, jeweils System.exit(0) bzw. System.exit(1) angebe bekomme ich vom compiler die Fehlermeldung, dass bei n>=1 n möglicher weise nicht initialisiert bzw. bei k*=x, x nicht initialisiert ist.
Warum klappt die Variante mit return, aber nicht die mit System.exit?
Gruss


----------



## SlaterB (13. Mrz 2007)

bei return weiß der Compiler, dass entweder n intialisiert (if) oder die Operation beendet wird (else),
also ist n danach 100% initialisiert (oder der Code wird nicht ausgeführt, da beendet),

System.exit() ist für den Compiler aber eine Operation wie jede andere,
er denkt also, dass der else-Fall kommen kann und es danach normal weitergeht 
-> n nicht initialisiert in diesem Fall


----------



## Leroy42 (13. Mrz 2007)

Wenn die main-Methode beendet wird (return), ist im Normalfall (
es laufen keine weiteren Threads) natürlich auch immer das Programm zu Ende.



			
				flosi hat gesagt.:
			
		

> Wenn ich statt den beiden returns, jeweils System.exit(0) bzw. System.exit(1) angebe bekomme ich vom compiler die Fehlermeldung, dass bei n>=1 n möglicher weise nicht initialisiert  ist.



Wie geht das denn?  :shock:  Was für einen Compiler benutzst du denn?


----------



## Leroy42 (13. Mrz 2007)

Oh ja! Stimmt! SlaterB hat es perfekt erklärt

(Mein Testprogramm war eben nicht das Originale   )


----------



## flosi (13. Mrz 2007)

Ok,
danke euch
Gruss


----------

