2016-07-21 4 views
-1

In meinem Code habe ich eine Klasse namens Inventory erstellt, um meine Informationen in einem Array zu speichern. Ich habe eine Methode zum Hinzufügen von Zeichenfolgen und eine Methode zum Anzeigen aller im Array gespeicherten Informationen erstellt. Während der Ausführung meines Codes ist etwas schief gelaufen, aber es werden keine Informationen angezeigt, die ich im Array gespeichert habe, sondern nur ein leeres Befehlsfenster. Hier ist die Mannklasse.Array wird nicht angezeigt, wenn sie aufgerufen wird?

public class Game { 

    public static void main(String[] args) { 
     Inventory playersInventory = new Inventory(); 
     playersInventory.addInventory("Knife"); 
     playersInventory.addInventory("Food"); 
     playersInventory.addInventory("Water"); 

     playersInventory.displayInventory(); 
    } 
} 

und hier ist der Inventarklasse

public class Inventory { 

    private String[] inventoryItem = new String[10]; 

    public void addInventory(String item){ 

     int x = 0; 
     while (true) { 
      if (inventoryItem[x]== null){ 
       item = inventoryItem[x]; 
       break; 
      } 
      else { 
       x++; 
      } 
     } 
    } 

    public void displayInventory(){ 
     int x = 0; 
     while (true){ 
      if (inventoryItem[x] == null){ 
       break; 
      } 
      else{ 
       System.out.println(inventoryItem[x] + "\n"); 
       x++; 
      } 
     } 
    } 
} 
+0

Aus dem Fragetitel verstehe ich, dass Sie nicht wissen, ob das Array angezeigt wird oder nicht. Wie können wir das wissen? – xenteros

+2

Ich denke, Sie möchten 'inventoryItem [x] = item;' anstelle von 'item = inventoryItem [x];'. Wahrscheinlich möchten Sie den 'item' Parameter endgültig machen, damit der Compiler über solche Fehler klagen kann (Zuweisung zu einem Parameter). – Thomas

+1

Warum verwenden Sie ArrayList nicht? – krzydyn

Antwort

1

Das Problem liegt in dieser Zeile zu füllen:

item = inventoryItem[x]; 

Die = bewerten den Ausdruck auf der rechten Seite und ordnet das Ergebnis der Variablen auf die linke. Also, was Sie dort tun, ist inventoryItem[x] zu item zuweisen.

Mit anderen Worten, Sie mutieren das Array nicht, sondern weisen dem Parameter einen neuen Wert zu, der praktisch nichts tut.

Ich denke, dass Sie den Parameter in das Array hinzufügen möchten. So Ihre Zuordnungsanweisung sollte die umgekehrt sein:

inventoryItem[x] = item; 

Eigentlich um Verwirrung zu vermeiden, nur ein ArrayList nutzen!

public class Inventory { 

    private ArrayList<String> inventoryItem = new ArrayList<>(); 

    public void addInventory(String item){ 
     inventoryItem.add(item); 
    } 

    public void displayInventory(){ 
     for (Sting item: inventoryItem) { 
      if (item != null) { 
       System.out.println(item + "\n"); 
      } 
     } 
    } 
} 

Ist das nicht viel sauberer?

+0

Solch ein einfacher Fehler, den ich hätte so dankbar sein müssen. Danke auch für die zusätzlichen Informationen über ArrayLists, die mir bisher nicht bekannt waren. Danke noch einmal! –

0

Ihre Codezeile

item = inventoryItem[x]; 

sollte

inventoryItem[x] = item; 

Sie sein werden inventoryItem[x];-zuweisen 210 wo du das Gegenteil brauchst.

0

Sie haben das Element nicht in das Array "inventoryItem" gestellt. Daher wurden keine Informationen angezeigt.

Ändern Sie den Code, um im Anschluss an die Array

 if (inventoryItem[x]== null){ 
      inventoryItem[x]=item ; 
      break; 
     } 
+0

Bitte nicht nach "versuchen" fragen. Gib eine definitive Lösung, sonst antworte nicht. – activatedgeek

+0

Dies liefert keine Antwort auf die Frage. Um einen Autor zu kritisieren oder um Klärung zu bitten, hinterlasse einen Kommentar unter seinem Beitrag. - [Aus Bewertung] (/ review/low-quality-posts/13077060) – activatedgeek

+0

@activatedgeek danke für den Vorschlag :) –

0

Wert zuweisen inventoryItem [x] = item;