【问题标题】:ArrayList throwing "java.lang.ArrayIndexOutOfBoundsException"ArrayList 抛出“java.lang.ArrayIndexOutOfBoundsException”
【发布时间】:2015-02-14 03:36:54
【问题描述】:

通过阅读论坛上的其他问题,我知道数组索引是导致问题的原因,但我不知道任何解决方法。我评论了投掷发生的地方。整个投掷是

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;


    }   

【问题讨论】:

  • 当 i = length-1; 时这条线会发生什么temp.add(s[i+1]);
  • 为什么需要String[] s=input;
  • 它仍然抛出。可能有帮助,我不知道。
  • 我使用 String[] s= 输入,因此插入排序不会影响输入。
  • @JawshBivens 引用不能那样工作。 String[] s = input 复制引用,而不是数组 - 现在 inputs 都包含对一个数组的引用。

标签: java arrays string arraylist


【解决方案1】:

你的问题在这里:

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++)

【讨论】:

    【解决方案2】:

    尝试改变这一行:

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

    对此:

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

    【讨论】:

      【解决方案3】:

      你有一个循环

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

      这意味着对于i 的最大允许值,s[i] 将是s 中的最后一个元素。

      但在循环中,您引用的是s[i + 1],它超出了s 的结尾。

      【讨论】:

        猜你喜欢
        • 2021-11-26
        • 1970-01-01
        • 2017-09-16
        • 1970-01-01
        • 2018-09-09
        • 1970-01-01
        • 2014-12-17
        • 1970-01-01
        • 2016-02-24
        相关资源
        最近更新 更多