【问题标题】:Decimal input then Binary input (without using Integer.parseInt)十进制输入然后二进制输入(不使用 Integer.parseInt)
【发布时间】:2020-10-01 20:21:39
【问题描述】:

我是计算机科学专业的一年级学生。这个问题已经被问过很多次了,我已经经历了这些。但我仍然无法在当前代码中找到需要修复的地方。我已经编写了将十进制转换为二进制的代码。以下是示例输入和输出。

示例输入

4
101
1111
00110
111111

样本输出

5
15
6
63

我理解二进制转换的概念。但是我无法输入指定数字的二进制值并且得到不正确的输出。我不能使用 Integer.parseInt。 下面是二进制到十进制的粗略转换练习。

Binary to Decimal 
    1       0       1       0 -binary
    3       2       1       0 -power
    2       2       2       2 -base
    1*2^3 + 0*2^2 + 1*2^1 + 0*2^0
    8     + 0     + 2     + 0     = 10

代码

public class No2_VonNeumanLovesBinary {
    public static void main(String[] args) {
        Scanner s = new Scanner(System.in);
        int numTotal, binaryNum, decimalNum = 0, remainder;
        numTotal = s.nextInt();
        for(int i = 0 ; i <= numTotal; i++){
        // This is to get binaryNum input. However I am not getting the expected result.
            binaryNum = s.nextInt();
            while(binaryNum != 0){
                remainder = binaryNum % 10;
                decimalNum = decimalNum + (remainder * i);
                i = i * 2;
                binaryNum = binaryNum / 10;
            }
            System.out.println(decimalNum);
        }
    }
}

谢谢!

【问题讨论】:

  • (remainder + i)i = i * 2 中,您应该将i 替换为完全不同的变量(我们称其为powerOfTwo,因为它就是...),您将设置它在 while 循环开始之前变为 1。
  • @KevinAnderson 您的意思是使用 Integer.parseInt(binaryNum, 2) 更改为基数 2?我不想使用它。在使用这个 Integer.parseInt 方法之前,我想先学习如何使用数学表达式的编码方式。谢谢。
  • @KevinAnderson 通过使用该方法,它相对简单。 for (int i = 1; i
  • 不,你的想法是对的:隔离二进制数字,乘以二进制位值,添加到十进制数,然后前进到下一个二进制位值。问题是i 用于二进制位值是错误的:它已经被用作输入计数器。你需要一个完全不同的变量。

标签: java while-loop binary decimal interbase-2009


【解决方案1】:

有两件事要解决。在 while 循环中使用 i 以外的变量。打印值后将 decimalNum 重置为 0。即,

public static void main(String[] args) {
    Scanner s = new Scanner(System.in);
    int numTotal, binaryNum, decimalNum = 0, remainder;
    numTotal = s.nextInt();
    for(int i = 0 ; i <= numTotal; i++){
        // This is to get binaryNum input. However I am not getting the expected result.
        binaryNum = s.nextInt();
        int j = 1;
        while(binaryNum != 0){
            remainder = binaryNum % 10;
            decimalNum = decimalNum + (remainder * j);
            j = j * 2;
            binaryNum = binaryNum / 10;
        }
        System.out.println(decimalNum);
        decimalNum = 0;
    }       
}

【讨论】:

  • 谢谢西瓦。我感谢您的帮助。我知道了。我需要使用不同的变量,即 j。使用此代码,我确实有编译错误。我已经将 binaryNum 初始化为 int。我收到错误消息说 binaryNum 可能尚未初始化。我对 decimalNum = 0 的理解是否正确 - decimalNum 设置为 0 以获得每个二进制值的对应值?谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-03-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-04-17
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多