我必须在我正在创建的数组中找到一个模式,然后在看到模式重复两次时停止向数组添加数字。我试图找到的模式是4-2-1,所以当在这个算术序列中连续重复两次时,程序就完成了。目前我的输出给了我一个模式序列,其中包含以下错误:[10,5,16,8,4,2,1]线程“main”中的异常java.lang.IndexOutOfBoundsException:Index:6,Size:0 < / p>
**是的我已经尝试过调试使用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();
}
}
}
答案 0 :(得分:1)
最简单的方法是使用Collections.indexOfSubList
。这样的事情。
int a [] = {4,2,1,4,2,1};
if(Collections.indexOfSubList(list, Arrays.asList(a))!=-1){
return true;
}
return false
答案 1 :(得分:0)
嗯,您的代码似乎有一些错误。
我将在此列举一些:尽可能多地修复,然后检查您的代码是否有效。
int i=var; i>0; i--
。由于var
是数组的大小,因此它超出了范围。 Java使用从0开始的数组,这意味着有效的indeces在[0,size-1](包括)范围内。替换为int i=var - 1; i >= 0; i--
j
循环除了阻止任何事情发生之外什么都不做(没有任何东西可以进入,因为你从1开始并通过施加限制>=6
立即打破循环并且从未使用j
。删除循环。