# This method must return a result of type int



## milexy1986 (13. Okt 2011)

Hallo Leute,

bin auch ziemlicher Anfaenger mit Java. Hier habe ich mal ein ganz ganz einfaches Beispiel. Was ist da nicht OK. Alle Werte sind ja vom Typ int . ?????:L  ...Danke im Vorraus


```
public class Uebung {
	 static int test (int a) {      //This method must return a result of type int 
		if (a == 1)
			return 1;
		else if (a == 2)
			return 2;

	} 

	public static void main(String arguments[]) {
		System.out.println(test(1));

	}
}
```


----------



## Michael... (13. Okt 2011)

was wird zurückgegeben, wenn a weder 1 noch 2 ist?


----------



## JAVAnnik (13. Okt 2011)

du braucht noch ein return falls a nicht 1 oder 2 ist, könnte so aussehen:


```
public class Uebung
{
     static int test (int a)
     {

        if (a == 1) return 1;
        else if (a == 2) return 2;
        return 0;

    }

    public static void main(String arguments[]) {
        System.out.println(test(1));
    }
}
```


----------



## Gossi (14. Okt 2011)

Du musst generell in Java bei jeder nicht void-Methode (void = "Still") etwas zurück geben.

Du müsstest also z.B. nach deiner if-Abfrage noch ein else machen:


```
static int test (int a) {      //This method must return a result of type int 
        if (a == 1)
            return 1;
        else if (a == 2)
            return 2;
        else return 0;
}
```

Oder halt einfach am ende der Methode ein 
	
	
	
	





```
return 0
```

Wie du das ganze Lösen könntest ohne ein weiters return wäre mit globalen Variablen, aber das is nen anderes Thema ^^


----------



## Tomate_Salat (14. Okt 2011)

milexy1986 hat gesagt.:


> ```
> if (a == 1)
> return 1;
> else if (a == 2)
> ...



An deiner Stelle, würde ich die [c]{}[/c]-klammern verwenden. Das obenstehende wird zwar (abgesehen von dem fehlenden return-Statement) funktionieren, ist aber fehleranfälliger. Also besser:

```
if(a==1) {
   return 1;
} else if(a==2) {
   return 2;
}

//return -1;
```

wobei man hier auch einfach schreiben könnte 

```
static int test(int a) {
     return a;
}
```
 aber da es offensichtlich eine Übung ist, hinterfrage ich den Sinn mal nicht


----------



## hdi (14. Okt 2011)

> An deiner Stelle, würde ich die {} -klammern verwenden.


+1.



> Wie du das ganze Lösen könntest ohne ein weiters return wäre mit globalen Variablen, aber das is nen anderes Thema ^^


Würd mich mal interessieren, inwiefern globale Variablen (was auch immer das sein soll) das return-Statement ersetzen können?!


----------



## Gossi (14. Okt 2011)

hdi hat gesagt.:


> Würd mich mal interessieren, inwiefern globale Variablen (was auch immer das sein soll) das return-Statement ersetzen können?!




```
public class Uebung
{

	private static int ausgabe = 0;

	public static void test(final int a) {

		if (a == 1) {
			ausgabe = 1;
		} else if (a == 2) {
			ausgabe = 2;
		} else {
			ausgabe = 0;
			// Oder ausgabe = a;
		}

	}

	public static void main(final String arguments[]) {
		test(1);
		System.out.println(ausgabe);
	}
}
```

Aber wie gesagt, wird wohl nicht sinn der Übung gewesen sein.....


----------



## stone71 (14. Okt 2011)

Die bisherigen Tipps waren sehr gut und da gibt es kaum noch etwas zu ergänzen. In manchen Fällen macht es Sinn jedoch nur einen return in einer Methode zu definieren. Es macht bei unübersichtlichen Methoden aus meiner Sicht die Fehlersuche einfacher. 

Hier einmal das Beispiel:

```
static int test (int a)
{
   int rueckgabe=-1;
   if (a == 1) {
       rueckgabe = 1;
   } else if (a == 2) {
       rueckgabe = 2;
   }
   return rueckgabe;
}
```

Aus meiner Sicht könnte die Methode also auch in dieser Form Sinn machen, aber dies ist, wie vieles, eine Stilfrage.


----------



## Tomate_Salat (14. Okt 2011)

hdi hat gesagt.:


> Würd mich mal interessieren, inwiefern globale Variablen (was auch immer das sein soll) das return-Statement ersetzen können?!



Ich glaube, er meint wohl sowas:

```
public class Sample {
    private int result=-1;

    public void test(int a) {
         if(a==1) {
            result=1;
         } else if(a==2) {
            result=2;
         }
    }

    public int getResult() {
         return result;
    }
}
```


----------



## Gossi (17. Okt 2011)

Tomate_Salat hat gesagt.:


> Ich glaube, er meint wohl sowas:
> 
> ```
> public class Sample {
> ...



Jepp, sowas meinte ich, hatte ich nen stück weiter oben ja auch schon geschrieben ^^


----------



## stone71 (17. Okt 2011)

Gossi hat gesagt.:


> Jepp, sowas meinte ich, hatte ich nen stück weiter oben ja auch schon geschrieben ^^



Ja, es kann sein, dass ich hier irgendetwas falsch verstanden habe, aber ein return statement wird immer notwendig, wenn man Variablen außerhalb der Klasse abfragen möchte. In diesem Vorschlag wird es nur in getResult gekapselt. 
Das standardisierte Vorgehen ist, dass man eine private Variable anlegt und diese mit Hilfe einer set/get - Methode außerhalb der Klasse sichtbar macht.


----------



## Tomate_Salat (17. Okt 2011)

@Gossi: Als ich die antwort geschrieben hatte, war dein Post noch nicht da ;-). Ich finde diese Variante in dem Falle nicht gut. Wenn es ein einfaches Ergebnis ist, kann man das auch gleich zurückgeben.


----------



## stone71 (17. Okt 2011)

Tomate_Salat hat gesagt.:


> @Gossi: Als ich die antwort geschrieben hatte, war dein Post noch nicht da ;-). Ich finde diese Variante in dem Falle nicht gut. Wenn es ein einfaches Ergebnis ist, kann man das auch gleich zurückgeben.



Stimmt! So kann man es auch ausdrücken!


----------



## Gossi (17. Okt 2011)

stone71 hat gesagt.:


> Ja, es kann sein, dass ich hier irgendetwas falsch verstanden habe, aber ein return statement wird immer notwendig, wenn man Variablen außerhalb der Klasse abfragen möchte. In diesem Vorschlag wird es nur in getResult gekapselt.
> Das standardisierte Vorgehen ist, dass man eine private Variable anlegt und diese mit Hilfe einer set/get - Methode außerhalb der Klasse sichtbar macht.





Tomate_Salat hat gesagt.:


> @Gossi: Als ich die antwort geschrieben hatte, war dein Post noch nicht da ;-). Ich finde diese Variante in dem Falle nicht gut. Wenn es ein einfaches Ergebnis ist, kann man das auch gleich zurückgeben.





stone71 hat gesagt.:


> Stimmt! So kann man es auch ausdrücken!



Ich habe ja auch nie geschrieben, das diese Methode gut/richtig wäre, ich wollte lediglich darauf hinweisen, das es sie gibt, in diesem Beispiel wäre ne globale Vaiable dafür auch völlig übertrieben.


----------

