【发布时间】:2017-11-10 14:27:55
【问题描述】:
我正在尝试做的是使用循环创建一个数组,然后在另一个类中调用该数组,这不会而且可能永远不会这样做。解决此问题的最佳方法是什么。我已经到处寻找解决方案,但他们不会编译。感谢您的帮助。
import java.util.*;
public class Test{
public static void main(String[] args){
Grow t = new Grow();
ArrayList arr = new ArrayList();
arr = t.Grow();
System.out.print(arr);
}
}
public class Grow{
static int row;
static int column;
public ArrayList<Integer> poli(){
while(row < 51 ){
int r = row;
while(column < 1){
ArrayList<Integer> policy = new ArrayList<Integer>();
policy.add(r);
policy.add(0);
}
column-=1;
row++;
}
return policy;
}
编辑: 新问题。 在线程“main”java.lang.OutOfMemoryError:Java 堆空间中获取错误异常 在 java.util.Arrays.copyOf(Arrays.java:3210) 在 java.util.Arrays.copyOf(Arrays.java:3181) 在 java.util.ArrayList.grow(ArrayList.java:261) 在 java.util.ArrayList.ensureExplicitCapacity(ArrayList.java:235) 在 java.util.ArrayList.ensureCapacityInternal(ArrayList.java:227) 在 java.util.ArrayList.add(ArrayList.java:458) 在 Grow.policy(Grow.java:14) 在 Test.main(Test.java:8)
public class Test{
public static void main(String[] args){
Grow trr = new Grow();
ArrayList arr = trr.policy();
System.out.print(arr);
}
}
这就是我现在所拥有的。一切正常,直到我尝试在 Test 类中创建数组。
import java.util.*;
public class Grow{
static int row;
static int column;
public ArrayList<Integer> policy(){
ArrayList<Integer> policy = new ArrayList<Integer>();
while(row < 51 ){
while(column < 1){
policy.add(row);
policy.add(0);
column++; //this addition fixed my problem
}
column-=1;
row++;
}
return policy;
}
}
public class Test{
public static void main(String[] args){
Grow work= new Grow();
ArrayList testing= work.policy();
System.out.print(testing);
}
}
我知道这很简单。我只是看不到解决方案。提前致谢。 编辑:更新。发现了问题。 Column 只减少了 1(真的可以使用 column--;),这使它永远循环。在代码中添加了 column++,现在它可以工作了。知道这很简单。
【问题讨论】:
-
您可以像任何其他参考一样传递
Lists。目前尚不清楚问题是什么。 -
JLS 将成为您最好的朋友之一。在这种情况下,请查看变量范围的规则 - docs.oracle.com/javase/specs/jls/se7/html/jls-6.html#jls-6.3 具体来说:块中局部变量声明的范围(第 14.4 节)是声明出现的块的其余部分,从它自己的初始化程序开始,包括任何局部变量声明语句右侧的更多声明符。
-
row 和 col 什么时候初始化?
-
static int 为整个类初始化它们,使它们成为类变量。 Int 的默认值始终为零 @Tezra