抛出“java.lang.ArrayIndexOutOfBoundsException”的ArrayList

时间:2015-02-14 03:36:54

标签: java arrays string arraylist

通过阅读有关数据索引导致问题的其他问题我知道,但我不知道如何解决问题。我评论了投掷发生的地方。整个投掷是

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 35
at assignment4.AnagramUtil.getLargestAnagramGroup(AnagramUtil.java:82)
at assignment4.AnagramTester.main(AnagramTester.java:36)

如果有人有任何想法我可以做这项工作,请告诉我。另外,我不认为我的方法有更多与解决这个问题有关,但如果需要我可以把它们放在这里。

    /*areAnagrams
     * parameters: sorted strings x & y
     * returns boolean
     * implements sort method
     */
    public static boolean areAnagrams(String x, String y)
    {
        if(sort(x).equals(sort(y)))
            return true;
        return false;
    }


    /*
     * This function takes a string array and finds the largest anagram group.
     * AnagramComparator.insertionSort() sorts the array by placing anagrams together,
     * so no sorting is needed.
     * I use ArrayList because I want to be able to freely add to the string array.
     * returns a new String[]
     */
    public static String[] getLargestAnagramGroup(String[] input)
    {
        String[] s=input;

        AnagramComparator.insertionSort(s, new AnagramComparator());

          int largestCount = 0, tempCount=1;
          ArrayList<String> largest= new ArrayList<String>();
          ArrayList<String> temp= new ArrayList<String>();

          for(int i=0; i<s.length; i++)
          {
              //since it's already sorted, we need only to compare.
              //add 
              temp.add(s[i]);
                                            //Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 35
              if (areAnagrams(s[i],s[i+1]))  //at assignment4.AnagramUtil.getLargestAnagramGroup(AnagramUtil.java:82)
              {
                  //add s[i+1] to array list
                  temp.add(s[i+1]);
                  tempCount++;
              }
              else
              {

                    //if tempcount> largestcount, empty contents of largest and make temp largest

                    if (tempCount>largestCount)
                    {
                        if(!largest.isEmpty())
                            largest.clear();
                        largest=temp;
                    largestCount=tempCount; 
                    }
                    //reset tempcount
                    tempCount=1;
              }

          }

     String[] result= new String[largest.size()];

     for (int j=0;j<largest.size();j++)
         result[j]=largest.get(j);
                return result;


    }   

3 个答案:

答案 0 :(得分:3)

你的问题在这里:

areAnagrams(s[i],s[i+1])

由于i = s.length - 1 i + 1,当i = s.length超出范围时,这将失败,因为length返回元素数,但数组索引从0开始)

变化

for(int i=0; i<s.length; i++)

for(int i=0; i<s.length - 1; i++)

答案 1 :(得分:2)

尝试更改此行:

for(int i=0; i<s.length; i++)

到此:

 for(int i=0; i<s.length-1; i++)

答案 2 :(得分:0)

你有一个循环

for(int i=0; i<s.length; i++) {...

表示对于i的最大允许值,s[i]将是s中的最后一个元素。

但是在循环中,您引用s[i + 1],这已经过了s的结尾。