Arraylist löscht nicht!

Xerxes20

Aktives Mitglied
Guten Abend nochmal,

ich habe ein Lager mit Objekten (Handys) und möchte neue Artikel einfügen, jetzt hat jedes Objekt seine eigene Artikelnummer, das heißt ein Nokia N97 hat die Artikelnummer 145693.

Wenn jetzt ein neues Handy eingegeben wird und dieses auch ein Nokia N97 ist, dann wird nur der bestand erhöht. In diesem Fall habe ich mich nur auf den vergleich der Artikelnummer beschränkt um zu testen ob es funktioniert.

Wenn ein Artikel mit anderem Namen (in dem Fall Artikelnummer) eingegeben wird, soll diese eingefügt werden.

Jetzt habe ich das Problem dass zwar bei Eingabe der selben Artikelnummer, der bestand erhöht wir (im Bild von 20 auf 25) aber das Objekt wird nochmal hinten eingefügt.

Irgendwie klappt die If Schleife am Ende nicht.

Hier ein Teil des Codes:

Java:
public class HandyVerwaltung extends Lagerverwaltung {

int artikelnummer;
	public void hinzufuegen(){
		int SN;
		String marke;
		String modell; 
		String os;
		String farbe;
		int kamera;
		int speicher;
		int anzahl;
		double preis;
		
		System.out.println("Artikelnummer: ");
		SN=In.readInt();
		System.out.println("Marke:");
		marke=In.readWord();
		System.out.println("Modell:");
		modell=In.readWord();
		System.out.println("Betriebsssystem:");
		os=In.readWord();
		System.out.println("Farbe:");
		farbe=In.readWord();
		System.out.println("Kamera:");
		kamera=In.readInt();
		System.out.println("Speicher:");
		speicher=In.readInt();
		System.out.println("Preis:");
		preis=In.readDouble();
		System.out.println("Wieviele? ");
		anzahl = In.readInt();
		
		Handy A=new Handy (SN,marke,modell,os,farbe,kamera,speicher,anzahl,preis);
		
//		for(Handy handy : handys){
//	    if(SN != handy.getArtikelNummer()& !marke.equals(handy.getMarke())&!modell.equals(handy.getArt())&!os.equals(handy.getOs())&!farbe.equals(handy.getFarbe())&kamera!=handy.getKamera()&speicher!=handy.getSpeicher()&preis!=handy.getPreis()){
//	        	 
//	         } 
//	    }
		
		
		
		
		for (Handy handy:handys){

			if(SN==handy.getartikelnummer()){
				handy.erhoeheBestand(anzahl);
                
			}
			handys.remove(A);
			break;
		}
		while(SN!=handys.indexOf(handys)){
			handys.add(A);
			break;
		}
		if(SN==handys.indexOf(handys)){
			handys.remove(A);
			
		}
                          ausgabe();
 

Anhänge

  • ak876djk.jpg
    ak876djk.jpg
    104,9 KB · Aufrufe: 36
Zuletzt bearbeitet von einem Moderator:
Du darfst in der foreach Schleife die Liste nicht verändern... Entweder über den Iterator entfernen oder Object merken und später entfernen.

Was willst du überhaupt machen? Das mit der for-Schleife, while Schleife und If-Abfrage sieht irgendwie komisch aus.

Nebenbei: if-schleife.de
 
Zuletzt bearbeitet von einem Moderator:
Hi,

danke erstmal für die antwort, habe jetzt in der for-schleife handy.remove(A); entfernt, aber trotzdem wird das Objekt nicht am Ende entfernt.

Was meinst du mit Iterator?

Bin leider Java Anfänger und kenne mich nicht so mit den Befehlen aus 😳

Ich möchte, dass wenn man einen Artikel mit der selben Artikelnummer einfügt der Bestand des Objektes im Array erhöht wird und nicht nocheinaml extra eingefügt wird, weil es ja dann doppelt da stehen würde.

Wiedrum soll aber, wenn eine Artikelnummer eingegeben wird, die kein Objekt im Array hat, als Objekt eingefügt werden.

Ist das Verständlich? (Bitte sagen!)
 
Zuletzt bearbeitet:
Ich würde sagen für die Anforderung ist eine Liste die falsche Datenstruktur.

Ich würde es eher mit einer HashMap<Handy,Integer> machen.

Java:
	Map<Handy, Integer> handys = new HashMap<Handy, Integer>();

	public void add(Handy handy) {
		Integer count = handys.get(handy);
		if (count == null) {
			handys.put(handy, 1);
		} else {
			handys.put(handy, count + 1);
		}
	}

	public int getCount(Handy handy) {
		Integer count = handys.get(handy);
		if (count == null) {
			return 0;
		} else {
			return count;
		}
	}

Musst dir nur noch überlegen was du mit hashCode() und equals() in der Handy Klasse machst
 
Das Problem ist, dass die Abgabe schon morgen ist und ich jetzt ungerene alles noch ändern möchte, ich hatte ganz am Anfang ein Array, dann einen Stack und dann wieder eine Arralist und würde gerne auch dabei bleiben.

Falls keine möglichkeit gibt das Problem zu lösen ist es nicht weiter tragisch, dann lass ich den Teil halt aus
 
Java:
import java.util.HashMap;
import java.util.Map;

public class HandyLager {

	Map<Handy, Integer> handys = new HashMap<Handy, Integer>();

	public void add(Handy handy) {
		Integer count = handys.get(handy);
		if (count == null) {
			handys.put(handy, 1);
		} else {
			handys.put(handy, count + 1);
		}
	}

	public int getCount(Handy handy) {
		Integer count = handys.get(handy);
		if (count == null) {
			return 0;
		} else {
			return count;
		}
	}

	public static void main(String[] args) {
		HandyLager lager = new HandyLager();
		lager.add(new Handy(123,"Handy123"));
		lager.add(new Handy(123,"Handy124"));
		lager.add(new Handy(123,"Handy125"));
		lager.add(new Handy(456,"Handy126"));
		lager.add(new Handy(567,"Handy127"));
		lager.add(new Handy(567,"Handy128"));
		
		System.out.println(lager.getCount(new Handy(123,"")));
		System.out.println(lager.getCount(new Handy(456,"")));
		System.out.println(lager.getCount(new Handy(567,"")));
		System.out.println(lager.getCount(new Handy(678,"")));
	}

}

class Handy {



	public Handy(int serialNumber, String name) {
		this.serialNumber = serialNumber;
		this.name = name;
	}

	private String name;
	private int serialNumber;

	public int getSerialNumber() {
		return serialNumber;
	}

	@Override
	public int hashCode() {
		final int prime = 31;
		int result = 1;
		result = prime * result + serialNumber;
		return result;
	}

	@Override
	public boolean equals(Object obj) {
		if (this == obj)
			return true;
		if (obj == null)
			return false;
		if (getClass() != obj.getClass())
			return false;
		Handy other = (Handy) obj;
		if (serialNumber != other.serialNumber)
			return false;
		return true;
	}
	
}

Mit einer Liste ist es auch kein Problem. Muss ich grade nochmal deinen Code ansehn, aber dann musst du auf jeden Fall Handy und Anzahl zusammen speichern.
 
Zuletzt bearbeitet von einem Moderator:
Ein Beispiel mit einer Liste, musst du nur noch bei dir einbauen:

Java:
import java.util.ArrayList;
import java.util.List;

public class HandyLager {

	List<Handy> handys = new ArrayList<Handy>();

	public void add(Handy handy) {
		boolean foundHandy = false;
		for(Handy h : handys){
			if(h.getSerialNumber() == handy.getSerialNumber()){
				foundHandy = true;
				h.inkrementCount();
				break;
			}
			
		}
		if(!foundHandy){
			handys.add(handy);
		}
		
	}

	public int getCount(Handy handy) {
		for(Handy h : handys){
			if(h.getSerialNumber() == handy.getSerialNumber()){
				return h.getCount();
			}
		}
		return 0;
		
	}

	public static void main(String[] args) {
		HandyLager lager = new HandyLager();
		lager.add(new Handy(123,"Handy123"));
		lager.add(new Handy(123,"Handy124"));
		lager.add(new Handy(123,"Handy125"));
		lager.add(new Handy(456,"Handy126"));
		lager.add(new Handy(567,"Handy127"));
		lager.add(new Handy(567,"Handy128"));
		
		System.out.println(lager.getCount(new Handy(123,"")));
		System.out.println(lager.getCount(new Handy(456,"")));
		System.out.println(lager.getCount(new Handy(567,"")));
		System.out.println(lager.getCount(new Handy(678,"")));
	}

}

class Handy {



	public Handy(int serialNumber, String name) {
		this.serialNumber = serialNumber;
		this.name = name;
		count = 1;
	}

	private int count;
	private String name;
	private int serialNumber;

	public int getSerialNumber() {
		return serialNumber;
	}
    
	public int getCount(){
		return count;
	}
	
	public void inkrementCount(){
		count++;
	}
	
}
 
Danke für die mühe aber wie und wo soll ich das nun einbauen?

Ich poste mal meinen ganzen Code:

Also das hier ist die erste Klasse, inklusive der Main:

Java:
import java.util.ArrayList;

public abstract class Lagerverwaltung {

	//Deklaration zweier Attribute
	static  ArrayList<Handy> handys = new ArrayList<Handy>();
	static  ArrayList<Tablets> tabs = new ArrayList<Tablets>();
	static  ArrayList<TV> tvs = new ArrayList<TV>();
	
	static int eingabe;
	
	//Init. einige Handys
	static Handy B = new Handy(145693,"Nokia","N97","Symbian","schwarz",5,8,20,128);
	static Handy C = new Handy(156743,"Samsung","GalaxyS","Android","schwarz",5,16,33,256);
	static Handy D = new Handy(192103,"SonyEr","XPERIA","Symbian","weiß",5,2,45,128);
	static Handy E = new Handy(167542,"Samsung","i8910","S60 5th","schwarz",8,8,60,128);
	static Handy F = new Handy(136598,"Nokia","X6","S60 5th","rot",5,8,78,64);
	static Handy G = new Handy(129578,"SonyEr","K850i","Sonstig","silber",3,2,12,32);
	static Handy H = new Handy(172459,"HTC","Desire","Android","schwarz",8,16,93,256);
	static Handy I = new Handy(118933,"Apple","iPHONE3","MacOs","weiß",3,16,64,128);
	static Handy J = new Handy(122473,"HTC","HD7","Windows","silber",5,16,77,128);
	static Handy K = new Handy(198623,"Apple","iPHONE4","MacOs","schwarz",5,16,83,256);
	
	static Tablets tablet1 = new Tablets(222222,"Acer","Windows 7","Blau", 22, 11,11,22,100);
	
	static TV tv1 = new TV(343333,"Samsung",22,"fullHD", 1080, 200, "schwarz", 60,900);
	
	static HandyVerwaltung hw = new HandyVerwaltung();
	static TabletVerwaltung tw = new TabletVerwaltung();
	static TVVerwaltung tvw = new TVVerwaltung();
	
	//Die main-Methode zum Ausführen des Programms
	public static void main(String args[]){

		//Einfügen der oben angeführten Handys im Stack
		handys.add(B);
		handys.add(C);
		handys.add(D);
		handys.add(E);
		handys.add(F);
		handys.add(G);
		handys.add(H);
		handys.add(I);
		handys.add(J);
		handys.add(K);
		
		tabs.add(tablet1);
		
		tvs.add(tv1);
		
//		//Ruft die Methode willkommen auf:
		willkommen();
	}	

	//Anfangsausgabedadasdasdd d
	public static void willkommen(){
		
		System.out.println("~~~Willkommen im MultiMediaShop~~~");

		//Ausgabe eines Menüs
		do{
			System.out.println("\n Bitte waehlen Sie aus!\n");
			System.out.println(" (1) Kunde");
			System.out.println(" - - - - - - - - - - - -");
			System.out.println(" (2) Geschaeftsfuehrer");
			System.out.println(" - - - - - - - - - - - -");
			System.out.println(" (3) Programm Beenden");

			eingabe=In.readInt();

			switch(eingabe){
				case 1:kundenmenu();break; //Durch Bestätigen der Eins wird die Methode kundenmenu() aufgerufen.
				case 2:anmeldung();break;	//Durch Bestätigen der Zwei wird die Methode anmeldung() aufgerufen.
				case 3:System.out.println("Auf Wiedersehen!");System.exit(0);break; //Bei Drei wird das Programm durch eine Ausgabe am Bildschirm beendet.
				default:System.out.println("Ungueltige Eingabe");	//Sollte eine andere Zahl eingegeben worden sein, so bekommt der Benutzer eine Ausgabe am Bildschirm und wird wiederaufgefodert, die richtige Zahl zu drücken.
				}}while(eingabe!=3);
	}

	//Kundenmenü
	public static void kundenmenu(){

		do{
			System.out.println("\n Bitte waehlen Sie aus!\n");
			System.out.println(" (1) Produkte ausgeben");
			System.out.println(" - - - - - - - - - - - -");
			System.out.println(" (2) Produkt suchen");
			System.out.println(" ------------------------");
			System.out.println("\n Waehlen Sie einen Produkt, dass Sie kaufen möchten\n");
			System.out.println(" (3) Handys");
			System.out.println(" - - - - - - - - - - - -");
			System.out.println(" (4) Tablets");
			System.out.println(" - - - - - - - - - - - -");
			System.out.println(" (5) Fernseher");
			System.out.println(" -----------------------");
			System.out.println(" (6) Zurück zum Menü");
			System.out.println(" - - - - - - - - - - - -");
			System.out.println(" (7) Programm beenden");

			eingabe = In.readInt();

			switch(eingabe){
			case 1:hw.ausgabe();tw.ausgabe();tvw.ausgabe();break;
			case 2:
				System.out.print("Geben Sie Ihre gewünschte Marke ein:");
				String eingabeS = In.readWord();
				hw.suche(eingabeS);
				tw.suche(eingabeS);
				tvw.suche(eingabeS);break;
			case 3:hw.ausgabe();hw.kaufen();break;
			case 4:tw.ausgabe();tw.kaufen();break;
			case 5:tvw.ausgabe();tvw.kaufen();break;
			case 6:willkommen();break;
			case 7:System.out.println("Auf Wiedersehen!");System.exit(0);break; //Bei Drei wird das Programm durch eine Ausgabe am Bildschirm beendet.
			default:System.out.println("Ungueltige Eingabe");
			}}while(eingabe!=7);
	}
	
	//Anmeldungsmenü
	public static void anmeldung(){
		String name;
		String pass;
		do{
			System.out.print("Anmeldename: ");
			name=In.readWord();
			
			System.out.print("Kennwort: ");
			pass=In.readWord();
			
			if(name.equals("Süleyman")||name.equals("Robert")){
				if(pass.equals("1234")){
				}	
			}
			
			else{
				System.out.println("Benutzername oder Passwort ist falsch!");
			}
			
			if (name.equals("Süleyman")&& pass.equals("1234")||name.equals("Robert")&& pass.equals("1234")){
				System.out.println("\n\nWillkommen!");
				geschaeftsmenu();
				break;
				}
			}while(!name.equals("Süleyman")||!name.equals("Robert")||!pass.equals("1234"));}

	//Geschäftsführermenü
	public static void geschaeftsmenu(){
		int eingabe;

		do{
			System.out.println("\n Bitte waehlen Sie aus!\n");
			System.out.println(" (1) Warentabelle ausgeben");
			System.out.println(" - - - - - - - - - - - -");
			System.out.println(" (2) Artikel eingeben");
			System.out.println(" - - - - - - - - - - - -");
			System.out.println(" (3) Zurück zum Menü");
			System.out.println(" - - - - - - - - - - - -");
			System.out.println(" (4) Programm Beenden");

			eingabe=In.readInt();

			switch(eingabe){
			case 1:hw.ausgabe();break;
			case 2:hw.hinzufuegen();break;
			default:System.out.println("Ungueltige Eingabe");
			case 3:willkommen();break;
			case 4:System.out.println("Auf Wiedersehen!");System.exit(0);break;
			}}while(eingabe!=4);
	}

	//Lager aufstocken //ANDers
	public abstract void hinzufuegen();
	
	//Warensuchmaschine
	public abstract void suche(String eingabeS);
	
	//Waren kaufen
	public abstract void kaufen();
	
	//Waren Ausgabe
	public abstract void ausgabe();
	



}

Hier die Handy Klasse:

Java:
public class Handy extends Artikel implements Artikelausgabe {
	
	String Art; 
	String Os;
	String Farbe;
	int Kamera;
	int Speicher; 
	int artikelnummer;
	
	public Handy(int artikelnummer,String Marke,String Art, String Os,String Farbe,int Kamera, int Speicher,int bestand, double preis){
		super(artikelnummer,Marke,preis,bestand);
		this.artikelnummer=artikelnummer;
		this.Art=Art;
		this.Os=Os;
		this.Kamera=Kamera;
		this.Farbe=Farbe;
		this.Speicher=Speicher;
		
	}
	
	public int getartikelnummer(){
		return artikelnummer;
	}
	public String getArt(){
		return Art;
	}
	public String getOs(){
		return Os;
	}
	public String getFarbe(){
		return Farbe;
	}
	public int getKamera(){
		return Kamera;
	}
	public int getSpeicher(){
		return Speicher;
	}
	public double getPreis(){
		return preis;
	}
	public String toString() { 
		return (artikelnummer+"\t" +bezeichnung+"\t\t" +Art+"\t\t" +Os+"\t\t" +Farbe+"\t\t" +Kamera+"MP\t\t" +Speicher+"GB\t\t"+bestand+"Stk\t\t"+preis+"€");
	}

    
}

Und hier die Verwaltung, wo ich das Problem habe:

Java:
public class HandyVerwaltung extends Lagerverwaltung {

int artikelnummer;
	public void hinzufuegen(){
		int SN;
		String marke;
		String modell; 
		String os;
		String farbe;
		int kamera;
		int speicher;
		int anzahl;
		double preis;
		
		System.out.println("Artikelnummer: ");
		SN=In.readInt();
		System.out.println("Marke:");
		marke=In.readWord();
		System.out.println("Modell:");
		modell=In.readWord();
		System.out.println("Betriebsssystem:");
		os=In.readWord();
		System.out.println("Farbe:");
		farbe=In.readWord();
		System.out.println("Kamera:");
		kamera=In.readInt();
		System.out.println("Speicher:");
		speicher=In.readInt();
		System.out.println("Preis:");
		preis=In.readDouble();
		System.out.println("Wieviele? ");
		anzahl = In.readInt();
		
		Handy A=new Handy (SN,marke,modell,os,farbe,kamera,speicher,anzahl,preis);
		

		for (Handy handy:handys){

			if(SN==handy.getartikelnummer()){
				handy.erhoeheBestand(anzahl);
                
			}
		}
		
		while(SN!=handys.indexOf(handys)){
			handys.add(A);
			break;
		}
		if(SN==handys.indexOf(handys)){
			handys.remove(A);
			
		}

		ausgabe();

		int eingabe2;

		do{
			System.out.println("\n Bitte waehlen Sie aus!\n");
			System.out.println("             (1) Weiteren Artikel einfügen");
			System.out.println("             - - - - - - - - - - - -");
			System.out.println("             (2) Beenden");
			System.out.println("             - - - - - - - - - - - -");
			System.out.println("             (3) Zurück zum Menü");

			eingabe2 = In.readInt();
			
			switch(eingabe2){
			case 1:hinzufuegen();break;
			case 2:System.out.println("Auf Wiedersehen!");System.exit(0);break;
			case 3:willkommen();break;
			default:System.out.println("Ungueltige Eingabe, bitte wiederholen!");
			}}while(eingabe2 !=3);
	}
	
	//Warensuchmaschine
	public void suche(String eingabeS){
		System.out.println("\nFolgende Produkte dieser Marke sind verfügbar:");
		System.out.println("HANDYS: \n");
		System.out.println("Art-Nr.\tMarke\t\tArt\t\tBetriebssystem\tFarbe\t\tKamera\t\tSpeicher\tBestand\t\tPreis");
		for(Handy handy : handys){
	         if(eingabeS.equals(handy.getMarke())){
	        	 System.out.println(handy.toString());
	         }         
	      }
	}
	
	//Waren kaufen
	public void kaufen(){
		System.out.print("Geben Sie Ihre gewünschte Artikelnummer ein:");
		int eingabeI = In.readInt();
		System.out.println("\nFolgendes Produkt haben Sie ausgewählt:");
		System.out.println("Art-Nr.\tMarke\t\tArt\t\tBetriebssystem\tFarbe\t\tKamera\t\tSpeicher\tBestand\t\tPreis");
		for(Handy handy : handys){
	         if(eingabeI == handy.getArtikelNummer()){
	        	System.out.println(handy.toString());
	        	 
	 			String eingabeS;
	 		do{	
	 			System.out.println("Wollen Sie das Produkt wirklich kaufen?");
	 			System.out.print("Ja");
	 			System.out.print("/Nein");
	 			
	 			eingabeS = In.readWord();
	 			
	 			if(eingabeS.equals("Ja")){
	 				System.out.print("Wieviele? ");
		 			int Anzahl = In.readInt();
	 				
		 			System.out.println("Gekauft"); 
	 				handy.verringernBestand(Anzahl);
	 				break;
	 			}
	 			
	 			else if(eingabeS.equals("Nein")){
	 				willkommen();
	 			}
	 			
	 			else{
	 				System.out.println("Ungueltig. Geben Sie nur 'Ja' oder 'Nein' ein!");
	 				
	 			}}while(!eingabeS.equals("Ja") || !eingabeS.equals("Nein"));
	         }         
	    }	
	}

	public void ausgabe(){
		System.out.println("\nHANDYS: \n");
		System.out.println("Art-Nr.\tMarke\t\tArt\t\tBetriebssystem\tFarbe\t\tKamera\t\tSpeicher\tBestand\t\tPreis");

		for (Handy handy : handys) {
			System.out.println(handy.toString());
		}
	}
	
}
 

Zurück
Oben