在线程" main"中获得异常java.lang.ArrayIndexOutOfBoundsException:2

时间:2015-01-16 10:13:40

标签: java indexoutofboundsexception

我有一个输入代码:

vgxgp
3
2 4
2 5
7 14 

预期输出:Yes No Yes

第一个输入行包含string S,即她要求的项目的名称。

第二行包含一个integer Q,即对她说“是”或“否”的整数对数。

这些对按顺序给出,在Q行之后,每个包含2个整数a和b。 (基于1的索引)我在if(line[a]==line[b])收到错误ArrayIndex out of bound

import java.io.BufferedReader;
import java.io.InputStreamReader;

class Test {
    public static void main(String args[] ) throws Exception {

        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        String[] line = br.readLine().split(" ");
        int t =Integer.parseInt(br.readLine());

        int[][] ar = new int[t][2];
        int k=0;

        for (int j = 0; j < t; j++) {       
            String[] input1=br.readLine().split(" ");
            for (int i = 0; i < 2; i++) {
                ar[k][i]=Integer.parseInt(input1[i]);     
            }
            k=k+1;
        }
        k=0;
        for (int i = 0; i < t-1; i++) {
            System.out.println(line[i]);    
            System.out.println(ar[k][0]);
            System.out.println(ar[k][1]);
            int a=ar[k][0];
            int b=ar[k][1];         
            System.out.println("hello"+line[i]);

            if(line[a]==line[b]) {
                System.out.println("Yes");
            } else {
                System.out.println("No");
                k = k + 1;
            }
        }
    }
}

2 个答案:

答案 0 :(得分:2)

正如Niels Billen的回答所示,您的代码使用了数组line的错误索引位置,因为此数组的长度正好是1,因此要使用的索引位置为0。使用>的索引位置; 0(给定a = 2b = 4)生成ArrayIndexOutOfBoundsException

我在可读性方面简化了代码,但由于缺乏明确的问题描述,我刚刚添加了一个“好猜测”,可以产生您想要的输出(是否是)。

public class Test {

    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        String[] line = br.readLine().split(" ");
        int numberOfDataPairs = Integer.parseInt(br.readLine());

        int[][] dataPairs = new int[numberOfDataPairs][2];

        // read in the data pairs here
        for (int j = 0; j < numberOfDataPairs; j++) {

            String[] input1 = br.readLine().split(" ");
            for (int i = 0; i < 2; i++) {
                dataPairs[j][i] = Integer.parseInt(input1[i]);

            }
        }
        System.out.println(line[0]);
        // compare the data now
        for (int i = 0; i < numberOfDataPairs; i++) {

            int a = dataPairs[i][0];
            int b = dataPairs[i][1];

            // produces your desired output... via a modulo (%) operator
            // but it's a guess - as description of the problem is unclear!
            if ((b % a) == 0) {
                System.out.println("Yes");

            } else
                System.out.println("No");
        }
    }
}

答案 1 :(得分:1)

您的数组line只有一个元素vgxgp ..这就是您收到错误的原因。在最后一个循环中,您尝试访问line[a]==line[b]a = 2b=4。这些元素不存在,将抛出ArrayIndexOutOfBoundsException