Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
嵌套循环导致OutOfMemory错误:Java堆空间_Java_Arrays_String_Arraylist - Fatal编程技术网

嵌套循环导致OutOfMemory错误:Java堆空间

嵌套循环导致OutOfMemory错误:Java堆空间,java,arrays,string,arraylist,Java,Arrays,String,Arraylist,我试图创建一个字符串数组的数组列表,其中包含所有可能的0和1的组合,四维。也就是说,[0,0,0,0]是一个组合,[0,0,0,1]是另一个组合。总共有$2^4$个组合,所以我使用几个嵌套循环来生成这个数组列表。但是,当我尝试运行循环时,会出现“内存不足”错误。看一看: String[] t4 = new String[4]; ArrayList<String[]> list4 = new ArrayList<String[]>(); for(int i=0; i&

我试图创建一个字符串数组的数组列表,其中包含所有可能的0和1的组合,四维。也就是说,[0,0,0,0]是一个组合,[0,0,0,1]是另一个组合。总共有$2^4$个组合,所以我使用几个嵌套循环来生成这个数组列表。但是,当我尝试运行循环时,会出现“内存不足”错误。看一看:

String[] t4 = new String[4]; 

ArrayList<String[]> list4 = new ArrayList<String[]>();

for(int i=0; i<= 1; i++)
{
String count = Integer.toString(i);    
t4[0]=count;
list4.add(t4); 
 for(int j=0; j<= 1; j++)
 {
 String count1 = Integer.toString(j);    
 t4[1]=count1;
 list4.add(t4);
  for(int k=0; k<= 1; k++)
  {
  String count2 = Integer.toString(k);    
  t4[2]=count2;
  list4.add(t4); 
   for(int m=0; m<= 1;)
   {
   String count3 = Integer.toString(m);    
   t4[3]=count3;
   list4.add(t4);
   t4 = new String[4];
   }
  }
 }
}
String[]t4=新字符串[4];
ArrayList list4=新的ArrayList();
对于(int i=0;i你有:

for(int m=0; m<= 1;)

for(int m=0;m您不修改
m

改变这个

for(int m=0; m<= 1;)

for(int m=0;m在内部“for”循环中,您忘记了递增变量“m”,因此它将进入无限循环。

问题在于缺少m++。此外,循环应如下所示:

for(int i=0; i<= 1; i++)
{
String count = Integer.toString(i);    
 for(int j=0; j<= 1; j++)
 {
 String count1 = Integer.toString(j);    
  for(int k=0; k<= 1; k++)
  {  
  String count2 = Integer.toString(k);    
   for(int m=0; m<= 1;m++)
   {
   String count3 = Integer.toString(m);    
   t4[0]=count;   
   t4[1]=count1;
   t4[2]=count2;    
   t4[3]=count3;
   list4.add(t4);
   t4 = new String[4];
   }
  }
 }
}

for(int i=0;i您忘记在
m
for
循环中增加
m
。这是一个无限循环。捕捉效果好,速度也快。
for(int m=0; m<= 1;m++)
for(int i=0; i<= 1; i++)
{
String count = Integer.toString(i);    
 for(int j=0; j<= 1; j++)
 {
 String count1 = Integer.toString(j);    
  for(int k=0; k<= 1; k++)
  {  
  String count2 = Integer.toString(k);    
   for(int m=0; m<= 1;m++)
   {
   String count3 = Integer.toString(m);    
   t4[0]=count;   
   t4[1]=count1;
   t4[2]=count2;    
   t4[3]=count3;
   list4.add(t4);
   t4 = new String[4];
   }
  }
 }
}