编译后的java arrayoutofbound异常

时间:2018-04-10 05:18:02

标签: java

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)

4 个答案:

答案 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异常。