2017-06-08 73 views
0

我正在嘗試做什麼,這不會做,也許永遠不會做,是使用循環創建一個數組,然後調用該數組在另一個類中。什麼是最好的方式去做這件事。我已經找遍瞭解決方案,他們不會編譯。謝謝您的幫助。編號: 新問題。 在線程「main」中獲取錯誤異常java.lang.OutOfMemoryError:java.util.Arrays.copyOf上的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)在while循環(或for循環)內創建一個數組,然後在外部使用該數組

public class Test{ 
public static void main(String[] args){ 

Grow trr = new Grow(); 
ArrayList arr = trr.policy(); 
System.out.print(arr); 

} 
} 

這裏是我有什麼現在。一切工作,直到我嘗試在測試類中的數組。

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

    } 
} 

我知道這很簡單。我只是看不到解決方案。提前致謝。 編輯:更新。發現問題。列只減少1(真的可以使用列 - ;),這使得它永遠循環。在代碼中添加了列++,現在它可以工作。知道這是簡單的事情。

+0

您可以像所有其他引用一樣傳遞List。目前尚不清楚問題是什麼。 –

+0

JLS將是你最好的朋友之一。在這種情況下,請查看變量作用域的規則 - https://docs.oracle.com/javase/specs/jls/se7/html/jls-6.html#jls-6.3具體來說:在本地變量聲明的範圍塊(第14.4節)是聲明出現的塊的其餘部分,從其自己的初始化程序開始,並在本地變量聲明語句右側包含任何其他聲明符。 –

+0

行和列何時初始化? – Tezra

回答

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);也可以正常工作。

+0

也許你可以使用'List policy = new ArrayList <>();'而不是'ArrayList policy = new ArrayList ();' –

+0

這很好用。不能相信我錯過了這一點。現在我還有另一個問題。線程「main」中的異常java.lang.OutOfMemoryError:Java堆空間 – Gingja

0

發現問題。列只減少1(真的可以使用列 - ;),這使得它永遠循環。在代碼中添加了列++,現在它可以工作。知道這是簡單的事情。 工作代碼

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

    } 
}