# ArrayList, HashMap



## abcd (17. Jun 2011)

hi,

ich habe bei der aufgabe 2 und 3 große probleme wo es um arraylist und hashmap geht. es wäre schön wenn mir da jemand helfen könnte und vielleicht mal schauen kann ob die aufgaben 1 und 4 richtig sind.






Aufgabe 1	Artikelverwaltung							
Das Interface Zaehlbar besteht aus der Methode int getAnzahl().

Die Klasse Getraenk hat die Attribute  name (String), artikelnummer (long) und anzahl (int), außerdem einen allgemeinen Konstruktor. 
(anzahl enthält die Anzahl der vorhandenen Einheiten eines Getränks)
Die Klasse Getraenk implementiert  zusätzlich das Interface Zaehlbar.

Die Klasse Kuehlware hat die Attribute  name (String), kuehltemperatur (int),  und anzahl (int), außerdem einen allgemeinen Konstruktor.  Die Klasse Kuehlware implementiert  zusätzlich das Interface Zaehlbar.
Getraenk und Kuehlware sind in keinerlei Oberklassen/Unterklassen-Beziehung.

Konkrete Aufgabe:
Setzen Sie die Klassen Getraenk und Kuehlware als gegeben voraus (nicht implementieren).
a)	Schreiben Sie das Interface Zaehlbar.
b)	Schreiben Sie eine Testklasse mit einer main(): legen Sie einen Array an, der 6 Objekte der Klassen Getraenk oder Kuehlware aufnehmen kann, und füllen Sie den Array mit solchen Objekten. 
c)	Berechnen Sie die Anzahl der insgesamt vorhandenen Artikel (Getraenke und Kuehlwaren), die in den Objekten im angelegten Array enthalten sind, und geben sie die Summe auf die Standardausgabe aus (berücksichtigen Sie dabei auch den Sonderfall, dass ein Eintrag im Array null sein kann). 


Lösung Aufgabe 1

a)

```
public interface Zaeehlbar {

	public int getAnzahl();

} // endinterface



b)

public class Testklasse {

	public static void main (String [] args) {


		Object [] o_ref = new Object [6];

		o_ref[0] = new Getraenk();
		o_ref[1] = new Getraenk();
		o_ref[2] = new Kuehlware();
		o_ref[3] = new Kuehlware();
		o_ref[4] = new Getraenk();
		o_ref[5] = new Kuehlware();


c)

		int anzahl = 0;

		for (int i = 0; i < o_ref.length; i++) {
			if (o_ref[i] != null) 
			anzahl = anzahl + o_ref[i].getAnzahl(); 
		} // endfor


		System.our.println("Anzahl der Objekte: " + anzahl);


	} // endmethod main

} // endclass
```

---------------------------------------------------------------------------------------------------------------


Aufgabe 2	
1.	Schreiben Sie eine Klasse Smartphone (u.a. name (String), preis (double), seriennummer (long)) mit Konstruktoren, und einer toString()-Methode. 
2.	Jedem neuen Objekt der Klasse Smartphone soll durch den Konstruktor eine eindeutige Seriennummer vergeben werden.
3.	Alle Objekte der Klasse Smartphone sollen in einer ArrayList verwaltet werden, die Methode getAllSmartphones() liefert einen Array aller Smartphone -Objekte zurück, sortiert nach Seriennummer.
4.	Schreiben Sie eine Klasse Test_Smartphone mit einer main(). Legen Sie der Reihe nach 5 Smartphones an.
Geben Sie in der main() alle Smartphones aus, sortiert nach Seriennummer.



Lösung Aufgabe 2

1.

```
public class Smartphone {

	private String name;
	private double preis;
	private long seriennummer = 0;
	


	public Smartphone() {

		this(" ", 0.0);

	} // endconstructor


	public Smartphone(String name, double preis) {

		this.name = name;

		if (preis > 0.0)
			this.preis = preis;
		else
			this.preis = 0.0;

2.		seriennummer = seriennummer + 1;

	} // endconstructor


	
	public String toString() {

		return name + "; " + preis + "; " + seriennummer;

	} // endmethod toString



3.
		

	ArrayList<Smartphone> liste_ref = new ArrayList<Smartphone>(0,1);


	public Smartphone[] getAllSmartphones() {
```
 


----------------------------------------------------------------------------------------------------------------




Aufgabe 3	
Implementieren Sie eine Klasse Notenverzeichnis mit den Attributen nameStudent_ref (String) und einer geeigneten Struktur (z.B. HashMap table_ref) um eine Tabelle mit Namen von Fächern (String) und zugehörige Noten (float) zu verwalten.

Realisieren Sie die Instanz-Methoden 
void add(String fach_ref, float note)  // einen Noteneintrag hinzufügen
float getNote (String fach_ref)	// die Note eines Faches zurückgeben
float getNotendurchschnitt()		// den Notendurchschnitt aller eingetra¬
// genen Noten zurückliefern



Lösung Aufgabe 3

```
public class Notenverzeichnis {

	String nameStudent_ref;
	HashMap table_ref = new HashMap(String, float);
	

	public void add(String fach_ref, float note) {

	table_ref.add(fach_ref, note);

	} // endmethod


	
	public float getNote (String fach_ref) {

	return table_ref.get(fach_ref);

	} // endmethod



} // endclass
```

------------------------------------------------------------------------------------------------------------



Aufgabe 4 – Streams 
Schreiben Sie ein Programm, das von der Konsole (Standardeingabe) int-Werte einliest. Werte, die ohne Rest durch 5 teilbar sind, werden in eine Datei „werte.int“ im Format int geschrieben. Endekriterium ist die Eingabe von „fertig“.
Sie können davon ausgehen, dass auf der Konsole in einer Zeile jeweils nur ein korrekter int-Wert oder „fertig“ eingegeben wird. 
(Fehlerbehandlung / Exception Handling ist nicht erforderlich, Exceptions können ignoriert werden).



Lösung Aufgabe 4

```
class Stream {

	String eingabe;
	int wert;
	FileOutputStream fos_ref = null;
	DataOutputStream dos_ref = null;
		

	while (eingabe != "fertig") {

	System.out.print("Wert eingeben: ");
	eingabe = TerminalInput.readString();

	if (wert == "fertig")
		System.exit(-1);
	else
		wert = parseInt(eingabe);


	if (wert % 5 = 0) {

		fos_ref = new FileOutputStream("werte.int");
		dos_ref = new DataOutputStream(fos_ref);

		dos_ref.writeInteger(wert);

		dos_ref.close();
		fos_ref.close();

	} // endif

	} // endwhile

} // endclass
```


-----------------------------------------------------------------------------------------------------------

ich hoffe mir kann jemand helfen vorallem bei den aufgaben 2 und 3 weil da blick ich nicht viel.


----------



## chalkbag (17. Jun 2011)

Aufgabe 1:

a, ok
b, da Getraenk und Kuehlware von Zahelbar ableiten, musst du nicht ein Object[] Array erstellen, sondern eher ein Zaehlbar[]
c, funktioniert nicht, da Object die Methode getAnzahl nicht kennt (siehe b)


Aufgabe 4:
-String vergleicht man mit equals und nicht mit eingabe != "fertig)
-System.exit verwendet man nicht, nutze break
-Ob in die Datei geschrieben wird, kannst du ja am besten selber feststellen. An sich würde
es reichen die Datei vor der While schleife zu öffnen, und nach der Schleife die Datei zu schließen.
->nicht jedes mal auf /zu, auf / zu


----------



## chalkbag (17. Jun 2011)

Aufgabe 2

-Seriennummer muss static sein, so haben alle Geräte die sn = 0
-der Konstruktor Smartphone() ist nicht zulässig
2.3. Keine Ahnung in welcher Klasse die Methode gespeichert werden soll, da fehlt für mich info..
zur Aufgabe schau mal nach Collections.sort(), das sollte dir helfen bzw. new Comparator

Aufgabe 3
- nameStuden_ref sollte gesetzt werden, am besten über den Konstruktor
- eine Hashmap initialisiert man anders:  HashMap<Key,Value> myMap = new HashMap<Key,Value>();
- getNotendurchschnitt fehlt noch. einfach über den keyset mit einer foreach iterieren und die Werte aufsummieren anschließend die Summe durch die anzahl der Einträge teilen und du hast einen Durchschnitt...


----------

