Java中二进制到十进制的转换

Java中二进制到十进制的转换,java,Java,我需要写一个能把位转换成十进制的程序。每当我输入一个位时,它只输出0.0。我不明白为什么。我知道这是难以置信的简单,但我只是没有看到它。任何帮助都将不胜感激 import java.lang.Math; import java.util.Scanner; public class Lab1 { static double number = 0; public static double toDec(String num) { char[] charArra

我需要写一个能把位转换成十进制的程序。每当我输入一个位时,它只输出0.0。我不明白为什么。我知道这是难以置信的简单,但我只是没有看到它。任何帮助都将不胜感激

import java.lang.Math;
import java.util.Scanner;


public class Lab1 {
    static double number = 0;

    public static double toDec(String num) {

        char[] charArray = num.toCharArray();

        for(int i = 0; i<charArray.length;i++) {
            if(charArray[i] == 1) {
                number = Math.pow(2, charArray.length-i);
            }
        }

        return number;


    }


    public static void main(String[] args) {
        Scanner keyboard = new Scanner(System.in);
        int bit;
        String bitString;

        System.out.println("Please enter a bit");
        bit = keyboard.nextInt();
        bitString = Integer.toString(bit);


        System.out.println(toDec(bitString));



    }

}
import java.lang.Math;
导入java.util.Scanner;
公共类Lab1{
静态双数=0;
公共静态双toDec(字符串编号){
char[]charArray=num.toCharArray();

对于(int i=0;i,您将
charArray[i]
1
进行了比较,但您将苹果与桔子进行了比较,具体而言,将
char
int
进行了比较

与字符
'1'
进行比较

if(charArray[i] == '1') {
另外,您可以在
toDec
中将
number
设置为局部变量;它不需要存在于该方法之外

此外,这仅在设置了一个位的情况下有效。现在您仅使用一个位,但如果要修改此设置以使用多个位,则需要进行其他更改


每次调用
toDec
且条件为
true
时,您都会覆盖
number
。您可能希望使用
+=
添加到
number
,而不是使用比较
字符[i]的
=
覆盖以前的值
1
,但你是在把苹果和橙子比较,特别是把
char
int
进行比较

与字符
'1'
进行比较

if(charArray[i] == '1') {
另外,您可以在
toDec
中将
number
设置为局部变量;它不需要存在于该方法之外

此外,这仅在设置了一个位的情况下有效。现在您仅使用一个位,但如果要修改此设置以使用多个位,则需要进行其他更改

每次调用
toDec
且条件为
true
时,您都会覆盖
number
。您可能希望使用
+=
添加到
number
,而不是使用
=
覆盖以前的值。执行以下操作:

public static Integer toDec(String num) {
  return Integer.parseInt(num, 2);
}
该工作是否:

public static Integer toDec(String num) {
  return Integer.parseInt(num, 2);
}

因此,如果你想取字符串“110011”,它是51。对于big-endian,你必须确定要处理多少位。因此,如果你读取字符串,它是6位长,那么你知道第一位必须向左移动6位

int l = 6;
long value = 0;

for( int i = 0; i < l; i++ )
{
   int bit = ( charArray[i] == "1" ) ? 1 : 0;

   l = l + ( bit << l-i );
}
intl=6;
长值=0;
对于(int i=0;il=l+(位因此,如果你想取字符串“110011”,它是51。对于big-endian,你必须确定要处理多少位。因此,如果你读取的字符串是6位长,那么你知道第一位必须向左移动6位

int l = 6;
long value = 0;

for( int i = 0; i < l; i++ )
{
   int bit = ( charArray[i] == "1" ) ? 1 : 0;

   l = l + ( bit << l-i );
}
intl=6;
长值=0;
对于(int i=0;il=l+(位)尝试为此使用调试器,您会很快发现if(charArray[i]==1)中的语句没有被执行……您可能会感兴趣地知道
Integer.parseInt(“0100010101”,2)
执行此任务。尝试为此使用调试器,您会很快发现if中的语句(charArray[i]==1)未被执行…您可能有兴趣知道
Integer.parseInt(“0100010101”,2)
这个job.chars有一个int值,所以它不是一个苹果对橙色的比较。但这肯定不是他想要的。非常感谢。它现在正在工作。我真的很感激!@ColinD所有东西都有一个int值。但是如果你想说,将int值与HashMap进行比较没有苹果对橙色那么糟糕,我们有一个问题lol.@user2002573
charArray.length-i
太大了。使用
charArray.length-i-1
@user2002573您有一个问题。假设您有“001”,长度3。当你到达数组的末尾时,
i
2
,并且
3-2=1
pow
的结果将其乘以2。减去1,即
charArray.length-i-1
。chars有一个整数值,所以这不是苹果对橙色的比较。但这绝对不是他想要的。谢谢你太好了。它现在正在工作。我真的很感激!@ColinD所有东西都有一个int值。但是如果你想说,将int与HashMap进行比较没有苹果与桔子那么糟糕,那么我们有一个问题,哈哈。@user2002573
charArray.length-I
太大了。使用
charArray.length-I-1
@user2002573你有一个问题em.假设您有“001”,长度为3。当您到达数组末尾时,
i
2
,并且
3-2=1
pow
的结果将其乘以2。减去1,即
charArray.length-i-1