2017-06-08 2 views
0

Was ich zu tun versuche, was dies nicht tun wird und wahrscheinlich nie tun wird, ist ein Array mit einer Schleife erstellen und dann aufrufen dieses Array in einer anderen Klasse. Was wäre der beste Weg, dies zu tun? Ich habe überall nach einer Lösung gesucht und sie werden nicht kompiliert. Danke für die Hilfe.Erstellen eines Arrays innerhalb einer While-Schleife (oder für eine Schleife) dann mit diesem Array außerhalb

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; 

} 

EDIT: neues Problem. Fehler erhalten Ausnahme im Thread "main" java.lang.OutOfMemoryError: Java-Heap-Speicher bei java.util.Arrays.copyOf (Arrays.java:3210) bei java.util.Arrays.copyOf (Arrays.java:3181) bei java.util.ArrayList.grow (ArrayList.java:261) bei java.util.ArrayList.ensureExplicitCapacity (ArrayList.java:235) bei java.util.ArrayList.ensureCapacityInternal (ArrayList.java:227) bei java.util.ArrayList.add (ArrayList.java:458) bei Grow.policy (Grow.java:14) bei 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); 

} 
} 

Hier ist, was ich habe jetzt. Alles funktioniert, bis ich versuche, das Array in der Test-Klasse zu erstellen.

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

    } 
} 

Ich weiß, es ist etwas einfach. Ich kann die Lösung einfach nicht sehen. Danke im Voraus. EDIT: Update. Ich habe das Problem gefunden. Spalte hatte nur eine Abnahme von 1 (könnte wirklich column--; verwenden), die es für immer Schleife machte. Spalte ++ zum Code hinzugefügt und jetzt funktioniert es. Wusste, es war etwas Einfaches.

+0

Sie können 'Liste' wie jede andere Referenz weitergeben. Es ist nicht klar, was das Problem ist. –

+0

Die JLS wird einer Ihrer besten Freunde sein. Überprüfen Sie in diesem Fall die Regeln für den Variablenbereich - https://docs.oracle.com/javase/specs/jls/se7/html/jls-6.html#jls-6.3. Speziell: Der Bereich einer lokalen Variablendeklaration in Ein Block (§14.4) ist der Rest des Blocks, in dem die Deklaration auftritt, beginnend mit seinem eigenen Initialisierer und einschließlich weiterer Deklaratoren rechts in der Deklaration der lokalen Variablen. –

+0

Wann werden Zeile und Spalte jemals initialisiert? – Tezra

Antwort

1

Sie sollten es außerhalb initialisieren:

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; 

} 

Auch Sie eine Variable nicht brauchen row zu speichern. policy.add(row); wird auch gut funktionieren.

+0

vielleicht können Sie 'List richtlinie = new ArrayList <>();' anstelle von 'ArrayList richtlinie = new ArrayList ();' –

+0

Das hat wunderbar funktioniert. Ich kann nicht glauben, dass ich das verpasst habe. Jetzt habe ich ein anderes Problem. Ausnahme im Thread "main" java.lang.OutOfMemoryError: Java-Heap-Space – Gingja

0

Das Problem gefunden. Spalte hatte nur eine Abnahme von 1 (könnte wirklich column--; verwenden), die es für immer Schleife machte. Spalte ++ zum Code hinzugefügt und jetzt funktioniert es. Wusste, es war etwas Einfaches. Arbeitscode

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

    } 
} 
Verwandte Themen