JAVA Arraylist Berechnen mit int und double und Abspeichern von Zwischenwerten?

GuteAntwort2021  06.12.2022, 20:07

Und was genau ist jetzt deine Frage?

newinformatik 
Fragesteller
 10.12.2022, 19:32

Ich habe unten in den Antworten mal den gesamten Code der beiden anderen Classes hinzugefügt. Glaube da ist irgendwo ein "get" fehlend.. can't figure out where...

2 Antworten

double punkte = 0.0;  // sollte natürlich noch initialisiert werden.
for (Produkt p : produkte){
    // hier musst du natürlich auf die Variablen des jeweiligen Produkts zugreifen
    // dehalb immer das "p." davor. In der for-Schleife wird automatisch immer
    // das aktuelle Produkt in die Variable p gepackt
    // Außerdem musst du natürlich auch noch die Punkte addieren
    punkte += (p.preis * p.menge * p.faktor); 
    
    // produkte.save(punkte); // Was willst du damit bewirken?
}
// Das return muss außerhalb der for-Schleife sein, sonst
// übergibst du ja immer nur die Punkte vom ersten Produkt
return punkte; 

Alternativ natürlich wie immer noch die Stream-Variante:

public double getPunkte() {
    return produkte.stream()
                   .mapToDouble(p -> p.preis * p.menge * p.faktor)
                   .sum();
}
newinformatik 
Fragesteller
 10.12.2022, 18:10

Hallo besten Dank für deine Hilfe. Nun habe ich aber ein Problem, die Produktclass sieht folgendermassen aus und darf nicht verändert werden: 

public class Produkt {
	private double preis;
	private int faktor;
	private int menge;
	private String name;
	
	public Produkt(double preis, int faktor, int menge, String name) {
		this.preis = preis;
		this.faktor = faktor;
		this.menge = menge;
		this.name = name;
	}
	
	public double getPreis() {
		return preis;
	}

	public int getFaktor() {
		return faktor;
	}

	public int getMenge() {
		return menge;
	}

	public String getName() {
		return name;
	}
}

& die Mainclass sieht folgendermassen aus:
public class Main {

	public static void main(String[] args) {
		// Testdaten
		Einkauf e1 = new Einkauf();
		Einkauf e2 = new Einkauf();
		Einkauf e3 = new Einkauf();
		e1.addEinkauf(4.2, 1, 2, "Pizzakäse");
		e1.addEinkauf(5.7, 20, 2,"Alanatura Müesli");
		e2.addEinkauf(1.75, 1, 5,"Milch");
		e2.addEinkauf(1.7, 1, 2, "Gurke");
		e2.addEinkauf(5.5, 1, 2, "Schokohase Freddy");
		e3.addEinkauf(2.2, 5, 3, "Spaghetti");
		e3.addEinkauf(3.4, 1, 2, "Sugo Basilikum");
		e3.addEinkauf(9.6, 5, 1, "Olivenöl Bio");
		e3.addEinkauf(7.8, 5, 1, "Schokoeili assortiert");
		
		System.out.println("Einkauf 1: "+e1.getPunkte());
		System.out.println("Einkauf 2: "+e2.getPunkte());
		System.out.println("Einkauf 3: "+e3.getPunkte());
	}
}

0
newinformatik 
Fragesteller
 10.12.2022, 19:32

da ist lediglich ein Fehler in der Zeile "punkte+=(p.preis * p.menge * p.faktor); "

0
daCypher  12.12.2022, 10:37
@newinformatik

Ok. Du hast von deiner Main-Klasse keinen direkten Zugriff auf die Variablen preis, menge und faktor. In der Produkt-Klasse sind dafür aber Getter implementiert, die du dafür nehmen kannst:

punkte += (p.getPreis() * p.getMenge() * p.getFaktor());
0
import java.util.ArrayList;

public class HelloWorld {
    public static void main(String[] args) {
        Einkauf einkauf = new Einkauf();
        // Preis: 3.20, Faktor: 10, Menge: 1
        einkauf.addEinkauf(3.20, 10, 1, "Einkauf");
        // Ergebnis: 32.0
        System.out.println(einkauf.getPunkte());
    }
}

public class Produkt {
    // Statt „protected“-Felder kann man auch
    // sog. Getter-Methoden verwenden, um auf
    // die Werte zuzugreifen.
    protected double preis = 0;
    protected int faktor = 0, menge = 0;
    protected String name;

    public Produkt(
        double preis,
        int faktor,
        int menge,
        String name
    ) {
        this.preis = preis;
        this.faktor = faktor;
        this.menge = menge;
        this.name = name;
    }
}

class Einkauf {
    private ArrayList<Produkt> produkte = new ArrayList<Produkt>();

    public void addEinkauf(
        double preis,
        int faktor,
        int menge,
        String name
    ) {
        produkte.add(new Produkt(preis, faktor, menge, name));
    }

    public double getPunkte() {
        double punkte = 0;
        // Punkte für jedes einzelne Produkt ermitteln
        for (Produkt p : produkte) {
            punkte += (p.preis * p.menge * p.faktor);
        }
        // Gesamtzahl der Punkte zurückgeben
        return punkte;
    }
}
Woher ich das weiß:eigene Erfahrung
newinformatik 
Fragesteller
 10.12.2022, 18:09

Hallo besten Dank für deine Hilfe. Nun habe ich aber ein Problem, die Produktclass sieht folgendermassen aus und darf nicht verändert werden:

public class Produkt {
	private double preis;
	private int faktor;
	private int menge;
	private String name;
	
	public Produkt(double preis, int faktor, int menge, String name) {
		this.preis = preis;
		this.faktor = faktor;
		this.menge = menge;
		this.name = name;
	}
	
	public double getPreis() {
		return preis;
	}

	public int getFaktor() {
		return faktor;
	}

	public int getMenge() {
		return menge;
	}

	public String getName() {
		return name;
	}
}

& die Mainclass sieht folgendermassen aus:
public class Main {

	public static void main(String[] args) {
		// Testdaten
		Einkauf e1 = new Einkauf();
		Einkauf e2 = new Einkauf();
		Einkauf e3 = new Einkauf();
		e1.addEinkauf(4.2, 1, 2, "Pizzakäse");
		e1.addEinkauf(5.7, 20, 2,"Alanatura Müesli");
		e2.addEinkauf(1.75, 1, 5,"Milch");
		e2.addEinkauf(1.7, 1, 2, "Gurke");
		e2.addEinkauf(5.5, 1, 2, "Schokohase Freddy");
		e3.addEinkauf(2.2, 5, 3, "Spaghetti");
		e3.addEinkauf(3.4, 1, 2, "Sugo Basilikum");
		e3.addEinkauf(9.6, 5, 1, "Olivenöl Bio");
		e3.addEinkauf(7.8, 5, 1, "Schokoeili assortiert");
		
		System.out.println("Einkauf 1: "+e1.getPunkte());
		System.out.println("Einkauf 2: "+e2.getPunkte());
		System.out.println("Einkauf 3: "+e3.getPunkte());
	}
}

0