【问题标题】:creating an array inside a while loop(or for loop) then using that array outside在 while 循环(或 for 循环)内创建一个数组,然后在外面使用该数组
【发布时间】: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

标签: java arrays loops


【解决方案1】:

你应该在外面初始化它:

public ArrayList<Integer> poli(){

    ArrayList<Integer> policy = new ArrayList<Integer>();

    while(row < 51 ){
        int r = row;
            while(column < 1){

                policy.add(r);
                policy.add(0);

            }

        column-=1;
        row++;
    }

return policy;

}

此外,您不需要变量来存储rowpolicy.add(row); 也可以正常工作。

【讨论】:

  • 也许你可以用List&lt;Integer&gt; policy = new ArrayList&lt;&gt;();代替ArrayList&lt;Integer&gt; policy = new ArrayList&lt;Integer&gt;();
  • 效果很好。不敢相信我错过了。现在我还有另一个问题。线程“主”java.lang.OutOfMemoryError 中的异常:Java 堆空间
【解决方案2】:

发现问题。 Column 只减少了 1(真的可以使用 column--;),这使它永远循环。在代码中添加了 column++,现在它可以工作了。知道这很简单。 工作代码

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);

    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-08-28
    • 2016-06-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-08-11
    • 2023-04-11
    相关资源
    最近更新 更多