ArrayList 正在添加随机值

ArrayList is adding random values

好的,所以我想在 java 中的给定字符串中找到最大的子字符串。所以,我继续写了一个递归函数来识别和 return 每个子字符串的大小。我最初的计划是将所有大小的子字符串都添加到数组列表中。然后我建议按降序对数组列表进行排序,并取最上面的值,这将给我最大子字符串的大小。 问题是我的 ArrayList wen bonkers。它不添加我的函数正在 returning 的值,而是存储一些其他值。

我的函数是 returning: 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));
}

}

你在应该使用 arr.get(index) 的时候使用了 arr.indexOf(x)

List.indexOf(x) returns 列表中给定值的第一个索引。 -1 表示 x 不在列表中。

另一方面 arr.get(index) returns 给定索引处的元素。

arraylist 工作正常;问题是您没有使用正确的方法来检索和打印其元素:

    System.out.println(arr.indexOf(i));

ArrayList.indexOf(E) 在数组中搜索 E 和 returns 元素 E 的位置,如果没有这样的元素,则搜索 -1。要从数组中检索元素,如您所愿,请使用 ArrayList.get(int) 检索指定位置的元素。

    System.out.println(arr.get(i));

或者,更好的是,通过增强的 for 循环使用 ArrayList 的迭代器:

for(int num : arr)
{
    System.out.println(num);
}