通过阅读有关数据索引导致问题的其他问题我知道,但我不知道如何解决问题。我评论了投掷发生的地方。整个投掷是
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;
}
答案 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
的结尾。