[Java] Zahl von Dezimal in Binär umwandeln und speichern

albaum

Ensign
Registriert
Juli 2014
Beiträge
172
Hi,

ich habe mir die Aufgabe gestellt eine Integer Zahl von der Tastatur einlesen zu lassen und diese dann in Binär umzuwandeln...
Nur habe ich jetzt ein Problem dabei.

Das Problem ist, dass ich nicht weiß wie ich es jetzt richtig programmieren soll. D.h. ich weiß wie das alles funktioniert aber ich weiß nicht wie man den Rest speichern kann.
Ich will die eingelesene Zahl durch 2 rechnen und wenn ein Rest vorhanden ist, diesen speichern. Das will ich solange machen bis die Zahl 0 ist, d.h. => for-schleife verwenden...
Nun weiß ich aber nicht wie ich den Rest speichern soll und wie ich die for schleife richtig benutze...

PHP:
import java.io.*;
 
class TastaturIn {
    private InputStreamReader is=new InputStreamReader(System.in);
    private BufferedReader eingabe=new BufferedReader(is);
     
    //Liest einen Wert von der Konsole ein
    //und gibt diesen als int-Wert zurück 
    public int readInt() throws IOException, NumberFormatException {
        String zeile;
        int wert=0;
         
        zeile=eingabe.readLine();
        wert=(new Integer(zeile)).intValue();
         
        return wert;
    }
     
    //Liest einen Wert von der Konsole ein
    //und gibt diesen als String zurück
    public String readString() throws IOException, NumberFormatException{
        String zeile="";
         
        zeile=eingabe.readLine();
         
        return zeile;
    }
}
 
 
public class BinCalc {
    public static String Dec2Bin(int dec) {
     
         for(){
        	
         }
    }
     
    public static void main(String args[]) {
         
        //Ihre Loesung
         
    }
}
 
hier stand mist
 
Zuletzt bearbeitet:
albaum schrieb:
ich habe mir die Aufgabe gestellt...
albaum schrieb:
Kommt das "Ihre" von der (hier nicht gern gesehenen Haus-)Aufgabe oder sollen wir hier unsere Lösung einsetzen?

Bis auf eine leere for-Scheife enthält der Code keine Eigenleistung.
Es ist ja nicht so, dass es keinerlei Tutorials zu Thema for-Schleifen gibt und das Umwandeln in einen Binärstring hat sich auch schon der ein oder andere öffentlich gemacht.
 
Ah ok...

Man könnte theoretisch die Zahl Modulo rechnen, das Ergebnis dann speichern und danach die Zahl durch 2 rechnen...
Wenn man dass dann in eine for-schleife einbindet, die beinhaltet dass die abbricht wenn die eingegebene Zahl = 0 ist, dann könnte man das so in Binär umrechnen...

Nur ich habe ein paar Problemen mit for-Schleifen und wüsste jetzt nicht wie man die richtige for-schleife machen würde :/

for (i=0; dec < 0 ;i++) // ist das so richtig? sieht für mich falsch aus :/
{
dec= dec %2;
int speichern = dec; // wird ja dann immer überspeichert und somit gehen zahlen verloren...
dec /=2;
}
Ergänzung ()

Darlis schrieb:
Kommt das "Ihre" von der (hier nicht gern gesehenen Haus-)Aufgabe oder sollen wir hier unsere Lösung einsetzen?

Bis auf eine leere for-Scheife enthält der Code keine Eigenleistung.
Es ist ja nicht so, dass es keinerlei Tutorials zu Thema for-Schleifen gibt und das Umwandeln in einen Binärstring hat sich auch schon der ein oder andere öffentlich gemacht.

Die Aufgabe habe ich einem Portal entnommen und möchte stück für stück besser in java werden ^^
Ich will ja nicht dass ihr mir die Lösungen vorgebt, ich weiß nur nicht wie ich das Programmieren soll und von daher frage ich hier um Hilfe ob man mich irgendwie dahin bringen kann...
 
albaum schrieb:
Ich will ja nicht dass ihr mir die Lösungen vorgebt, ...
Der Codeblock, den du gepostet hast, gibt aber Anlass zur Vermutung dazu.

Und ja, die Schleife ist falsch. Benutzt du eine IDE oder so was wie Notepad++?
- i ist nicht definiert (oder ist das vorher passiert?)
- i wird nie benutzt
"dec < 0" ist immer false, wenn du eine positive Zahl zerlegen willst

Alle Variablen, die du innerhalb eines Blocks { } deklarierst werden nach verlassen gelöscht (ein Schleifendurchlauf zählt als verlassen). Wenn du den Wert speichern willst, muss die Variable also in einen übergeordneten Block deklarieren.
 
Bitte mache dir Gedanken über die Zahlendarstellung von einem int.
Zum Konkatenieren von Strings kann man gut StringBuffer verwenden.

Für diese Übungsaufgabe kannst du

Code:
static String 	Integer.toBinaryString(int i)

gut als TestCode verwenden.
Wie teste ich Code? --> versuche es mit JUnit ;)
 
Stichworte sind:
- Modulo
- integer Division mit 2

Die binäre Zahl könntest du als String ablegen. Ist aufgrund des Wertebereichs sinnvoll. Solltest dir aber vorher erstmal For-Schleifen nochmal anschauen. While geht hier übrigens auch super.
 
Nvm

habe mir Poatis Post angesehen und sehe dass es mit einer While schleife viel einfacher ist...

Nur weiß ich jetzt nicht wie ich die Zahlen in der While-Schleife speichern soll ohne dass sie verloren gehen... Ich muss die ja immer wieder überspeichern außer ich verwende einen String aber einen String kann man hier auch nicht verwenden...

PHP:
public class BinCalc {
    public static String Dec2Bin(int dec) {
    	
         while (dec !=0)
         {
        	 dec= dec %2;
        	 //hier muss ich den Wert Zwischenspeichern
        	 dec /=2;
         }
    }
 
Zuletzt bearbeitet:
albaum schrieb:
... aber einen String kann man hier auch nicht verwenden...
Warum nicht? Fehlermeldung? Aufgabenstellung? Syntax?
 
Darlis schrieb:
Warum nicht? Fehlermeldung? Aufgabenstellung? Syntax?

wenn ich " string speichern = dec; " bei "//hier muss ich den Wert Zwischenspeichern" einfüge, dann kommt die Fehlermeldung:
"String cannot be resolved to a type"
 
1a. Java ist case sensitive, den Typ "string" gibt es nicht. Du willst "String".
1b. Solltest du tatsächlich "String" geschrieben haben, stimmt vermutlich etwas mit der "Java-Konfiguration" nicht (mit welchem Programm du programmierst, hast du nicht nicht genannt).
2. Die direkte Zuweisung einer Zahl zu einem String geht nicht, hier musst du explizit umwandeln.
 
Benutze Eclipse und habe es jetzt zu "String speichern = String.valueOf(dec);" geändert.

PHP:
  public static String Dec2Bin(int dec) {
    	
    	
         while (dec !=0)
         {
        	 dec= dec %2;
        	 String speichern = String.valueOf(dec);
        	 dec /=2;
         }
         speichern = new String [speichern]; //ich will den Text String in einen Array speichern + Fehler: Multiple Markers at this line: speichern cannot resolved to a variable
         int length = speichern.length;    //Fehler: Multiple Markers at this line: speichern cannot resolved to a variable
         for (int i = length-1; i>=0; i--) //soll das array von hinten durchlaufen
         {
        	 System.out.print(speichern[i]); //  Fehler:speichern cannot resolved to a variable
         }
    }
Der Code ohne Kommentar:
PHP:
while (dec !=0)
         {
        	 dec= dec %2;
        	 String speichern = String.valueOf(dec);
        	 dec /=2;
         }
         speichern = new String [speichern]; 
         int length = speichern.length; 
         for (int i = length-1; i>=0; i--) 
         {
        	 System.out.print(speichern[i]); 
         }
Dass wäre jetzt meine Lösung nur es werden mir ein paar Fehler angezeigt bei denen ich nicht weiß warum sie auftreten.
 
Ich hab mal geguckt, du kommst aus der C++ Ecke. Gefällt es dir nicht mehr? ;)
In Java ist das String-Handling viel einfacher, du musst nichts mit Arrays machen (es sei denn, du willst unbedingt, wird aber komplizierter, eine weitere Alternative wurde ja schon genannt).

speichern cannot resolved to a variable
Die Variable ist in diesem Block/Scope nicht definiert, siehe meinen Post #6. Ich meine, das Verhalten ist in C++ aber genauso.
 
Bekommst noch einen Tipp. In Java ist es möglich Strings zu "addieren".
Beispiel:
String bin = "0101";
bin = bin + "0";
ergibt für bin "01010"
 
Zurück
Oben