# Warum ist die syntax richtig?



## blade (10. Jan 2011)

Hallo, habe hier zwei Programmausschnitte die richtig sein sollen, kann mit einer erklären warum?

Ausschnitt 1: Warum hab ich hier mehrere Rückgabewerte? ich kann doch immer nur einen haben, oder wird hier erst in die Variable true geschrieben und diese gleich mit false überschrieben, so das nur false zurückgegeben wird?


```
public boolean isNegativ(int a)
{
 if(a < 0)
  return true;

 return false;
}
```


Aufgabe2: Und warum soll der Code syntaktisch falsch sein?


```
public boolean isNegativ(int a)
{
 if(a < 0)
  return true;
}
```



Ah noch eine Frage: bei einer "void" Prozedur können doch keine Rückgabewerte zurück gegeben werden, oder?
Oder gibt es hier ausnahmen?


----------



## eRaaaa (10. Jan 2011)

Was ist denn wenn a >= 0 ist? In dem Fall musst du natürlich auch etwas zurückgeben - das beantwortet eig. beide deiner Fragen!

Und nein, bei void kannst du nichts zurückgeben....


----------



## Kar (10. Jan 2011)

Hallo,

zu Ausschnitt 1:
Mit return verlässt du die Methode.
Wenn a kleiner 0 ist wird true zurückgegeben und die Methode wird verlassen. (Das return false; wird nicht ausgeführt)
Sonst wird false zurückgegeben. 

Zu Aufgabe2:
Hier wird die Methode erst verlassen, wenn a kleiner 0 ist. Sonst wird da nichts geschehen und man kommt aus der Methode nicht mehr raus.
ein "else return false" oder einfach wie in Auschnitt 1 ist also notwendig, sodass die Methode auch verlassen werden kann, wenn die Bedingung nicht erfüllt wird.


Bei void-Methoden kann man das return weglassen.


----------



## Andi_CH (11. Jan 2011)

blade hat gesagt.:


> Hallo, habe hier zwei Programmausschnitte die richtig sein sollen, kann mit einer erklären warum?
> 
> Ausschnitt 1: Warum hab ich hier mehrere Rückgabewerte? ich kann doch immer nur einen haben, oder wird hier erst in die Variable true geschrieben und diese gleich mit false überschrieben, so das nur false zurückgegeben wird?
> 
> ...



Ich habe deinen Java-Code ein bisschen umgeschrieben - vielleicht wird dir noch klarer wo die Probleme sind - was ich gemacht habe ist reine Kosmetik.

public void xxx() ... Du kannst jede Variable vom Typ "void" zurückgeben  - Das gibt es natürlich nicht - void heisst "kein Rückgabewert"
Im zweifelsfall gibts du etwas zurück - beim Aufruf musst es es nicht verwenden wenn du nicht willst

Der folgende ziemlich sinnlose  Javacode zeigt was ich meine

```
public class Test {
	
	public static boolean test( int i) {
//		if (i==0)
//			return true;
//		return false;
// Eigentlich schreibt man das so
		return (i==0);
	}

	public static void main(String[] args) {
		test(5);
		test(0);
		boolean b = test(1);
		System.out.println("Resultat war " + b);
	}
}
```


----------



## Landei (11. Jan 2011)

blade hat gesagt.:


> Ausschnitt 1: Warum hab ich hier mehrere Rückgabewerte? ich kann doch immer nur einen haben, oder wird hier erst in die Variable true geschrieben und diese gleich mit false überschrieben, so das nur false zurückgegeben wird?



Du kannst nur einen einzigen Rückgabewert haben, aber mehrere Stellen in deiner Methode, wo dieser zurückgeliefert wird. Dazu muss sich der Ablauf aufgrund einer Bedingung verzweigen, also bei einem if oder einem switch-Statement. Der Compiler prüft, ob auch in jeder möglichen Verzweigung am Ende ein Wert zurückgegeben wird.



> Ah noch eine Frage: bei einer "void" Prozedur können doch keine Rückgabewerte zurück gegeben werden, oder?
> Oder gibt es hier ausnahmen?


Nein, können sie nicht. void ist eigentlich eine Anomalie im Typsystem, und es sollte einen Wert dafür geben (auch wenn es gut ist, dass man ihn nicht jedesmal hinschreiben muss). Es gibt übrigens eine Wrapper-Klasse Void, mit dem man das "richtige" Verhalten notfalls simulieren kann (in dem man null zurückgibt), was für generische Typen oft nützlich ist.


----------

