# werte in array speichern



## dofa (8. Dez 2010)

hallo leute, ich hab ein kleines problem:

ich hab eine klasse geschrieben in der man aktionen wie bei einer bank durchführen kann (abheben, gutschreiben, kontostand abfragen usw).


```
public class KontoPlus{	

	        // ich muss irgendwie die eingegeben werte bei "gutschreiben" und "abbuchen" speichern, damit ich sie am ende bei
                //"kontoauszug" wieder auflisten kann. die werte würd ich gern in dem array "veraenderung" speichern. wie mach ich 
                //das?

		private double kontostandNeu = 0;
		private double kontostandAlt = 0;
		private double kontostand = 0;
		private double[] veraenderung = new double[10];
		private double wert = 0;
			
		public void gutschreiben(double betrag){
			if (betrag >= 0.0){
				kontostandNeu = kontostand + betrag;
				kontostand = kontostandNeu;				
			}
			else
				System.out.println("gutschreiben unzulaessig");				
		}
		
		public void abbuchen(double betrag){	
			if (betrag >= 0.0 && betrag <= kontostand){
				kontostandNeu = kontostand + (-betrag);
				kontostand = kontostandNeu;				
			}				
			else
				System.out.println("abbuchen unzulaessig");				
		}
		
		public double abfragen(){
			return kontostand;
		}

		public void kontoauszug(){
			System.out.println("Alter Kontostand: " + kontostandAlt);			
			System.out.print("Veraenderung:");
			for (int i = 0; i <10; i++){
				veraenderung[i] = wert;
			System.out.print(" " + veraenderung[i]);
			}
			System.out.println();
			System.out.println("Neuer Kontostand: " + kontostandNeu);
			kontostandAlt = kontostandNeu;
		}		
	}
```


----------



## diel2001 (8. Dez 2010)

Erstelle doch 2 globale Listen und speichere dort die Werte ab, wenn du eine Aktion ausführst


----------



## dofa (8. Dez 2010)

ähh, kein plan wie das geht


----------



## nrg (8. Dez 2010)

```
import java.util.*;

public class KontoPlus{ 

		private List<String> history = new ArrayList<String>();
		// ...
		
        public void abbuchen(double betrag){
            if (betrag >= 0.0 && betrag <= kontostand){
            	history.add("Lastschrift: -" + betrag);
            	// ...
```

sowas vllt?


----------



## dofa (8. Dez 2010)

sieht irgendwi ein bisschen kompliziert aus. geht das nicht einfacher - mit nem array?


----------



## dofa (8. Dez 2010)

sorry, ist natürlich ein array, hab sowas aber noch nie gesehen.


----------



## nrg (8. Dez 2010)

Das ist eine Collections. Hier explizit eine ArrayList. Das ist im Grunde intern nichts anderes als ein Array. Extern hat es einen ganz entscheidenden Unterschied: eine ArrayList ist dynamisch.

Google mal Java Collections. Da wirst du einiges finden und auch merken, dass es garnicht so kompliziert ist .

z.B.: http://www.inabrenner.de/pdf/SCJP.pdf Kapitel 12


----------



## dofa (8. Dez 2010)

wenn ich das jetzt so mache wie du geschrieben hast, kann ich die arrayliste dann ganz normal mit ner for-schleife ausgeben?


----------



## ARadauer (8. Dez 2010)

Was ist für dich ganz normal?

history.lenght bzw history[0] geht nicht

Die Liste hat Methoden wie size() und get();

also for(int i =  0; i < history.size(); i++){
history.get(i);
usw..


----------



## dofa (8. Dez 2010)

so hats jetzt auf jeden fall funktioniert.

jetzt müsste ich nur noch die arraylist nach dem "kontoauszug" wieder zurücksetzen, damit nicht beim nächsten auszug die alten inhalte angezeigt werden.


----------



## nrg (8. Dez 2010)

neu instanziieren:


```
history = new ArrayList<String>();
```

oder besser:

ArrayList (Java Platform SE 6)


freunde dich frühzeitig mit der Java API an.
Java Platform SE 6


----------



## dofa (8. Dez 2010)

eine kleinigkeit noch:

beim compilieren kommt eine bemerkung: "KontoPlus.java uses unchecked or unsafe operations. 
recompile with -Xlint: unchecked for details."

wenn ich dann mit -Xlint compilieren, kommt eine warnung: "unchecked call to add(E) as a member
of the raw type java.util.ArrayList
                                              history.add(betrag);

keine ahnung was das soll, trotzdem kann ich das programm ohne probleme ausführen.


----------



## nrg (9. Dez 2010)

das hier?

Eliminate "[unchecked] unchecked call ..." compiler warning - Real's Java How-to

Hast du die Liste nicht generisch instanziiert, wie ich es dir oben geschrieben habe?


----------



## dofa (9. Dez 2010)

genau die fehlermeldung.

ich hab das so gemacht:

```
// initialisierung
private ArrayList history = new ArrayList();

// dann bei z.b. "abbuchen"
if (betrag >= 0.0 && betrag <= kontostand){
				kontostandNeu = kontostand + (-betrag);
				kontostand = kontostandNeu;
                                history.add(betrag); //eingegebenen betrag hinzufügen

// schleife um die liste auszugeben
for (int i = 0; i < history.size(); i++){
				System.out.print(" " + history.get(i));
```


----------



## nrg (9. Dez 2010)

und wie habe ich es oben gemacht???


----------



## dofa (9. Dez 2010)

hab ich nicht ganz verstanden. muss ich da statt <String> nen eigenen namen eingeben?


----------



## nrg (9. Dez 2010)

Du willst doch Strings in deiner Liste speichern oder nicht? Das ist einfach eine generische Instanziierung einer Liste. Genauso wie du ein Array mit String typisierst machst du das bei Listen auch. Nur eben eine bisschen andere Syntax.

Google mal: Generics Java


----------



## dofa (9. Dez 2010)

jetzt zeigt der mir aber einen fehler bei 'history.add(betrag)' an.

cannot find symbol
symbol: method add (double)

obwohl der code jetzt exakt deinem beispiel entspricht.


----------



## Andi_CH (9. Dez 2010)

dofa hat gesagt.:


> jetzt zeigt der mir aber einen fehler bei 'history.add(betrag)' an.
> 
> cannot find symbol
> symbol: method add (double)
> ...



Ist ja wohl klar wenn du einen double in einer Liste speichern willst, die du explizit für String eingerichtet hast ;-)
ArrayList<String> ist halt nicht dasselbe wie ArrayList<Integer>


----------



## dofa (9. Dez 2010)

argh, natürlich!


----------



## Andi_CH (9. Dez 2010)

dofa hat gesagt.:


> argh, natürlich!



Ich musste mich bös beherrschen um keine Buchstabenspielerei mit deinem Nick anzustellen


----------



## dofa (9. Dez 2010)

es kommt jetzt aber immer noch die warnung bzgl. des unchecked call to add(E)...


----------



## nrg (9. Dez 2010)

zeig mal deinen ganzen Code. so kommen wir nicht weiter....


----------



## dofa (9. Dez 2010)

```
import java.util.*;
	public class KontoPlus{
	
	
		private double kontostandNeu = 0;
		private double kontostandAlt = 0;
		private double kontostand = 0;
		private double betrag;
		private List<String> history = new ArrayList<String>();
					
		public void gutschreiben(double betrag){
			if (betrag >= 0.0){
				kontostandNeu = kontostand + betrag;
				kontostand = kontostandNeu;
				history.add("" + betrag);
			}
			else
				System.out.println("gutschreiben unzulaessig");				
		}		
		public void abbuchen(double betrag){	
			if (betrag >= 0.0 && betrag <= kontostand){
				kontostandNeu = kontostand + (-betrag);
				kontostand = kontostandNeu;
				history.add("" + betrag);
			}				
			else
				System.out.println("abbuchen unzulaessig");
                }
		
		public double abfragen(){
			return kontostand;
		}
		public void kontoauszug(){
			System.out.println("Alter Kontostand: " + kontostandAlt);			
			System.out.print("Veraenderung:");
			for (int i = 0; i < history.size(); i++){
				System.out.print(" " + history.get(i));
			}
			System.out.println();
			System.out.println("Neuer Kontostand: " + kontostandNeu);
			kontostandAlt = kontostandNeu;
			history = new ArrayList();			
		}		
	}
```


----------



## ARadauer (9. Dez 2010)

dofa hat gesagt.:


> es kommt jetzt aber immer noch die warnung bzgl. des unchecked call to add(E)...



wo? ich seh das nicht..
ich seh nur ein "the field KontoPlus.betrag is never read locally"
weil du das auch nicht machst...


----------



## Andi_CH (9. Dez 2010)

Letzte Codezeile:


```
history = new ArrayList<String>();
```

Dann sollte es klappen


----------



## dofa (9. Dez 2010)

na endlich funktionierts!

lag tatsächlich nur an dem vergessenen "<String>".

vielen dank an alle


----------

