java - 在数组列表中查找整数模式的重复项

标签 java arraylist

我必须在我正在创建的数组中找到一个模式,然后当发现该模式重复两次时停止向数组添加数字。我试图找到的模式是 4-2-1,所以当这个算术序列连续重复两次时,程序就完成了。目前,我的输出给了我一个模式序列,错误如下: [10, 5, 16, 8, 4, 2, 1] Exception in thread "main"java.lang.IndexOutOfBoundsException: Index: 6, Size: 0

**是的,我已经尝试使用 ECLIPSE 进行调试,但我仍然陷入困境,因此,如果有人可以帮助我弄清楚为什么它只在最后重复一次模式来打印序列,那将对我有很大帮助。谢谢。我的代码:

Scanner inData = new Scanner(new File("test.txt"));
    ArrayList<Integer> list= new ArrayList<Integer>();

        while (inData.hasNext())
        {

            int numA=inData.nextInt(); 
            int var;
            boolean done=false;


            list.add(numA);

            while(!done)
            {
                var=list.size();

                for(int i=var;i>0;i--)
                {
                    numA=list.get(var-1);
                    if(numA%2==0)
                    {
                        numA/=2;
                        list.add(numA);

                    }
                    else
                    {
                        numA=(numA*3)+1;
                        list.add(numA);
                    }
                    var=list.size();

                    if (var>6)
                    {
                    for(int j=1;j>=6;j++)
                    {
                        if(list.get(var-1)==1)
                        {
                            if(list.get(var-4)==1)
                            {
                                if(list.get(var-2)==2)
                                    {
                                        if(list.get(var-5)==2)
                                        {
                                            if(list.get(var-3)==4)
                                            {
                                                if(list.get(var-6)==4)
                                                {
                                                    done=true;
                                                }
                                            }
                                        }
                                    }

                            }

                    }

                }

                System.out.print(list);
                list.clear(); 
            }

        }

    }Scanner inData = new Scanner(new File("test.txt"));
    ArrayList<Integer> list= new ArrayList<Integer>();

        while (inData.hasNext())
        {

            int numA=inData.nextInt(); 
            int var;
            boolean done=false;


            list.add(numA);

            while(!done)
            {
                var=list.size();

                for(int i=var;i>0;i--)
                {
                    numA=list.get(var-1);
                    if(numA%2==0)
                    {
                        numA/=2;
                        list.add(numA);

                    }
                    else
                    {
                        numA=(numA*3)+1;
                        list.add(numA);
                    }
                    var=list.size();

                    if (var>6)
                    {
                    for(int j=1;j>=6;j++)
                    {
                        if(list.get(var-1)==1)
                        {
                            if(list.get(var-4)==1)
                            {
                                if(list.get(var-2)==2)
                                    {
                                        if(list.get(var-5)==2)
                                        {
                                            if(list.get(var-3)==4)
                                            {
                                                if(list.get(var-6)==4)
                                                {
                                                    done=true;
                                                }
                                            }
                                        }
                                    }

                            }

                    }

                }

                System.out.print(list);
                list.clear(); 
            }

        }

    }

最佳答案

最简单的方法是使用Collections.indexOfSubList。像这样的东西。

int a [] = {4,2,1,4,2,1};
if(Collections.indexOfSubList(list, Arrays.asList(a))!=-1){
       return true;
}
return false

关于java - 在数组列表中查找整数模式的重复项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27935387/

相关文章:

Java递归算法,我无法理解逻辑

c# - 询问 - 如何将多个 List<T> 添加到具有特定名称的 List<T>

java - 向随机数数组中的随机位置插入一个数字

java - 从 ArrayList 中删除字符串

java - 列出队列管理器上的所有队列

java - 使用 Oracle SEQUENCES 和 SQL-Server IDENTITIES 生成 Hibernate id

java - 限制 Spring Webservice 并发调用

android - 如何将arraylist中的所有值放入android中的hashmap?

java - java中数组列表的配对值

java - 使用按钮在运行时更改 JPanel