# mit void methode binärdarstellung



## ElGrAnDiOs (20. November 2007)

hi,

ich steh grad irgendwie aufm schlauch. ich habe eine aufgabe, und zwar soll ich mithilfe einer methode 
	
	
	



```
public void binaer(int n) {
    if(n == 0 || n == 1) // Ausgabe n;
    else Ausgabe (binaer(n / 2) + (n % 2));
  }
```

die binärdarstellung einer natürlichen zahl n berechnen und auf dem bildschirm ausgeben, und das rekursiv.
da aber die methode dank des void keine ausgabe macht, weis ich grad nich wie ich es auf dem bildschirm ausgeben soll...

kann mir ma jemand nen denkanstoß geben ?


----------



## Anime-Otaku (20. November 2007)

void heißt die Methode hat keinen Rückgabewert, welcher zur aufrufenden Methode zurück geht....

Mit Ausgabe würde man Bildschirmausgabe meinen^^..also Konsole z.B.

P.S.: Unter Java gibts zum einfachen Konvertieren ein Interger.toBinaryString(int)...was aber denke ich mal hier nicht gewünscht ist^^

Aber normalerweise teilt man die Zahl immer durch 2 und schaut sich den Restwert an. (Modulo).


----------



## ElGrAnDiOs (20. November 2007)

ja, genau, also bildschirmausgabe ist gemeint.

und nein, ich muss das ganze per eigener methode und rekursion lösen (was ja nich das problem ist)

aber wie gebe ich bei einem aufruf z.B.

```
binaer(100)
```

die binärdarstellung der Zahl 100 auf dem Bildschirm aus. mit return is ja nix, da die funktion ja void ist, und wenn ich in der methode selber System.out.print... machen will, sagt er das das packet system nich verfügbar ist...

wie kann ich das bewerkstelligen, also z.B. wenn ich 


```
System.Out.Println(binaer(100));
```

das die methode binaer den Binärwert für 100 berechnet und in form einen String zurückgibt ?


----------



## Kulabac (20. November 2007)

ElGrAnDiOs hat gesagt.:


> die binärdarstellung der Zahl 100 auf dem Bildschirm aus. mit return is ja nix, da die funktion ja void ist, und wenn ich in der methode selber System.out.print... machen will, sagt er das das packet system nich verfügbar ist...
> ...
> 
> ```
> ...



Java ist SEHR pingelig, was Groß- und Kleinschreibung angeht. Es heißt: System.out.println("Dein Text");

Das "Packet" System muss immer verfügbar sein ... geht eigentlich gar nicht anders... sonst ist irgendwas sehr faul bei dir. Poste am besten mal ein bisschen Quellcode wo du das benutzt und es nicht klappt.


----------



## ElGrAnDiOs (20. November 2007)

Danke du hast Recht, es lag an der Groß/Kleinschreibung.
Aber wenn ich jetzt das hier versuche 

```
public class S5T1{
  public void binaer(int n) {
    String a = "0";
    if(n == 0 || n == 1) System.out.println(n);
    else {
      a = (binaer((n/2)) + (n % 2));
      System.out.println(a);
    }
  }
}
```

sagt mir der compiler: 


```
Compiliere C:\Dokumente und Einstellungen\fabiO\Desktop\Strukturiertes Programmieren\Uebungsserien\S 5\S5T1.java mit Java-Compiler
S5T1.java:6:18: 'void' type not allowed here
      a = (binaer((n/2)) + (n % 2));
                 ^
1 error
```

eine idee ?


----------



## Billie (20. November 2007)

binaer hat keinen Rückgabetyp (void) ... evtl. versuchst du es mit "public String binaer(int n)" ...


----------



## ElGrAnDiOs (20. November 2007)

jo klar, das hab ich mir auch schon gedacht, aber ich solls mit void machen, was für mich auch nich logisch is...


----------



## zeja (20. November 2007)

Du gibst in jedem Schritt eine Zahl aus und rufst mit dem Rest deine Methode wieder auf die dann wieder eine Zahl ausgibt. Wenn du System.out.print benutzt steht dann alles in einer Zeile.


----------



## tsa-turbo (23. November 2007)

wie behebt man denn das problem " void type not allowed here  "?


----------



## Busi (23. November 2007)

So sollte es gehen

```
public String  a = "";
public String  binaer = "";
public void binaer(int n) {
     if(n == 0 || n == 1) showBinaer();
     else {
          a+=(n % 2);
          binaer(n/2);
     }
}
public void showBinaer(){
      for(int i=a.length()-1;i>=0;i--) binaer+=a.charAt(i);
}
```


----------



## MiMi (23. November 2007)

Man kann in einem System.out.print oder println keinen void mitgeben, weil void keine Rueckgabe hat. Entweder man macht direkt die ausgabe IN der void methode oder man aendert die void in String/ int/ double etc um


----------



## Busi (23. November 2007)

Eine kleine Änderung musste noch gemacht werden. Wenn zum  schluss eine 1 übrrig bleibt muss die ja auch noch in den String geschrieben werden.

```
public String  a = "";
public String  binaer = "";
public void binaer(int n) {
     if(n == 1) {a+=(n);showBinaer();}
     else if(n == 0){showBinaer();}
     else {
          a+=(n % 2);
          binaer(n/2);
     }
}
public void showBinaer()
{
     for(int i=a.length()-1;i>=0;i--) binaer+=a.charAt(i);
     System.out.println(binaer);
}
```

Denkbar wäre auch die 
	
	
	



```
public void binaer(int n,String erg)
```
Du Übergibst einen leeren string der nach abarbeitung deinen Binärcode enthält


----------



## tsa-turbo (24. November 2007)

sorry bin leider ein totaler fisch... wie soll hier die ausgabe erfolgen, nachdem ich ein n eingebeben hab?

das programm sieht jetz so aus. die ausgabe lässt sich aber so nicht compilieren:


```
import java.io.*;

public class bin {
	
public String  a = "";
public String  binaer = "";
public void binaer(int n) {
     if(n == 1) {
     	a+=(n);showBinaer();
     }
      else if(n == 0){showBinaer();}
           else {          
           a+=(n % 2);          
           binaer(n/2);     
      }
}
public void showBinaer(){
for(int i=a.length()-1;i>=0;i--) binaer+=a.charAt(i);
System.out.println(binaer);
} 
          
          
public static void main (String[] args) throws IOException{
int n;
	
BufferedReader din = new BufferedReader(                      
                     new InputStreamReader (System.in));
  
System.out.println("Bitte n eingeben: ");
n = Integer.parseInt(din.readLine());  
  
System.out.println(showBinaer);       
}
}
```


----------



## Busi (24. November 2007)

```
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class Main {
    public static void main(String[] args) {new Main();}
    public Main(){
        try {
            int n;
            BufferedReader din = new BufferedReader(new InputStreamReader(System.in));
            System.out.println("Bitte n eingeben: ");
            n = Integer.parseInt(din.readLine());
            binaer(n);
        } catch (IOException ex) {}
    }
    public String  a = "";
    public String  binaer = "";
    public void binaer(int n) {
    if(n == 1) {a+=(n);showBinaer();}
    else if(n == 0) {showBinaer();}
    else {
        a+=(n % 2);
        binaer(n/2);
        }
    }
    public void showBinaer()
    {
        for(int i=a.length()-1;i>=0;i--) binaer+=a.charAt(i);
        System.out.println(binaer);
        a="";
        binaer="";
    }    
}
```

Und wehe ich bekomme keine gute Bewertung


----------



## tsa-turbo (25. November 2007)

vielen dank für deine mühen!


----------



## Günne (26. November 2007)

hm ich habe die selbe aufgabe, allerdings hilft mir dieser komplette text nicht so sehr, da ich einige teile im sourcecode nicht verstehe. könnte man das irgendwie einfacher schreiben?
ich hatte an das aneinanderreihen zweier strings gedacht, aber an der umsetzung hapert es leider. kann mir dazu wer einen tip geben


----------



## Kulabac (27. November 2007)

Naja, wenn du die selbe Aufgabe hast: die Lösung steht da ja bereits. Ich weiß auch leider nicht, was du mit aneinanderreihen von Strings meinst bzw. wie das zur Aufgabenlösung beitragen kann.

Der Quellcode sieht meiner Meinung nach auch schon anständig aus. "Einfacher" geht's immer, aber in den meisten Fällen dürfte dann was dabei rauskommen, was keine Rekursion mehr ist (wirklich einfach und verständlich wird's halt erst bei einer "normalen" Schleife).

Das einzige, was das ganze ein bisschen lesbarer macht, wäre vielleicht das += zu ersetzen. Also a += n zum Beispiel bedeutet nichts anderes als a = a + n.


----------

