-1

ユーザーが10進数を2進数に入力し、2進数を逆にしてから、10進数に戻すことができるコードの実装はほぼ完了です。

2進数から10進数の部分を除いてすべてを解決しました。何を入力しても、同じ番号が何度も表示され続けます。理由がわかりません。基本的に、コードの最後の部分が間違っているのはなぜですか?配列/文字列の長さを見つけて、2^nなどを掛けるのに問題があります...

4

2 に答える 2

0

numberdo-whileループ条件に応じて、常にゼロ以下になります。 while(number>0);

これにより、変数s(より適切な変数名を選択してください...)は常に「0」になります。

私はあなたが残りを理解できると思います。

于 2013-02-09T19:20:24.123 に答える
0

このコードには2つの問題があります。

1)10進数から2進数への変換の結果を保存していません。逆のバイナリ値を持つ文字列を格納するために、新しい文字列変数を導入する必要があります。

2)2進化10進アルゴリズムが正しくありません。s.charAt(i)はchar値を返しますが、計算に使用するにはdouble値が必要です。Math.pow(2、(s.length()--i --1))も正しくありません-逆にされていないバイナリ値用であると私は理解しています。

コードの修正バージョンは次のようになります。

public static void main(String[] args) {
    int a[] = {0, 1};

    int number;
    int remainder;
    String binary = "";

    Scanner in = new Scanner(System.in);

    System.out.print("Enter Decimal Number: ");
    number = Integer.parseInt( in.next());

    System.out.print("Binary Number in Reverse: ");
    do {
        remainder=number%2;
        if(remainder > 0){
            binary += a[1];
            //System.out.print(a[1]);
        }
        else{
            binary += a[0];
            //System.out.print(a[0]);
        }
        number=number / 2;
    } while(number>0);

    System.out.print(binary);

    System.out.print(" \nDecimal number: ");
    //String s = Integer.toString(number);
    double result = 0;
    for (int i = 0; i < binary.length(); i++)
       result = result + Double.parseDouble(binary.substring(i, i + 1)) * Math.pow(2, i);
    System.out.print(result);
}
于 2013-02-09T21:19:37.060 に答える