package binarywa;
import java.util.*;
public class binaryadd {
public static void main(String args[])
{
Scanner scan=new Scanner(System.in);
String g=scan.next();
String s[]=g.split("");
int i,x=0;
for(i=s.length;i>0;i--)
{
x+=Integer.parseInt(s[i])*Math.pow(2,i);
}
}
}
我试图将二进制转换为十进制
但是在编译后我得到了一个arrayoutofbound异常
例如: 541656(其输入) 线程“main”中的异常java.lang.ArrayIndexOutOfBoundsException:6 在binarywa.binaryadd.main(binaryadd.java:16)
答案 0 :(得分:1)
保持长度s.length-1并且i> = 0将打印第一个元素 作为数组索引从0开始
package binarywa;
import java.util.*;
public class binaryadd {
public static void main(String args[])
{
Scanner scan=new Scanner(System.in);
String g=scan.next();
String s[]=g.split("");
int i,x=0;
for(i=s.length-1;i>=0;i--)
{
x+=Integer.parseInt(s[i])*Math.pow(2,i);
}
}
}
答案 1 :(得分:0)
for循环条件不正确。可以从<div class="menu-wrapper">
<ul class="menu">
<li><a href="#1">1</a></li>
<li><a href="#2">2</a></li>
<li><a href="#3">3</a></li>
<li><a href="#4">4</a></li>
</ul>
</div>
到0
访问数组索引。这就是您获得(length - 1)
ArrayIndexOutOfBoundsException
答案 2 :(得分:0)
s.length
将被剪切为4。
在循环中,您尝试访问没有值的s[4]
。
由s[]
组成的g.split("")
将{1,2,3,4}
这4个数组元素的索引以0开头。
所以,
s[0]=1
s[1]=2
s[2]=3
s[3]=4
一旦您尝试访问s[4]
,它将给出ArrayIndexOutofBoundsException,因为在该索引处您没有任何值。
解决方案是将循环作为for(i=s.length-1;i>=0;i--)
答案 3 :(得分:0)
您需要将for循环更改为以下
package binarywa;
import java.util.*;
public class binaryadd {
public static void main(String args[])
{
Scanner scan=new Scanner(System.in);
String g=scan.next();
String s[]=g.split("");
int i,x=0;
for(i=s.length-1;i>=0;i--)
{
x+=Integer.parseInt(s[i])*Math.pow(2,i);
}
}
}
但为此你还需要改变你的逻辑。即
x+=Integer.parseInt(s[i])*Math.pow(2,i+1);
否则会抛出NumberFormat异常。