# Programm zur Binärdarstellung von Integer-Zahlen !



## cara123 (11. Nov 2018)

Hi , ich soll als Hausaufgabe eine Methode schreiben "public static String getBinary(int number)", die die Binärdarstellung (ohne 2er Komplement) der Variablen number als String zurückgibt.
Ich hab Probleme mit der return-Anweisung am Ende, da die Variable ja nur innerhalb der Schleife gilt...
Bitte helft und schon mal danke im Vorraus! 


```
public static void main (String[]args){
       System.out.println(4);
    }
   
   
    public static String getBinary(int v){
     String number;
     while(v>0){
         number = v%2==0? "0":"1";
         v=v/2;
         number= number + number;
         return number;
        }
       
    }
```


----------



## DrZoidberg (11. Nov 2018)

Ersetze die Zeile
	
	
	
	





```
number = v%2==0? "0":"1";
```
 mit 
	
	
	
	





```
number = (v%2) + number;
```
"number = number + number" kannst du löschen. Das return muss ganz ans Ende der Methode, also hinter die While Schleife.


----------



## Robat (11. Nov 2018)

Warum sollte number nur innerhalb der Schleife gelten? Du musst den String initialisieren dann geht der Fehler auch weg


----------



## mihe7 (11. Nov 2018)

Und vielleicht solltest Du die Methode in main auch aufrufen.


----------



## cara123 (11. Nov 2018)

@DR Zoidberg
Danke und ja ich weiß, dass das return aus der Schleife raus muss, aber wenn ich es ans Ende der Methode setze kommt der Fehler das der String noch nicht initialisiert wurde...


----------



## Robat (11. Nov 2018)

cara123 hat gesagt.:


> aber wenn ich es ans Ende der Methode setze kommt der Fehler das der String noch nicht initialisiert wurde...


Siehe mein Beitrag ...


----------



## cara123 (11. Nov 2018)

@ Robat 
Ich hab den String doch in der Schleife initialisiert oder nicht? Und ich muss ihn ja auch dort initialisieren, sodass bei jeder Wiederholung der Schleife im String entweder eine 0 oder eine 1 abgespeichert wird... Oder nicht ?


----------



## Robat (11. Nov 2018)

Nicht zwangsläufig. Für `v <= 0` wird die while-Schleife nie betreten und der String würde uninitialisiert bleiben. Daher musst du ihn am Anfang initialisieren `String number = "";`


----------



## cara123 (11. Nov 2018)

@ Robat
Ich habs jetzt so umgeändert, doch wenn ich mir die Methode/Klasse auf der Konsole ausgeben lassen, ist der Inhalt leer... Also irgendwie wird so die Schleife komplett ignoriert und einfach der String leer ausgegeben, so wie ich ihn initialisiert hab.. danke übrigens nochmal das du so nett bist und mir hilfst !

```
public static void main (String[]args){
       System.out.println(getBinary(4));
    }
   
   
    public static String getBinary(int v){
     String binärZahl="";
     while(v>0){
         binärZahl = v%2==0? "0":"1";
         v=v/2;
        }
     return binärZahl;
    }
```


----------



## Robat (11. Nov 2018)

Also komplett leer sollte der String eigentlich nicht sein. Bei dem Programm, so wie du es jetzt hast, sollte am Ende eigentlich eine 1 ausgegeben werden.
Aber schau dir mal die Zeile genau an:

```
binärZahl = v%2==0? "0":"1"
```
Du überschreibst den String jedes mal wieder .. du willst aber an den String eine 0 oder 1 anfügen. (Hinweis += anstatt = ).
Dann sollte dir beim anschauen der Binärzahl noch etwas auffallen. Aber dazu später mehr


----------



## cara123 (11. Nov 2018)

Vielen Dank für den Tipp mit dem +! Der Gedanke war mir auch gekommen, ich hätte aber nicht gewusst wie ich lösen kann also danke! Also ich arbeite mit BlueJ und selbst nach dem umändern wird bei mir nichts angezeigt, nicht mal die leere weiße Konsole, sondern einfach komplett gar nichts...


----------



## Robat (11. Nov 2018)

Ich kann dir leider nicht sagen wie es mit BlueJ läuft da ich selber nie damit gearbeitet habe und davon auch nichts halte. 

Du solltest aber auf jeden Fall 1 was feststellen (wenn Du es richtig ausführst): Deine Binärzahl wird falsch rum dargestellt... Also anstatt 100 bekommst Du 001.


----------



## cara123 (11. Nov 2018)

Oh ok ja wir müssen damit arbeiten, weil unser prof meinte, dass es das beste für den Anfang ist ...
und ja da hast du wieder recht... Hab aber leider keine Ahnung wie ich es umdrehe denke ich..


----------



## Robat (11. Nov 2018)

Nun ja .. momentan hängst du die "1" oder "0" immer hinten an den String an. `binärZahl = binärZahl + (v%2==0? "0":"1");` Deshalb bekommst du:

```
0
00
001
```
Wenn du es genau andersrum haben willst, musst du eben erst die "0" oder "1" schreiben und *danach* den Rest des Strings. Die beiden "Summanden" also einfach umdrehen.

```
0
00
100
```


----------



## cara123 (11. Nov 2018)

@ Robat 
Oh mein Gott danke! Es klappt !

```
public static void main (String[]args){
       System.out.println(getBinary(16));
    }
   
   
    public static String getBinary(int v){
     String binärZahl="";
     while(v>0){
         binärZahl = (v%2==0? "0":"1")+ binärZahl;
         v=v/2;
        }
     return binärZahl;
    }
```


----------



## Robat (11. Nov 2018)

cara123 hat gesagt.:


> Oh mein Gott danke! Es klappt !


It's a kind of magic


----------



## cara123 (11. Nov 2018)




----------

