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,但它返回 1110,应该是 1111。ps,结果将从右到左读取。

4

5 回答 5

3
decimalNumber /= 2;
remainder = decimalNumber % 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);
    }
}

检查这个的输出,错误应该变得很明显,这是因为两个语句是错误的,你错过了第一个,最大的,decimalNumber 的值。

您可能还会注意到它remainder没有在块外使用,因此您不需要在块外声明它,也不需要将其初始化为零。

同样,您可能会注意到i从未使用过的值,因此您可以将 for 循环更改为:

 for(;decimalNumber > 0;)

...相当于:

 while(decimalNumber > 0)

许多人养成了将临时println语句放在代码中进行调试的习惯。然而,这是一个坏习惯。相反,请尽快学习使用调试器。使用调试器,您可以暂停程序并逐行执行,查看所有变量的值,因为它们会发生变化。

于 2014-03-19T10:24:05.970 回答
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 回答
0

您必须将代码更改为

remainder = decimalNumber % 2;
decimalNumber /= 2;

在将数字除以 2 之前,您必须得到余数。

于 2014-03-19T11:05:38.953 回答