输出错误:二进制到十进制java

输出错误:二进制到十进制java,java,string,binary,Java,String,Binary,我的代码的目的是将二进制数(字符串)n转换为十进制形式 这个程序段编译成功,但输出比预期的要大得多 需要帮助。提前谢谢 public class bindecstr { public static void main(String args[]){ String s="11111"; int l=s.length(); double sum=0; int t=l-1; for(int i=0;i<l;i++){ char ch=s.charAt

我的代码的目的是将二进制数(字符串)n转换为十进制形式 这个程序段编译成功,但输出比预期的要大得多

需要帮助。提前谢谢

public class bindecstr {
public static void main(String args[]){
    String s="11111";
    int l=s.length();
    double sum=0;
    int t=l-1;
for(int i=0;i<l;i++){   
    char ch=s.charAt(i);
    int x=(int)ch;
    double d=(Math.pow(2,t-i))*x;
    sum=sum+d;
}
System.out.println(sum);
}
}
公共类bindecstr{
公共静态void main(字符串参数[]){
字符串s=“11111”;
int l=s.长度();
双和=0;
int t=l-1;

对于(int i=0;i这是因为
s.charAt(i)
是数字的字符代码,而不是其数值。
'0'
的UNICODE代码点是
U+0030
;对于
'1'
,它是
U+0031

改为

int ch=s.charAt(i) - '0';
解决此问题()。此方法有效的原因是数字的代码点是按顺序排列的。从另一个十进制数字的代码点减去零的代码点会产生该代码点与相应数字之间的“距离”,该距离对应于该数字的数值。

尝试此方法

int x = (int) ch - '0';
当你把int x=(int)ch; 保存在x中的值不是1,而是对应的unicode值49 因此,要获取for循环中需要的if语句的实际值
charch=s.charAt(i);
如果(ch='1')
x=1
如果(ch='0')

x=0

请添加一些特定的更改output@user2511145那么你做得不对(见演示,链接是可点击的;它是你的固定代码,并且正确打印31).我试过了,效果很好。你能建议我用什么方法来避免unicode的麻烦吗?因为我还处在基础阶段now@user2511145你也可以使用这个库,但这会破坏你学习练习的全部目的。I's
sum=Integer.parseInt(s,2)