[Java] Objekte mit Foreach ausgeben

11/18/2014 20:57 _Headsh0t_#1
Hallo zusammen,

Ich habe im Studium gerade mit Java angefangen und bräuchte mal ebend Hilfe.
Ich habe eine Klasse Rohstoffe, eine Klasse Items und eine Klasse Main.

In der Main-Klasse will ich über eine showShop()-Methode alle Rohstoffe in einer foreach-Schleife ausgeben lassen.

Der Rohstoffe Konstruktor sieht wie folgt aus
Code:
Rohstoffe(int id, String name, int strength, int cost, int price)
in der Items-Klasse erzeuge ich die Rohstoffe-objekte wie folgt:
Code:
Rohstoffe stein = new Rohstoffe(0, "Stein", 0, 10, 5);
Rohstoffe eisen = new Rohstoffe(1, "Eisen", 1, 20, 8);
wie kann ich nun in der Main auf die Rohstoffe in Items zugreifen und in einer Schleife ausgeben?
11/18/2014 21:38 warfley#2
Du brauchst einen Array der Rohstoffe

PHP Code:
Rohstoffe[] rohstoffe = new Rohstoffe[2]; //2 ist die Anzahl der elemente
rohstoffe[0] = new Rohstoffe(0"Stein"0105);
rohstoffe[1] = new Rohstoffe(1"Eisen"1208);

for (
Rohstoffe r rohstoffe) {
  
System.out.println(r.name r.strength r.cost r.price); 

11/18/2014 22:00 _Headsh0t_#3
so hat der Rohstoff aber keinen namen mehr.
Also müsste ich in anderen Klassen über den Arrayindex auf diesen Rohstoff zugreifen. Das ist ziemlich umständlich, wenn ich mal woanders stein.getId() o.Ä. aufrufen will.
11/18/2014 22:10 xXKonaXx#4
Ein Dictionary per
Code:
Map<String, Rohstoffe> dict = new HashMap<String, Rohstoffe>();
erstellen und dann über
Code:
dict.get("key");
dein Object ansprechen, wäre vielleicht eine Lösung.
11/18/2014 22:57 warfley#5
Du nimmst den Array von oben und

PHP Code:
public Rohstoffe Stein;
...
Stein=rohsoffe[0]; 
so hast du einen Verweis auf den Array

oder du Machst einfach

PHP Code:
public Rohstoffe getRohstoffByName(string name) {
for (
Rohstoffe r rohstoffe) {
  if (
r.name == name) {
  return 
r;
}
}  

und nutzt das dann mit
PHP Code:
Items.getRohstoffByName("Stein").getId 
11/18/2014 23:28 Mikesch01#6
Die Variante von xXKonaXx wäre die Beste, da man nicht mehr über die Objekte iterieren müsste, sondern direkt per Key Zugriff hätte.
11/20/2014 19:21 Menan#7
Du musst dir Getter Methoden schreiben. In deiner Rohstoff Klasse..

Code:
for (Rohstoffe r : rohstoffe) {
  System.out.println(r.getName() + r.getStrength() + r.getCost() + r.getPrice()); 
}
In der Items-Klasse solltest du eine Arrayliste führen, mit deinen ganzen Rohstoffen als Objekt darin.
Code:
ArrayList<rohstoffe> itemlist = new ArrayList<rohstoffe>()
11/21/2014 00:22 Yo123#8
gib doch bitte mal die konkrete aufgabe an. meistens ist man ja mit dem was man machen darf am anfang des studiums sehr eingeschränkt.
arrays sind in unserer java-vorlesung zum beispiel ein tabu thema. sämtliche libraries auch
11/21/2014 00:46 snow#9
^this.

Aufgaben im Studium beschäftigen sich selten damit, die Lösung mithilfe der Standardbibliotheken zu finden, sondern mit dem Finden eines Algorithmus, mit dem ein Problem gelöst werden kann. Natürlich könnte man in der Algorithmen-Vorlesung einfach std::sort verwenden, das hilft einem aber nicht beim tieferen Verständnis der Theorie, und darum geht es beim Studium.