2016-03-23 8 views
1

Meine Aufgabe ist es, Binär in Dezimal in einem JLabel-Array zu konvertieren, ohne zuvor geschriebene Methoden (es gibt keine Benutzereingabe). Ich habe die richtige Idee, aber aus irgendeinem Grund ist die Ausgabe immer ein bisschen aus. Ich habe es unzählige Male durchgespielt, aber ich kann mit meinem Algorithmus nichts falsch finden, und ich bin sehr verwirrt, warum es nicht die richtige Antwort produziert. Ich wäre sehr dankbar, wenn mir jemand helfen könnte. Vielen Dank!Probleme mit der Umwandlung von Binär in Dezimal in Java (Arrays)

Seitennotiz: Ich habe ähnliche Diskussions-Threads zu Binär-Dezimal-Konvertierungen gelesen, aber ich verstehe nicht, wie man es mit Arrays macht.

Hier ist ein Ausschnitt aus meinem Code:

private void convert() 
    { 
    int[] digit = new int[8]; //temporary storage array 
    int count = 0; 
    for(int x = 0; x < digit.length; x++) 
    { 
    digit[x] = Integer.parseInt(bits[x].getText()); //bits is the original array 
    count= count + digit[digit.length - 1 - x] * (int)(Math.pow(2, x)); 
    } 
    label.setText("" + count); 
    } 
+0

Enthält die Ziffer [] die Ziffern der Binärzahl? Und was zählt? –

+0

@ProgyadeepMoulik in jeder Zelle des Arrays gibt es entweder eine 1 oder eine 0, also würde das Programm jeden Stellenwert in dezimal umwandeln und alles addieren. Graf behält diese Summe im Auge. Und ja, die Ziffer [] speichert die Ziffern der Binärzahl. Eine Ziffer pro Zelle und ein anderer Teil meines Programms stellt sicher, dass es immer zufällige 0s oder 1s ist. – mk8139

Antwort

1

Du verfolgst die binäre Zahl von links nach rechts, aber die falsche Ziffer sind Grabbing. Sie wollen die gleiche Ziffer, sondern durch die richtige Potenz von zwei zu multiplizieren - ersten Index Wesen + n * 128 und nicht + n * 1

int count = 0; 
for(int i = 0; i < bits.length; i++) { 
    count += Integer.parseInt(bits[i].getText()) * Math.pow(2, bits.length - i - 1); 
} 
0

Offensichtlich gibt es einen Fehler in Ihrem Code-Schnipsel.

Sie setzen die Ziffer [x], aber nicht die Ziffer [Länge - 1 - x].

Beispiel: x = 0, Sie stellen die Ziffer [0] ein, aber nicht die Ziffer [7].
So wird es ein Fehler sein, wenn Sie die Ziffer verwenden möchten [Länge - 1-x] hier:

count= count + digit[digit.length - 1 - x] * (int)(Math.pow(2, x)); 

Dies ist der richtige Code hier:

private void convert() 
{ 
    int count = 0, length = 8; 
    for(int i = 0; i < length; count += Integer.parseInt(bits[i].getText()) * (1 << (length - 1 - i)), i++); 
    label.setText("" + count); 
} 

Haben Sie den Code nicht testen. Aber ich denke, es wird funktionieren.