2016-03-23 17 views
1

私の割り当ては、あらかじめ書き込まれたメソッドを使用せずに(ユーザー入力はありません)JLabel配列のバイナリから10進に変換することです。私は正しいアイデアを持っていますが、何らかの理由でアウトプットが少しずれています。私はそれを何度も経験してきましたが、私のアルゴリズムに何か間違ったものは見つけられず、正しい答えが得られない理由は非常に混乱しています。誰かが私を助けることができれば非常に感謝しています。ありがとう!Java(配列)のバイナリから10進への変換の問題

サイドノート:バイナリから10進への変換に関する類似のディスカッションスレッドを読んだが、配列でそれを行う方法は分かりません。ここで

は、私のコードの抜粋です:

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

数字[]に2進数の数字が格納されていますか?カウントは何をするのですか? –

+0

@ProgyadeepMoulik配列の各セルには1または0があるので、プログラムは各プレースの値を10進数に変換してすべて加算します。 Countはその合計を記録します。そしてyes、digit []は2進数の数字を格納します。セルあたり1桁、私のプログラムの別の部分では、常に0または1のランダム化が行われます。 – mk8139

答えて

1

あなたは右に左から2進数を、次のされていますが、間違った数字をつかんでいます。最初のインデックスビーイング+ N * 128及びません+ 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

明らかにバグがスニペットにあります - あなたは2の右のパワーを掛けするが、同じ数字が欲しいです。

数字[x]を設定しますが、数字[length - 1 - x]は設定しません。

たとえばx = 0の場合、数字[0]を設定しますが、数字[7]は設定しません。
ですから、数字を使いたいエラー[長さ - 1 -x]があるだろう、ここで:

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

これここに正しいコード:

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); 
} 

がコードをテストしていないことがあります。しかし、私はそれが動作すると思います。

関連する問題