好的,所以我想找到java中给定字符串中最大的子字符串。所以,我继续编写了一个递归函数来识别并返回每个子字符串的大小。我最初的计划是将所有大小的子字符串添加到Array列表中。我建议按降序对数组列表进行排序,并取最大值,这将给出最大子字符串的大小。 问题是我的ArrayList wen bonkers。它没有添加我的函数返回的值,而是存储了一些其他值。
我的功能是返回:0 0 0 0 0 0 0 0 0 0 0 8 0 0 0 0 0 2 0 1
但存储的是:0 18 17 -1 -1 -1 -1 -1 11 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
尽管如此,这是完全不同的。我确实想出了一个解决方案,但我想知道为什么ArrayList不能正常工作。任何见解将不胜感激。我再次想知道为什么ArrayList不能正常工作。
package sush;
import java.util.ArrayList;
import java.util.Collections;
public class Paliandrome {
static int chk ( String s ,int x, int y,int count)
{
String begins=s.charAt(x)+"";
String end=s.charAt(y)+"";
if(x==y && begins.equals(end))
{
System.out.println(count);
return count+1;
}
if(x>y)
return count;
if(begins.equals(end))
return chk(s,x+1,y-1,count+2);
else
return count=0;
}
public static void main(String[] args)
{
String sh = "aabaabaasdwaasddsaa";
int x = 0 , y = 0;
int count=0,high=0;
ArrayList<Integer> arr = new ArrayList<Integer>();
arr.clear();
for(int i=0 ; i<sh.length() ; i++ )
{
x=i;
y=sh.length()-1;
count=0;
int temp =chk(sh,x,y,count);
System.out.println(temp);
arr.add(temp);
}
System.out.println(high+"\n"+"ArrayList contents :");
for(int i= 0;i<arr.size();i++)
{
System.out.println(arr.indexOf(i));
}
Collections.sort(arr);
Collections.reverse(arr);
System.out.println(arr.indexOf(0));
}
}
答案 0 :(得分:2)
当您使用arr.indexOf(x)
时,您正在使用arr.get(index)
。
List.indexOf(x)
返回列表中给定值的第一个索引。 -1
表示x
不在列表中。
另一方面,arr.get(index)
返回给定索引处的元素。
答案 1 :(得分:0)
arraylist工作得很好;问题是你没有使用正确的方法来检索和打印它的元素:
System.out.println(arr.indexOf(i));
ArrayList.indexOf(E)
在数组中搜索E
并返回元素E
的位置,如果没有此元素,则返回-1
。要按照您的意愿从数组中检索元素,请使用ArrayList.get(int)
检索指定位置的元素。
System.out.println(arr.get(i));
或者更好的是,通过增强的ArrayList
循环使用for
的迭代器:
for(int num : arr)
{
System.out.println(num);
}