0
/* This program converts decimal to binary */

import javax.swing.JOptionPane;

public class BinaryLoop {
public static void main(String []args) {

    String askForDecimal = JOptionPane.showInputDialog("Enter the decimal number you would like to convert?");
    int decimalNumber = Integer.parseInt(askForDecimal);

    int remainder = 0;
    for (int i = 1; decimalNumber > 0; i++) {

            decimalNumber /= 2;
            remainder = decimalNumber % 2;
            System.out.print(remainder);
        }

    }
}

たとえば、15 と入力すると、1111 のはずの 1110 が返されます。ps この結果は、右から左に読み取られます。

4

5 に答える 5

3
decimalNumber /= 2;
remainder = decimalNumber % 2;

これらの 2 つの行は、逆の順序にする必要があります。理由がわかりますか?

于 2014-03-19T10:15:52.260 に答える
2

for ループに変数 i はまったく必要ありません。while ループを使用するだけです。

最初に分割しているため、アルゴリズムに欠陥があります。

15 / 2 = 7
7 / 2 = 3
3 / 2 = 1
1 / 2 = 0

割った後でではなく、割る前に剰余を確認する必要があります。

于 2014-03-19T10:15:37.130 に答える
1

プログラムの意図を理解していれば、中間動作の一部を出力すると問題が発生するはずです。

int remainder = 0;
for (int i = 1; decimalNumber > 0; i++) {
        System.out.println("Entering for() block");
        System.out.println("decimalNumber=" + decimalNumber);
        decimalNumber /= 2;
        System.out.println("decimalNumber=" + decimalNumber);
        remainder = decimalNumber % 2;
        System.out.println(remainder);
    }
}

この出力を調べると、エラーが明らかになるはずです。つまり、2 つのステートメントが間違っているため、decimalNumber の最初の最大値が欠落しているということです。

remainderまた、 はブロック外では使用されないため、ブロック外で宣言する必要がなく、ゼロに初期化する必要もないことに気付くかもしれません。

同様に、 の値が使用されていないことに気付くかもしれませんi。そのため、for ループを次のように変更できます。

 for(;decimalNumber > 0;)

...これは次と同等です:

 while(decimalNumber > 0)

println多くの人は、一時的なステートメントをコードに挿入してデバッグする習慣を身につけています。しかし、それは悪い習慣です。代わりに、できるだけ早くデバッガーの使い方を学びましょう。デバッガーを使用すると、プログラムを一時停止して行ごとにステップ実行し、すべての変数の値が変化するのを確認できます。

于 2014-03-19T10:24:05.970 に答える
0

コードを次のように変更する必要があります

remainder = decimalNumber % 2;
decimalNumber /= 2;

数値を 2 で割る前に余りを取得する必要があります。

于 2014-03-19T11:05:38.953 に答える
0

これを行う必要があります:

String s = ""; Integer remainder = 0; while(decimalNumber > 0) { remainder = decimalNumber % 2; decimalNumber /= 2; s = remainder.toString() + s; } System.out.println(s);

于 2014-03-19T10:24:22.157 に答える