# Static void Methode



## steeeeel (17. Dez 2012)

Hallo, ich habe hier folgendes Programm geschrieben :

class hornerumkehrung{
	public static void main (String [] args){
		int a=Integer.parseInt(args[0]);
		int b=Integer.parseInt(args[1]);

	Rekursivmethode(a,b);
						}


	public static void Rekursivmethode (c,d){
	if (c>0){
	if(c%2==1){
		System.out.prntln(1);
		return;
		  }
	System.out.println(0);
	c=c/d;
	Rekursivmethode(c,d);
	return;
		}
	else{
	return;}
		     				     }

		      }


Nun habe ich folgendes Problem... ich weiß nicht wie ich die beiden Eingabewerte  a und b in die void Methode bekomme.... Da wird jedes mal eine neue Deklaration verlang. Also c soll die Eingabe a sein und d die Eingabe b ....
LG


----------



## Tomate_Salat (17. Dez 2012)

1.) 
	

	
	
		
		

		
			



Java™ Quelltext ist bitte in *


		Java:In die Zwischenablage kopieren


[/B]-Tags zu schreiben:[/SIZE] [noparse][code=Java]hier Java Code einfügen

[/noparse]**

2.) du musst methoden schon richtig definieren. Kleiner Hinweis: welchen Typ haben die Parameter [c]c[/c] und [c]d[/c] (haben sie bei dir überhaupt einen ;-)) + welchen sollten sie haben?

3.) Konventionen einhalten: Klassen werden UpperCamelCase geschrieben, Methoden/Felder lowerCamelCase (siehe link in meiner Signatur)*


----------



## dayaftereh (17. Dez 2012)

```
class hornerumkehrung{
   public static void main (String [] args){
      int a=Integer.parseInt(args[0]);
      int b=Integer.parseInt(args[1]);
      Rekursivmethode(a,b);
   }

   public static void Rekursivmethode (int c, int d){
      if (c>0){
         if(c%2==1){
            System.out.prntln(1);
            return;
         }
         System.out.println(0);
         c=c/d;
         Rekursivmethode(c,d);
         return;
      } else{
         return;
      }
   }
}
```


----------



## pappawinni (17. Dez 2012)

Ne rekursive Methode ohne Rückgabewert?
Kann sowas überhaupt Sinn machen?
Ich zweifle.


----------



## steeeeel (17. Dez 2012)

Tomate_Salat hat gesagt.:


> 1.)
> 
> 
> 
> ...


*

Also ist es denn notwendig ?? es handelt sich um 2 positive ganze Zahlen die eingegeben werden um mit diese das umgekehrte Horner-Schema zu durchlaufen . Variabel ist dabei nur a denn b bleibt im laufe des Programms konstant....*


----------



## nrg (17. Dez 2012)

pappawinni hat gesagt.:


> Ne rekursive Methode ohne Rückgabewert?
> Kann sowas überhaupt Sinn machen?
> Ich zweifle.



wenn sie klassenmember setzt oder direkt auf der console ausgibt ???:L


----------



## dayaftereh (17. Dez 2012)

Also damit du an einer Methode Variabel entgegen nehmen kannst musst du Definieren welcher Type sie sind, da Java streng Typisiert ist.

Also muss deine method so aussehen:

```
public static void rekursiv(int a, int b){
   // ...
}
```

Dabei werden die Variablen als *Call by Value* übergeben und bei der Übergabe Kopiert, das heißt wenn die Variable a in der Methode änderst, wird a nicht in der main Methode geändert sonder behält den Wert!


----------



## KSG9|sebastian (17. Dez 2012)

dayaftereh hat gesagt.:


> Also damit du an einer Methode Variabel entgegen nehmen kannst musst du Definieren welcher Type sie sind, da Java streng Typisiert ist.
> 
> Also muss deine method so aussehen:
> 
> ...



Das Ergebnis stimmt, die Herleitung aber nicht. 

Kopiert werden sie in dem Sinne nicht, Fakt ist aber halt, das Integer immutable ist. Und da Java immer Call-by-Value macht ist es nicht möglich die Referenz des Parameters zu ändern. 

Und eine rekursive Methode ohne Rückgabe kann auch Sinn machen.


```
void doRecursive(List<String> data, int index){
    if(index > 0){
        doRecursive(data, index-1);
    }
    data.add("blahblub");
}
```


----------



## Tomate_Salat (17. Dez 2012)

steeeeel hat gesagt.:


> Also ist es denn notwendig ?? es handelt sich um 2 positive ganze Zahlen die eingegeben werden um mit diese das umgekehrte Horner-Schema zu durchlaufen . Variabel ist dabei nur a denn b bleibt im laufe des Programms konstant....



Woher soll den Java sonst wissen, welcher Typ erwartet wird? Einfaches Beispiel:
[c]someMethod(a)[/c]
Was erwartete die Methode? 



dayaftereh hat gesagt.:


> Dabei werden die Variablen als Call by Value übergeben und bei der Übergabe Kopiert, das heißt wenn die Variable a in der Methode änderst, wird a nicht in der main Methode geändert sonder behält den Wert!



Jein. Bei primitiven Datentypen wird der Wert und bei komplexen Objekten die Adresse mitgegeben von der aus dereferenziert werden kann.


----------



## nrg (17. Dez 2012)

KSG9|sebastian hat gesagt.:


> Fakt ist aber halt, das Integer immutable ist.



ist es mir neu, dass man bei primitiven datentypen von mutable/immutable spricht. diese werden einfach direkt im speicher allokiert. die wrapper-klassen sind immutable aber davon war hier nie die rede


----------



## KSG9|sebastian (17. Dez 2012)

nrg hat gesagt.:


> ist es mir neu, dass man bei primitiven datentypen von mutable/immutable spricht. diese werden einfach direkt im speicher allokiert. die wrapper-klassen sind immutable aber davon war hier nie die rede



Bin vom Wrapper-Typ ausgegangen...

..untentschieden?..


----------



## pappawinni (17. Dez 2012)

nrg hat gesagt.:


> wenn sie klassenmember setzt oder direkt auf der console ausgibt ???:L



ok, wenn sie Klassenmember setzt, ist das ja auch irgendwo ne Rückgabe..
.. oder direkt auf der Console ausgibt... und das macht Sinn ?? wirklich ??


----------



## nrg (18. Dez 2012)

pappawinni hat gesagt.:


> .. oder direkt auf der Console ausgibt... und das macht Sinn ?? wirklich ??



warum nicht? türme von hanoi z.b. oder viele andere übungen zu rekursionen kann man direkt auf der console ausgeben.

KSG9|sebastian hat dir ja noch ein drittes bsp genannt. aber ist ja eigentlich auch egal . fand nur die aussage etwas fragwürdig, dass eine void-rekursion total sinnfrei ist


----------

