ArrayList正在添加随机值

时间:2015-01-10 06:06:55

标签: java arrays arraylist

好的,所以我想找到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));
}

}

2 个答案:

答案 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);
}