ArrayList füllen und Werte summieren

Status
Nicht offen für weitere Antworten.

blue439

Mitglied
Aus einer Textdatei, in der div. Umsätze von (mehrfach vorkommenden) Vertretern gespeichert sind (z.B.: Meyer;1000.00) soll auf der Konsole die kumulierten Umsätze für jeden Vertreter ausgegeben werden.

Das Einlesen der Textdatei, das anschließende Zerlegen in einzelne Token und - bis zu einem gewissen Grad - auch das Einlesen in eine ArrayList habe ich erledigt, aber wie bilde ich die geforderten kumulierten Umsätze? Die Klasse Vertreter habe ich hier weggelassen.

Mein Lösungsansatz:
Code:
import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.util.*;

public class Vertretersummen {
	
	public static void main(String[] args) {
		
	List<Object> liste = new ArrayList<Object>();
	
		try {
			File meineDatei = new File("vertreter.txt");
			FileReader fileReader = new FileReader(meineDatei);
			
			BufferedReader reader = new BufferedReader(fileReader);
			
			String zeile = null;
			
			while( ( zeile = reader.readLine() ) != null) {
				
				String textteil = zeile;
				String[] ergebnis = textteil.split(";");
				
				//nur zu Testzwecken
				for( String token : ergebnis) {
					liste.add(token);
					System.out.println(token);
				}
			
			}
			
			// Testausgabe
			System.out.println("Token #0: " + liste.get(0)); // Meyer
			System.out.println("Token #1: " + liste.get(1)); // 1000.00
			boolean antw = liste.contains( "Meyer" );
		    System.out.println( antw );   // true
			
			reader.close();
		} catch(Exception ex) {
			ex.printStackTrace();
		}
	}
}
 
jedes zweite Element der Liste ist ein String, der nur Zahlen enthält,

versuche als erstes eine Schleife, die nur diese zweiten Elemente mit System.out.println ausgibt,
(mit dem Index tricksen oder leichter: von Anfang an getrennte Listen führen)

wenn du diese Selektion geschafft hast, dann kannst du die Doubles mit Double.parse.double parsen
und addieren sollte klar sein
 
Benutze statt der ArrayList eine HashMap:
Code:
Map<String,Number> liste = new HashMap<String,Number>();

Die Daten werden innerhalb der HashMap als Schlüssel=Wert abgelegt, im konkreten Fall also Vertreter=Umsatzsumme. Das könnte dann innerhalb Deiner while-Schleife so ähnlich aussehen (ungetestet :wink: ):
Code:
if (ergebnis.length == 2) {
	try {
		double summe = Double.parseDouble(ergebnis[1]);
		if (liste.containsKey(ergebnis[0])) {
			summe += liste.get(ergebnis[0]).doubleValue();					
		}
		liste.put(ergebnis[0], summe);
	}
	catch (NumberFormatException e) {
		// Fehler: ergebnis[1] lässt sich nicht in double konvertieren
	}
}
else {
	// Zeile enthält != 2 Tokens
}
 
Status
Nicht offen für weitere Antworten.

Zurück
Oben