如何避免ArrayIndexOutOfBounds?

时间:2014-01-24 16:38:32

标签: java arrays

我正在尝试输入一个数字,并让程序创建一个具有该长度的新数组。然后,我将一次输入一个数组中的所有元素。之后我输入一个数字,程序将在数组中搜索该数字。不幸的是,我在下面写的代码抛出ArrayIndexOutOfBoundsException。我该如何解决这个问题?

import java.io.*;
public class aw
{
    public static void main(String args [])throws IOException``
    {
        BufferedReader in = new BufferedReader(new InputStreamReader(System.in));

        int z;
        boolean vince = false;
        System.out.print("Enter Element :");
        int a = Integer.parseInt(in.readLine());
        int [] jes = new int[a];

        for(z=0; z<jes.length; z++)
        {
            System.out.print("Numbers :");
            jes[z] = Integer.parseInt(in.readLine());

        }

        System.out.print("Enter search:");

        int []x = new int [100];
        x[100] = Integer.parseInt(in.readLine());

        if(jes[z] == x[100])
        {
            vince = true;
            if(vince == true)
            {
                System.out.print("Array "+jes[z]+ "Found at Index"+z); // here is my problem if i input numbers here it will out of bounds
            }
        }
    }
}

2 个答案:

答案 0 :(得分:4)

第一个问题是您重复使用z而不重置它。您的循环递增z直到它大于数组jes的最大索引,因此当您尝试重用z时,您使用的索引超出范围。当您尝试将读取值与jes进行比较时,我认为您缺少for循环,这可能会重置并重用z,但使用不同的变量来增加可能会更清楚。

第二个是你为x声明了一个大小为100的数组,并且正在尝试访问第101个索引(超出范围)。 int[] x = new int[100]的标记为0-99。

此代码应按预期工作:

import java.io.*;
public class aw
{
    public static void main(String args []) throws IOException {
    BufferedReader in = new BufferedReader(new InputStreamReader(System.in));

        boolean vince = false;
        System.out.print("Enter Element :");
        int a = Integer.parseInt(in.readLine());
        int [] jes = new int[a];

        for(int i=0; i<jes.length; i++) {
            System.out.print("Numbers :");
             jes[i] = Integer.parseInt(in.readLine());

        }

        System.out.print("Enter search:");
        int x = Integer.parseInt(in.readLine());
        for(int i=0; i < jes.length; i++) {
            if(jes[i] == x) {
                vince = true;
                break; //found the value, no need to keep iterating
            }
        }

        if(vince == true) {
            System.out.print("Array "+jes[i]+ "Found at Index"+i);
        }
    }
}

答案 1 :(得分:2)

我不确定你要做什么但是当你试图访问x [100]时会得到一个ArrayOutOfBoundsException。该上下文中的x是一个包含100个元素的数组,但在java中,x [0]是第一个元素,因此x的最后一个元素是x [99],x [100]是第101个元素......界限!