如何创建将二进制转换为十进制的程序

时间:2019-05-30 19:18:31

标签: java

我正在尝试将二进制转换为十进制,如何更改代码以做到这一点?我在哪里弄糟?

我尝试查看其他示例,查看Java api和观看视频,但我仍然不知道自己犯了什么错误。

package Calculator;
import java.util.Scanner;
public class Calculator {
    public static void main(String[] args){
        Scanner scan = new Scanner(System.in);
            System.out.println("(2) Convert binary to decimal");
            System.out.println("\n\n Please enter your choice: ");
            int choice = scan.nextInt();
            if(choice == 2){
                scan.nextLine();
                //prompt for user input
                System.out.println("Please enter a binary number: ");
                String binary = scan.nextLine();
                char[] binaryArray = binary.toCharArray();              
                int i=1;
                int integer=0;
            //potential problem somewhere around here? 
            while(i<8){
                if(binaryArray[i]==0) {
                    ++i;
                }else if(binaryArray[i]==1) {
                    switch(i) {
                    case 1:
                        integer+=128;
                        ++i;
                        break;
                    case 2:
                        integer+=64;
                        ++i;
                        break;
                    case 3:
                        integer+=32;
                        ++i;
                        break;
                    case 4:
                        integer+=16;
                        ++i;
                        break;
                    case 5:
                        integer+=8;
                        ++i;
                        break;
                    case 6:
                        integer+=4;
                        ++i;
                        break;
                    case 7:
                        integer+=2;
                        ++i;
                        break;
                    case 8:
                        integer+=1;
                        ++i;
                        break;
                    }
            }
        }
            System.out.println("The decimal value of the binary number is: "+ integer);
            scan.close();
    }
}

}

输入始终为0。我尝试过11010110、11111111和01010111。始终为0。我知道问题出在某个地方,我的整数值没有变化,但是我无法弄清楚具体是什么。

3 个答案:

答案 0 :(得分:0)

之所以发生这种情况,是因为您正在读取输入,并转换为char的数组。

在与int进行比较的任何地方,都应该通过将值用单引号引起来来与char进行比较。

while(i<8){
                if(binaryArray[i]=='0') {
                    ++i;
                }else if(binaryArray[i]=='1') {
                    switch(i) {
                    case 1:
                        integer+=128;
                        ++i;
                        break;
                    case 2:
                        integer+=64;
                        ++i;
                        break;
                    case 3:
                        integer+=32;
                        ++i;
                        break;
                    case 4:
                        integer+=16;
                        ++i;
                        break;
                    case 5:
                        integer+=8;
                        ++i;
                        break;
                    case 6:
                        integer+=4;
                        ++i;
                        break;
                    case 7:
                        integer+=2;
                        ++i;
                        break;
                    case 8:
                        integer+=1;
                        ++i;
                        break;
                    }
            }

答案 1 :(得分:0)

其他人已经指出,您在01'0' and'1'`之间感到困惑。

其他问题:

  • 您的i从1开始,因此您错过了最高有效位;
  • 由于case 8:循环保护,您将永远不会在开关中实际击中while (i < 8)
  • 除非您输入正确的8位,否则此方法不起作用。

您可以用更简洁的方式编写整个while循环:

for (int i = 0; i < binaryArray.length; i++) {
  integer *= 2; // shift the digits along by 1 place
  if (binaryArray[i] == '1') {
    integer += 1; // set the least significant bit.
  }
}

答案 2 :(得分:0)

您应该远离所有这些switch语句。

假设您输入“ 10101101”。 设置val = 0; 然后将val乘以2或左移1位。他们是一样的。这很重要 您可以在添加下一位之前执行此操作。

从左侧开始,如果它是'1',请在val中添加1。否则,加0。 然后从乘法开始重复,直到遍历字符串为止。

val在打印时应为十进制版本。