数组索引超出范围错误

时间:2013-04-20 19:05:06

标签: java arrays

我正在研究一个从文件读取输入的程序,并给出输出有多少字符串是互补的。 这是代码

import java.io.BufferedReader;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.util.Arrays;
import java.util.Random;
import java.util.Scanner;




public class QuickSorting {

    /**
     * @param args
     * @throws IOException 
     */
    public static void main(String[] args) throws IOException {
        String data;
        Boolean status=false;
        int counter=0;
        int cases,case_item;
        String[]inputs;
        String to_cmp;
        String with_cmp;
        // TODO Auto-generated method stub
        File file = new File("input.txt");  
        //  Get data from this file using a file reader.   
        FileReader fr = new FileReader(file);  
        // To store the contents read via File Reader  
        BufferedReader br = new BufferedReader(fr);
        //writer to write in file

        data=br.readLine();
         cases=Integer.parseInt(data);
         //check total cases
        for(int i=1;i<=cases;i++)
        {
            data=br.readLine();
            case_item=Integer.parseInt(data.trim());
            inputs=new String[case_item];
            //check entries in each case
            for(int c_i=0;c_i<case_item;c_i++)
            {
                data=br.readLine();
                inputs[c_i]=data;

            }

            for(int i1=0;i1<(inputs.length-1);i1++)
            {

                for(int j=0;j<(inputs.length-1);i1++)
                { 
                    if(i1!=j)
                    {  to_cmp=inputs[i1].toString();
                        with_cmp=inputs[j];
                        status=compare_entry(to_cmp,with_cmp);
                        if (status)
                        {counter++;}
                    }
                }

            }
            System.out.println("The number of complementary strings  are "+counter);
        }

} 

public static boolean compare_entry(String to_cmp,String with_cmp)
{Boolean stat=false;
for(int i=0;i<(to_cmp.length()-2);i++)
{
    if(to_cmp.charAt(i)!=with_cmp.charAt(i))
    {stat=true;
    }
    else
    {
        break;
    }
}
    return stat;}
}

但是我在第58行的第38行中获得了Array of Array 的 to_cmp =输入[I1]的ToString()

2 个答案:

答案 0 :(得分:5)

在for循环中用j再次递增i1。

for(int j=0;j<(inputs.length-1);i1++)

应该是

for(int j=0;j<(inputs.length-1);j++)

答案 1 :(得分:1)

问题出在这一行:

for(int j=0;j<(inputs.length-1);i1++)

修复如下:

for(int j=0;j<(inputs.length-1);j++) // it's j++, not i1++

你看,你正在增加错误的计数器。此外,循环条件有点特殊,通常我们使用i < inputs.length:注意我们不从长度中减去1,否则将不会访问数组中的最后一个元素。