2017-06-08 6 views
0

これはやりませんが、おそらく決して行うことはありませんが、ループを使用して配列を作成して呼び出します他のクラスの配列これについて最善の方法は何でしょうか。私は解決のために全部を見てきました、そして、彼らはコンパイルされません。助けてくれてありがとう。whileループ内の配列を作成する(またはループのために)その配列を外側に使用する

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ヒープスペース at java.util.Arrays.copyOf(Arrays.java:3210) at java.util.Arrays.copyOf(Arrays.java:3181) (ArrayList.java:227) at java.util.ArrayList.gens(ArrayList.java:261) Grow.policyでjava.util.ArrayList.add(ArrayList.java:458) はTest.mainで(Grow.java:14) (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); 

    } 
} 

私はそれが簡単なことを知っています。私は解決策を見ることができません。前もって感謝します。 EDIT:更新。問題が見つかりました。列は1だけ減少しました(実際には列を使用することができます;)。コードに++のコードを追加しました。それが何か簡単だと分かっていました。

+0

他の参照と同様に 'List'sを渡すことができます。問題の内容は明らかではありません。 –

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

} 

はまた、あなたがrowを格納する変数は必要ありません。 policy.add(row);も問題なく動作します。

+0

ArrayList の代わりにList policy = new ArrayList <>(); 'を使用することができます。ポリシー=新規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); 

    } 
} 
関連する問題