首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在数组列表中查找整数模式的重复项

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

Stack Overflow用户
提问于 2015-01-14 11:25:51
回答 2查看 448关注 0票数 0

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

**是的,我已经尝试过使用ECLIPSE进行调试,但我仍然被卡住了,所以如果有人能帮我弄清楚为什么它只在最后一次重复模式的情况下打印序列,那将对我有很大帮助。谢谢。我的代码:

代码语言:javascript
复制
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(); 
            }

        }

    }
EN

回答 2

Stack Overflow用户

发布于 2015-01-14 12:03:48

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

代码语言:javascript
复制
int a [] = {4,2,1,4,2,1};
if(Collections.indexOfSubList(list, Arrays.asList(a))!=-1){
       return true;
}
return false
票数 1
EN

Stack Overflow用户

发布于 2015-01-14 11:35:51

好的,你的代码似乎有一些错误。

  1. int i=var; i>0; i--.因为var是数组的大小,所以它超出了界限。Java使用从0开始的数组,这意味着有效的指数在0,size-1范围内。替换为int i=var - 1; i >= 0; i--
  2. The j循环只会阻止任何事情发生(没有任何东西可以进入,因为您从1开始并立即通过施加限制>=6j来中断循环。删除循环。
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27935387

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档