Gleiche Arrays aus einem Array mit Objekten

Yurek

Mitglied
Hi,

ich mal wieder mit einer Aufgabe wo ich einfach nicht weiter komme. Ich soll bei dieser Aufgabe einen Einkauf simulieren mit Ein und Ausgaben usw. Wir dürfen keine ArrayList, standart Suchalgorithmen oder so was wie eine HashMap benutzen. Bisher ist alles richtig aber in der letzten Aufgabe sollen wir ein Rabattsystem einbauen. Wenn 6 mal der gleiche Artikel im Einkaufswagen ist, bekommt der Kunde eins kostenlos.

Wichtig dabei ist, dass der Kunde zum Beispiel erst 3 Kaffee kaufen kann dann 3 Milch und dann wieder 3 Kaffee. Natürlich möchte er dann den Rabatt für die 6 Kaffee haben. Das heißt ich muss durch meine Liste nach jedem einkauf laufen und überprüfen ob ein Artikel 6 mal vorhanden ist und so den Preis senken. Natürlich kann ein Kaffee auch 12 mal bestellt worden sein dann gibts 2 Gratis, deswegen das Modulo 6 im Code.

Das ganze habe ich immer als Objekt in einer anderen Methode an das Array übergeben.
Es hängt aber irgendwo habe ich einen Denkfehler wieder einmal.


Java:
Purchase[] cartList = new Purchase[100];
int nächsterIndex = 0;

public void Price()
{
		
		int zähler = 1;
		double price = 0;
		
		for(int i = 0; i < cartList.length; ++i)
		{
			
			if(cartList[i] != null)
			{
				
				if(cartList[i] == cartList[i + 1]) zähler++;
			
				price += cartList[i].Price();
				
			}
			
	
		}
		
		if(zähler%6 == 0)
		{
			
			double singelPrice = price / 6;
			
			price -= singelPrice;
			
		}
		
		System.out.println("Kostet " + price);
	
}

Also der Rabatt wenn ich 6 Stück gleich einkaufe funktioniert dann ist eins kostenlos. Bei 12 zwei usw geht auch. Aber bei 11 sollte ja wenigstens 1 kostenlos sein und das funktioniert nicht. Ja wegen dem zähler, da dieser dann auf 11 ist und so nicht in das if springt weiß aber keine alternative.

Außerdem funktioniert auch nicht die spätere Eingabe also erst 3 mal Milch dann 1 mal Kaffee dann 3 mal wieder Milch. Außerdem sollte er mir den price für die Aktuelle Bestellung anzeigen und nicht insgesamt, aber so dass er immer das eine Produkt insgesammt betrifft damit man den Rabatt sehen kann. Das ganze ist noch nicht ganz fertig und ich muss noch paar verbesserungen vornehmen aber hab den restlichen Code mal im Anhang.

Oh Gott ich weiß nimmer weiter und.....

Bitte um Hilfe!
 

Anhänge

mit dem modulo prüfst du ja ob es GENAU 6 bzw 12 sind.
Du musst einfach nur dividieren und kannst dir sogar die if's sparen
Java:
int gratis = zähler / 6;
wenn zähler nun kleiner als 6 ist, kommt 0 raus, wenn er größer gleich 6 und kleiner 12 ist kommt 1 raus, etc.

Musst du das einkaufen so realisieren?
Ich würde es eher so machen, dass ich ein int Array hab, welches mit sagt wieviel ich von welchem produkt gekauft habe.
Also in Array Position 0 steht drin wieviel Kaffee in in Position 1 wieviel Milch, etc.
 
Danke für die Antwort werd ich gleich mal probieren mit dem durch 6. Ja das klingt sehr einfach und simpel und bei solchen kleinigkeiten tu ich mir immer schwer.

Zum anderen hast du da bitte eine konkrette Idee? Das was du sagst ist sogar noch besser leider kann ich mir aber gerade nichts direktes vorstellen. Vll mit Mehrdimensionalen Array wo die erste Dimension der Produktname ist und die zweite die Anzahl? Oder jeder Indexposition ein festes Produkt zuweisen und dann immer nach er Anzahl rauf zählen?
 
Zuletzt bearbeitet:
Im Grunde letzteres.
Für sowas sind eigentlich Maps super geeignet, aber die dürft ihr ja leider nicht nutzen^^
Angenommen du hast 3 Produkte, Kaffee, Milch, Sahne.
Dann erzeugst du dir ein int array mit 3 Einträgen.
Index Position 0 ist fest dem Kaffee zugeordnet, 1 der Milch und 2 der Sahne.

Immer wenn dann ein Produkt gekauft wird, zählst du den entsprechenden Eintrag im Array eins hoch.
 
Ok danke dir. Ich werd dann auch mal eine Methode schreiben so wie du es gesagt hast. Vorher möchte ich aber nur zum Verstädniss mal das vorherige Porblem lösen und leider funktioniert es immer noch nicht ganz

Der Fehler liegt an der Price Rechnung ich verstehe aber nicht genau was. Bei Menge 5 oder weniger ist alles in Ordnung dann gibt er 5 EUR aus. Bei 6 oder mehr bringt er alles durcheinander 🙁

Java:
public void Price()
{
		
	int zähler = 1;
	double price = 0;
		
	for(int i = 0; i < cartList.length; ++i)
	{
			
		if(cartList[i] != null)
		{
				
			if(cartList[i] == cartList[i + 1]) zähler++;
				
			int gratis = zähler/6;
				
			price += cartList[i].Price() - (cartList[i].Price() * gratis);
				
		}
		
	}
		
	System.out.println("Kostet " + price);
	
}
 
Zuletzt bearbeitet:
du machst die preiskorrektur der gratisprodukte innerhalb der schleife, dass heißt, das beim 6,7,8,9.. produkt immer wieder ein produkt mehr als gratis betrachtet wird.
Du musst die gratisprodukte erst nach der schleife berechnen.
 

Zurück
Oben