2017-02-07 2 views
1

Ich habe versucht, eine ArrayList von Ingredients, die Objekte sind, die den Namen der Zutat (eine Zeichenfolge), den Preis (ein Doppel), die Anzahl der Kalorien (a Ganzzahl) und wenn die Zutat vegetarisch ist (ein Boolean).Verwenden eines Scanners zum Füllen einer ArrayList von Objekten

Da es mehrere Zutaten geben wird, dachte ich, ich sollte eine ArrayList verwenden. Wie fülle ich das Inhaltsobjekt mit den Daten vom Scanner? Dies ist, was habe ich bisher:

public static void main(String[] args){ 
    Scanner s = new Scanner(System.in); 
    int numberOfIngredients = s.nextInt(); 
    List<Ingredient> ingredientArrayList = new ArrayList<Ingredient>(); 
    for (int i = 0; i< numberOfIngredients; i++){ 
     String ingredientName = s.next(); 
     double pricePerOunce = s.nextDouble(); 
     boolean isVegetarian = s.nextBoolean(); 
     int numberOfCalories = s.nextInt(); 
     ingredientArrayList.add(ingredientName, pricePerOunce, numberOfCalories, isVegetarian); 
    }// ends for loop to fill the ingredientArray 
} 
+0

Welche Frage haben Sie mit dem Code, Sie geschrieben haben? Außerdem müssen wir wahrscheinlich mindestens den Konstruktor Ihrer 'Ingredient'-Klasse sehen, um dies zu beantworten. – nhouser9

+0

Sie haben eine Liste von Inhaltsstoffobjekten, so dass Sie einfach ein neues Inhaltsstoffobjekt erstellen und hinzufügen. – NAMS

+0

Um die Geschwindigkeit des Einfügens in Ihre 'ArrayList' zu erhöhen, übergeben Sie die Anzahl der Zutaten an den [' ArrayList'-Konstruktor] (https://docs.oracle.com/javase/8/docs/api/java/util/ArrayList) .html # ArrayList-int-). 'neue ArrayList <> (numberOfIngredients)' – 4castle

Antwort

1
ingredientArrayList.add(ingredientName, pricePerOunce, numberOfCalories, isVegetarian); 

wie dieses etwas sein sollte

ingredientArrayList.add(new Ingredient(ingredientName, pricePerOunce, numberOfCalories, isVegetarian)); 

auch Ihre Ingredient Klassenkonstruktors haben sollte, die alle vier Attribute nimmt

Sie haben Arraylist instanziiert Art des Inhaltsstoffs (CLASS OBJECT) Diese ArrayList kann nur Inhaltsstoffklassenobjekte statt einzelner Attribute speichern.

+0

danke! Ich verstehe nicht, was du im zweiten Teil über instatiated ArrayList meinst. Es sagt "kann den Typ Bestandteil nicht instanziieren". Was bedeutet das? Ich dachte durch das Speichern eines Ingredient-Klassenobjekts, dass ich die Attribute von Ingredient speichern könnte (wie Name der Zutat, Preis pro Unze, Anzahl der Kalorien, Vegetarismus). – etnie1031

+0

Wenn Sie die Liste erstellen, haben Sie die Liste zum Speichern des Inhaltsstofftyps OBJECT definiert, als Sie die Liste geschrieben haben. Die Liste kann also nur Listen von Objekten speichern, und dieses Objekt muss ein Inhaltsklassenobjekt sein. Was Sie in erster Linie getan haben, ist, dass Sie versuchen, Inhaltsstoffattribute in der Objektliste zu speichern. Objektliste haben viele Objekte und jedes Objekt hat viele Attribute Beziehung –

1

Ingredient ist ein Objekt, so dass Ihre Arraylist ist im Grunde eine Liste der Ingredient Objekte. Um der ArrayList ein Ingredient-Objekt hinzuzufügen, müssen Sie das Objekt der Liste und nicht einzelnen Werten hinzufügen.

Etwas wie folgt aus:

ingredientArrayList.add(new Ingredient(ingredientName, pricePerOunce, numberOfCalories, isVegetarian)); 
Verwandte Themen