2017-01-27 1 views
0

Ich möchte eine Instanz einer Klasse erstellen, die ein Array von Klassenmembern enthält, in denen das Array bei der Initialisierung in der Länge definiert ist. Der Code, den ich geschrieben habe, enthält keine Fehler vorkompilieren, aber nach dem Ausführen gibt nullPointerException zurück. Ich möchte auf die Produkte von class storeA zugreifen können, indem ich storeA.products [productnumber] eintippe. (Produktvariable), ist das möglich?Java create Array von Klassen innerhalb der Klasse von außerhalb der statischen Klasse

package tinc2; 

public class FirstProgram { 

    public static void main(String[] args) { 
     store storeA = new store(); 
     storeA.name = "Walmart"; 
     storeA.products = new store.product[3]; 
     storeA.products[0].name = "Horses"; 
     System.out.println(storeA.products[0].name); 
    } 

    public static class store{ 
     String name; 
     product products[]; 
     static class product{ 
      String name; 
      int quantity; 
      double price; 
     } 
    } 

} 

Antwort

1

Go für

public static void main(String[] args) { 
    store storeA = new store(); 
    storeA.name = "Walmart"; 
    storeA.products = new store.product[3]; 
    storeA.products[0] = new store.product(); 
    storeA.products[0].name = "Horses"; 
    System.out.println(storeA.products[0].name); 
} 

statt.

Außerdem sollten Sie diese Klassen in separaten Dateien platzieren. Sie sollten den Namenskonventionen in Java folgen, z. Store anstelle von store. Sie sollten Getter und Setter verwenden.

Ich würde static s vermeiden, wenn es möglich ist.

+0

das ist die erste Syntax, die ich versuchte, nullPointerException. – tincopper2

+0

Nein, es ist modifiziert;) –

+1

Es scheint, dass jedes einzelne Produkt als ein Stück des Arrays einzeln deklariert werden muss, um verwendet zu werden, und das ist, was mir fehlte. Ich habe diese beiden Zeilen zu Ihrem Code hinzugefügt und jetzt funktioniert es genau so, wie es nötig ist, danke. 'für (int i = 0; i tincopper2

0

Sie sollten keine statische Klasse instanziieren. Ihre Produktklasse sollte nicht als statisch definiert sein. Ich empfehle:

package tinc2; 

public class FirstProgram { 

    public static void main(String[] args) { 
     Store.name = "Walmart"; 
     Store.products = new Product[1]; 
     Store.products[0] = new Product(); 
     Store.products[0].name = "Horses"; 
     System.out.println(Store.products[0].name); 
    } 

    public static class Store{ 
     String name; 
     Product products[]; 
    } 

    public class Product{ 
     String name; 
     int quantity; 
     double price; 
    } 
} 
+0

Das würde bedeuten, dass ich nur einen Laden habe. – tincopper2

+0

Dies ist nur ein Beispiel. Sie können das Array beliebig skalieren. Alternativ können Sie eine Datenstruktur mit einer flexiblen Größe wie eine verknüpfte Liste verwenden. – tonythewest

+0

Ich versuche es so zu machen, dass der Klassenspeicher eher ein Datentyp ist, der ein Array von Produkten enthält, die jedoch wann immer und zahlreich initialisiert werden können. – tincopper2

Verwandte Themen