enum Attribut von Objekten einer Hashmap ausgeben

Diskutiere enum Attribut von Objekten einer Hashmap ausgeben im Java Basics - Anfänger-Themen Bereich.
N

nikva

Hallo Java-Forum,
Ich arbeite grade an einer Aufgabe und habe bei folgender Aufgabe Probleme eine toString Methode bei einer HashMap anzuwenden.
Bei mir wird lediglich die Speicheradresse des Objekts ausgegeben.

eine weitere Frage habe ich bezüglich folgendem Teil der auf mich auf den ersten Blick irgendwie widersprüchlich erscheint:
In einem interface soll folgendes implementiert werden:
" Implementieren Sie eine Methode createSerial die eine ganzzahlige Seriennummer für Produkte generiert. Die erste Seriennummer ist 0 und soll bei jedem Aufruf um 1 erhöht werden. Beachten Sie das diese Nummern über das ganze Programm hinweg eindeutig sein müssen. "

Jedoch soll in einer Klasse dann die Seriennummer als Parameter übergeben werden wodurch sie ja nicht mehr eindeutig erzeugt werden könnte?
"Erstellen Sie einen Konstruktor der Seriennummer, Preis und Name als Parameter erhält. "

Ich hoffe mir kann jemand bei den beiden Problemen einen Typ geben :)
Java:
package edu.hm.cs.swe2;

import edu.hm.cs.swe2.food.Cake;
import edu.hm.cs.swe2.food.Cake.Flavour;
import edu.hm.cs.swe2.products.Box;

public class Main {

    public static void main(String[] args) {
        Cake cake1 = new Cake(Flavour.STRAWBERRY, 4);
        Cake cake2 = new Cake(Flavour.CHOCLATE, 7);
        Box<Cake> box = new Box<Cake>(1, 1, "cakebox");
        box.addFoods(cake1, cake2);
        box.toString();
        System.out.println(box);
    }

}
Java:
package edu.hm.cs.swe2.food;

public class Cake extends Food {

    private Flavour flavour;

    public Cake(Flavour flavour, int weight) {
        super(weight);
        this.flavour = flavour;
    }

    public enum Flavour {
        CHOCLATE("Cake Choclate"), VANILLA("Cake Vanilla"), STRAWBERRY("Cake Strawberry");

        private final String name;

        private Flavour(String name) {
            this.name = name;
        }

        public String toString() {
            return this.name;
        }

    }
}
Java:
package edu.hm.cs.swe2.products;

import java.util.HashSet;
import java.util.Iterator;

import edu.hm.cs.swe2.exceptions.NothingToAddException;

public class Box<T> extends Product implements Placeable {

    public HashSet<T> content = new HashSet<T>();

    public Box(int serialID, int price, String productName) {
        super(serialID, price, productName);
        this.content = new HashSet<T>();

    }

    @Override
    public int getProductSerial() {
        return this.getSerialID();
    }

    public void addFood(T food) throws NothingToAddException {
        if (food == null) {
            throw new NothingToAddException();
        }
        content.add(food);
    }

    public int addFoods(T... foodsToAdd) {
        int foodsAdded = 0;
        if (foodsToAdd.length >= 3) {
            System.out.println("Too much Content. Nothing added.");
        } else {

            for (int i = 0; i < foodsToAdd.length; i++) {
                try {
                    this.addFood(foodsToAdd[i]);
                    foodsAdded++;
                } catch (NothingToAddException e) {
                }
            }
        }
        return foodsAdded;
    }

    public String toString() {
        if (this.content.isEmpty()) {
            return ("Contents in Box: Empty.");
        } else {
            Iterator<T> it = this.content.iterator();
            String contentOfBox = ("Contents in Box:  ");
            while (it.hasNext()) {
                contentOfBox += (" | " + it.next());
                System.out.println(it.next());
            }
            return contentOfBox;
        }

    }
}

konsole:
edu.hm.cs.swe2.food.Cake@2f92e0f4
edu.hm.cs.swe2.food.Cake@2f92e0f4
Contents in Box: | edu.hm.cs.swe2.food.Cake@372f7a8d
 
Zuletzt bearbeitet:
stg

stg

In deiner Klasse Cake hast du toString() nicht überschrieben (sondern nur im inneren Enum).
 
N

nikva

Wenn ich in der Methode addFoods >3 statt >=3 setze kriege ich plötzlich einige Fehlermeldungen bezüglich der Hashmap

Exception in thread "main" java.util.NoSuchElementException
at java.base/java.util.HashMap$HashIterator.nextNode(HashMap.java:1497)
at java.base/java.util.HashMap$KeyIterator.next(HashMap.java:1518)
at edu.hm.cs.swe2.products.Box.toString(Box.java:56)
at java.base/java.lang.String.valueOf(String.java:3352)
at java.base/java.io.PrintStream.println(PrintStream.java:977)
at edu.hm.cs.swe2.Main.main(Main.java:15)

dabei geht es da doch nur um eine simple Print Ausgabe?
 
MoxxiManagarm

MoxxiManagarm

Kleiner Hinweis von mir noch. "Selbst verständlich darf es sich bei den verpackten Dingen nur um Nahrungsmittel handeln." Diese Bedingung ist noch nicht erfüllt. Du könntest genauso eine Box<String> aktuell erstellen.
 
N

nikva

Kleiner Hinweis von mir noch. "Selbst verständlich darf es sich bei den verpackten Dingen nur um Nahrungsmittel handeln." Diese Bedingung ist noch nicht erfüllt. Du könntest genauso eine Box<String> aktuell erstellen.
Ok, es muss Box<Food> heißen!


Das Problem mit der Hashset hab ich jetzt gelöst in dem ich die line
Java:
                System.out.println(it.next());
aus der addFoods Methode gelöscht habe. Eigentlich wollte ich dabei nur die doppelte Ausgabe beheben aber jetzt tritt auch der Fehler nicht mehr auf. Liegt es vll daran, dass er durch den doppelten Aufruf von this.next 2 mal gesprungen ist und dann zwangsläufig ans ende kommt?
Müsste es nicht eigentlich auf das selbe Objekt verweisen wie die Zeile drüber?
Java:
                contentOfBox += (" | " + it.next());
 
N

nikva

also so:
Java:
public class Box<T extends Food> extends Product implements Placeable {
Box muss mindestens mit Food objekten belegt werden oder Objekten die von Food erben
 
Thema: 

enum Attribut von Objekten einer Hashmap ausgeben

Passende Stellenanzeigen aus deiner Region:
Anzeige

Neue Themen

Anzeige

Anzeige
Oben