我正在尝试将二进制转换为十进制,如何更改代码以做到这一点?我在哪里弄糟?
我尝试查看其他示例,查看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。我知道问题出在某个地方,我的整数值没有变化,但是我无法弄清楚具体是什么。
答案 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)
其他人已经指出,您在0
和1
和'0' and
'1'`之间感到困惑。
其他问题:
i
从1开始,因此您错过了最高有效位; case 8:
循环保护,您将永远不会在开关中实际击中while (i < 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在打印时应为十进制版本。