Object in Array nach Prüfung löschen

BMWbest

Mitglied
Hey,

Ich schreibe gerade eine GUI Anwendung mit Swing, mit der es möglich sein wird, Verschiedene Arten von Bankkonten zu erstellen, Ein-/Auszahlungen und Überweisungen zu tätigen und Umsätze anzuzeigen.
Grafische Oberfläche steht, Konten lassen sich mit automatischer Zuteilung von Kontonummern auch generieren und jetzt möchte ich die Funktion einbauen, dass ich ein Konto wieder löschen kann.

Die Anwendung arbeitet (noch) nicht mit Datenbankanbindung, sondern mit Array Lists.

Meine Methode zum Ausfindig machen des bestimmten Kontos sieht momentan so aus:

Java:
public int gKontoLoeschen(int kontonummer) {
        for (Girokonto obj : gKontoliste) {
            if (String.valueOf(obj.getKontonummer()).equals(String.valueOf(kontonummer))) {
                //gKontoliste.remove(gKontoliste.get(kontonummer));
            } 
        }

        return kontonummer;
    }

In der Oberklasse der Konten gibt es neben der Kontonummer noch Namen und Kontostand.
Wie kann ich jetzt also sagen, dass wenn er die Kontonummer in der Array List gefunden hat, diese wieder löschen soll und mit ihr alle dazugehörigen Daten auch? Weil ein Index hab ich jetzt nicht angelegt, wüsste gerade auch nicht wie das gehen soll. Ist ja ein wenig anders wie bei Arrays

Danke euch schonmal!
 
Zuletzt bearbeitet:

AmunRa

Gesperrter Benutzer
Ich verstehe nicht ganz was du meinst.

Wenn du ein Object vom Typ Konto hast (Class Konto z.B. so )


Java:
public class Konto{
long konotNr;
int balance;
String name;

}

und dieses Object nirgends mehr refernziert wird. Wird das gesammte Object, mit all seinen Variablen vom Garbage Collector gelöscht.

Kannst du nochmal genau beschreiben was dich stört, oder wo das Problem liegt?

Lg
AmunRa


[EDIT]

HAb glaub ich grad dein Problem verstanden




Mit
list.remove(Object obj) kannst du ein Object wieder aus der Liste entfernen.
Java:
for (Girokonto obj : gKontoliste) {
            if (String.valueOf(obj.getKontonummer()).equals(String.valueOf(kontonummer))) {
                gKontoliste.remove(obj);
                break;
            } 
        }
[/EDIT]
 
Zuletzt bearbeitet:

Volvagia

Top Contributor
Entweder du läufst mit dem Iterator über die Schleife, oder du benutzt eine Zählschleife.

Java:
public int gKontoLoeschen(int kontonummer) {
	for (int i = gKontoliste.size - 1; i >= 0; i--) {
		Bankkonto obj = gKontoliste.get(i);
		if (String.valueOf(obj.getKontonummer()).equals(String.valueOf(kontonummer))) {
			gKontoliste.remove(i);
		}
	}
	return kontonummer;
}


Java:
public int gKontoLoeschen(int kontonummer) {
	for (Iterator<Bankkonto> iterator = gKontoliste.iterator(); iterator.hasNext();) {
		Bankkonto konto = iterator.next();
		int listKontonummer = konto.getKontonummer();
		if (String.valueOf(listKontonummer).equals(String.valueOf(kontonummer))) {
			iterator.remove();
		}
	}
	return kontonummer;
}

btw. warum vergleichst du 2 (offenbar) Zahlen als String? Und warum gibst du den primitiven Parameter wieder zurück? Ist nicht wichtig, nur aus eigener Interresse.
 
Zuletzt bearbeitet:

BMWbest

Mitglied
@AmunRa
das habe ich bereits versucht. Wirft mir nur en Haufen Fehlermeldungen um die Ohren.
mit System.out.prinln konnte ich schon feststellen, dass er die Kontonummer nach Eingabe in der GUI findet, aber beim Löschen mit remove bekomme ich dann sowas:
"Exception in thread "AWT-EventQueue-0" java.util.ConcurrentModificationException"

@Volvagia
Den Rückgabewert nehm ich, um das in der GUI wieder anzeigen zu können, welche KNR gelöscht wurde (ja man könnte auch einfach auslesen und übertragen, aber dann würde es ohne if-Abfrage auch angezeigt werden, wenn das Konto gar nicht besteht. Somit hab ich weniger code, wenn ich erst nach erfolgreichem Löschen an das Textfield wieder das zurückgebe)
Das mit der Stringumwandlung ist momentan nur ne Notlösung,weil sonst "equals" nicht möglich ist und mit == wollte er es nicht machen.

Sind Iterationen nicht out (=unschöner Code)?

edit: Deine erste Variante funktioniert aber einwandfrei (nach size muss noch "()" oder?)
 
Zuletzt bearbeitet:
P

pL4Gu333

Gast
die Lösungen wurden ja schon gepostet... aber eine andere Frage was genau soll denn

Java:
public int gKontoLoeschen(int kontonummer) {

Java:
    return kontonummer;

bewirken ?

du änderst ja deine Kontonummer nicht, da wird die gleiche zurückgegeben, die du als Parameter geschickt hast dann kannst du auch gleich void machen^^
 
P

pL4Gu333

Gast
@Volvagia
Den Rückgabewert nehm ich, um das in der GUI wieder anzeigen zu können, welche KNR gelöscht wurde (ja man könnte auch einfach auslesen und übertragen, aber dann würde es ohne if-Abfrage auch angezeigt werden, wenn das Konto gar nicht besteht. Somit hab ich weniger code, wenn ich erst nach erfolgreichem Löschen an das Textfield wieder das zurückgebe)
Das mit der Stringumwandlung ist momentan nur ne Notlösung,weil sonst "equals" nicht möglich ist und mit == wollte er es nicht machen.

aber du bekommst in jedem Fall deine Kontonummer zurück egal ob sie gelöscht wurde oder nicht ... dann musst du das eher so machen:

(ich missbrauch mal kurz Volvagia- Code dafür :D )
Java:
public int gKontoLoeschen(int kontonummer) {
	for (int i = gKontoliste.size - 1; i >= 0; i--) {
		Bankkonto obj = gKontoliste.get(i);
		if (String.valueOf(obj.getKontonummer()).equals(String.valueOf(kontonummer))) {
			gKontoliste.remove(i);
                        return kontonummer;
		}
	}
	return null oder sowas ;
}
 

BMWbest

Mitglied
wie schon gesagt..
Ich möchte nacher in einem Textfeld ausgeben, dass die Kontonummer XXXXXXX erfolgreich gelöscht wurde.
Kopier ich die Kontonummer nur aus dem anderen Textfeld muss ich ja wieder ne Abfrage machen, um sicher zustellen, dass die Ausgabe nur dann erscheint, wenn das Konto auch wirklich da war und erfolgreich gelöscht wurde...
So übergeb ich dem Textfeld einfach die Rückgabe. verpack ich das noch in ne Try/Catch kann ich auch null zurückgeben oder ein Fehlerwert... unschön?
 
P

pL4Gu333

Gast
natürlich nicht null bei int :D
aber ich glaub du weißt was ich meine .... :D

kann bitte nen Admin meine Posts zusammenfügen?
 

Volvagia

Top Contributor
edit: Deine erste Variante funktioniert aber einwandfrei (nach size muss noch "()" oder?)
Ups, ja. :oops:
Denk daran, dass du immer rückwärts durchlaufen musst, da sich sonst der Index noch nicht geprüfter Elemente ändert.


Sind Iterationen nicht out (=unschöner Code)?
Finde ich nicht. (Auch for each benutzt die Iterierbarkeit)
Aber Schönheit liegt ja im Auge des Betrachters.


Den Rückgabewert nehm ich, um das in der GUI wieder anzeigen zu können, welche KNR gelöscht wurde (ja man könnte auch einfach auslesen und übertragen, aber dann würde es ohne if-Abfrage auch angezeigt werden, wenn das Konto gar nicht besteht. Somit hab ich weniger code, wenn ich erst nach erfolgreichem Löschen an das Textfield wieder das zurückgebe)

Verstehe ich nicht, aber ist ja für das Problem nicht wichtig.

Java:
int i = bekommeKontoNrZumLoeschen();
int j = gKontoLoeschen(i);
textfeld.setText(String.value(j));

Java:
int i = bekommeKontoNrZumLoeschen();
gKontoLoeschen(i);
textfeld.setText(String.value(i));


Eine Liste zählt die Anzahl der Änderungen. Der Iterator vergleicht diese mit der Anzahl die die Liste wärend seiner Initialisation hatte. Wenn sie sich ändert fliegt die ConcurrentModificationException, um zu verhindern dass der Iterator vor allem bei Multithreading "out of sync" mit der Liste ist.

So übergeb ich dem Textfeld einfach die Rückgabe. verpack ich das noch in ne Try/Catch kann ich auch null zurückgeben oder ein Fehlerwert... unschön?

Du könntest auch eine boolean zurückgeben. Das machen Listen die nach Objekten suchen die gelöscht werden sollen auch so. Aber dabei musst du aufpassen, oft fällt der Rückgabewert als Prüfungsmöglichkeit nicht so auf. Insbesonders im Vergleich zu einer Checked Exception.
 
Zuletzt bearbeitet:

BMWbest

Mitglied
Java:
int i = bekommeKontoNrZumLoeschen();
int j = gKontoLoeschen(i);
textfeld.setText(String.value(j));

Java:
int i = bekommeKontoNrZumLoeschen();
gKontoLoeschen(i);
textfeld.setText(String.value(i));


mhh.. das versteh ich glaub noch nicht..
sollte ich das zusätzlich noch implementieren?

Was ich gemacht ist, dass ich noch einen zweiten "normalen" Array für jeden Kontentyp erzeuge, dem ich sämtliche generierte Kontennummern zuweise. Die generierte wird dann mit dem aus dem Array verglichen, damit keine doppelten Kontennummern vorkommen...
Jetzt stellt sich allerdings die Frage, wie ich die Kontonummer da wieder rausbekomme...
Mal schauen ob mir was einfällt , ansonsten frag ich nochmal...:)
 

Natac

Bekanntes Mitglied
@AmunRa
das habe ich bereits versucht. Wirft mir nur en Haufen Fehlermeldungen um die Ohren.
mit System.out.prinln konnte ich schon feststellen, dass er die Kontonummer nach Eingabe in der GUI findet, aber beim Löschen mit remove bekomme ich dann sowas:
"Exception in thread "AWT-EventQueue-0" java.util.ConcurrentModificationException"

Eine ConcurrentModificationException bekommst du immer dann, wenn du gerade mit einem Iterator über eine Collection (zum Beispiel eine ArrayList) läufst und währenddessen etwas an der Collection änderst.

Java:
ArrayList<String> list = new ArrayList<String>(10); //ArrayList mit 10 Einträgen erzeugen
Collections.fill(list, "Hallo"); // In jeden Eintrag "Hallo" eintragen

for(String entry : list){ // Diese for-Schleife nutz einen Iterator, auch wenn man das nicht sieht
  list.remove(entry) // BUMM! ConcurrentModificationException
}

Lösung 1 wurde ja schon geposstet: Den Iterator explizit verwenden und die
Code:
Iterator.remove(Object)
Methode nutzen. Diese ist aber leider nicht bei jedem Iterator implementiert.

Lösung 2 wäre, die Liste mit einem Index zu durchlaufen. Und wenn man dann noch hinten anfängt, kann man einfach Elemente rauslöschen, ohne dass es jemanden stört:

Java:
ArrayList<String> list = new ArrayList<String>(10); //ArrayList mit 10 Einträgen erzeugen
Collections.fill(list, "Hallo"); // In jeden Eintrag "Hallo" eintragen

for(int i = list.size()-1; i >= 0; i--){ // Per index durch die Liste laufen
  list.remove(i); // Index i löschen
}

Wollte ich der Vollständigkeit halber nur mal ergänzen. ;)
 

BMWbest

Mitglied
hey vielen Dank... funktioniert jetzt einwandfrei..

noch ne Frage: ich hab ein paar verschiedenen LayerPanes jetzt um verschiedene Menüoptionen realisieren zu könne.
Unterschiedlichste Dinge (wie Einzahlungsmenü, Überwesiungsmenü etc) rufe ich über eine Combobox auf..
Ich schreibe also dann immer:
Java:
switch (this.jComboBox1.getSelectedIndex()) {
            case 0:
                this.jLayeredPaneAnlegen.setVisible(false);
                this.jLayeredPaneTrans.setVisible(false);
                this.jLayeredPane1.setVisible(false);
                break;
            case 1:
                this.jLayeredPaneAnlegen.setVisible(true);
                this.jLayeredPane1.setVisible(false);
                this.jLayeredPaneTrans.setVisible(false);
                break;
            case 2:
                this.jLayeredPane1.setVisible(true);
                this.jLayeredPaneTrans.setVisible(false);
                this.jLayeredPaneAnlegen.setVisible(false);
                break;
            case 3:
                this.jLayeredPaneTrans.setVisible(true);
                this.jLayeredPaneAnlegen.setVisible(false);
                this.jLayeredPane1.setVisible(false);
                break;
        }
ISt recht umständlich
gibt es keinen Befehl mit dem ich sagen kann "Alle LayerdPanes.setVisible(false) außer das eine " ??
Wäre um einiges angenehmener
 

Volvagia

Top Contributor
Falls du immer nur 1 sichtbar hast kannst du sie bequem auf das CardLayout adden (benötigt beim Hinzufügen einen String als Constrain, sonst Exception) und bei Bedarf jederzeit austauschen.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
F Casten: Object nach Array Java Basics - Anfänger-Themen 10
P Variablen generic type variablen in object array Java Basics - Anfänger-Themen 1
P Auf Object in Array Methode anwanden Java Basics - Anfänger-Themen 2
S Object Array Length via Konstruktor Java Basics - Anfänger-Themen 5
T Object in Array Java Basics - Anfänger-Themen 3
K Datentypen Object in 2-dimensionales String Array zurückwandeln Java Basics - Anfänger-Themen 14
T Aus object Array Double Werte ziehen Java Basics - Anfänger-Themen 10
G Object deserialisierung in ein Object Array Java Basics - Anfänger-Themen 5
E Generische Arrays durch Typecast mit Object-Array Java Basics - Anfänger-Themen 11
Q OOP Object Array im simplen Shopsystem Java Basics - Anfänger-Themen 6
B Problem mit Object Array Java Basics - Anfänger-Themen 8
G array vom typ object inhalt vergleichen Java Basics - Anfänger-Themen 3
M Ein "Object Array" zurückgeben. Java Basics - Anfänger-Themen 7
S Object Array füllen Java Basics - Anfänger-Themen 8
B zwei dimensional Object Array Java Basics - Anfänger-Themen 2
E Cast von Object zu int (Array) Java Basics - Anfänger-Themen 19
D Array vom Typ Object zu Typ File convertieren Java Basics - Anfänger-Themen 2
D remove Object von einer Liste von Obejcts Java Basics - Anfänger-Themen 3
M Nullpointer beim befüllen meiner Liste im Object Java Basics - Anfänger-Themen 3
O Welcher Object-Lock-Pool bei static Variablen? Java Basics - Anfänger-Themen 3
J neues Object (JLabel) vorab zum Layout hinzufügen , Location setzen, etc? Java Basics - Anfänger-Themen 2
I JSON - cannot deserialize from Object value Java Basics - Anfänger-Themen 16
"java.util.HashMap.get(Object)" is null Java Basics - Anfänger-Themen 10
H What is the Life Cycle of an Object Created Within/Outside of a Servlet? Will that item be destroyed after the session ends? Java Basics - Anfänger-Themen 1
HolyFUT JSON String in Java Object schreiben - Anführungszeichen rauskriegen? Java Basics - Anfänger-Themen 17
thobren Object[][] Java Basics - Anfänger-Themen 8
R Compiler-Fehler JTable mit XML befüllen | The constructor JTable(Object[], String[]) is undefined Java Basics - Anfänger-Themen 10
B JaxB - Property vom Typ Object und LocalDateTime speichern? Java Basics - Anfänger-Themen 0
S Arraylist<Object> mit verschiedenen Objects ausgeben Java Basics - Anfänger-Themen 3
N extends und super vs new object Java Basics - Anfänger-Themen 4
I JaxB und Klasse "Object" ? Java Basics - Anfänger-Themen 7
D Klassen undefined for the type 'object' Java Basics - Anfänger-Themen 2
B JaxB - speichern vom Typ "Object" Java Basics - Anfänger-Themen 8
P Variablen HttpResponse.getBody() wird automatisch org.json Object und kann nicht zu json.simple Object gecastet werden? Java Basics - Anfänger-Themen 7
M this.object in einer parameterlosen Methode verwenden Java Basics - Anfänger-Themen 3
M Java Klasse Object Java Basics - Anfänger-Themen 5
G Java Object value und entity? Java Basics - Anfänger-Themen 2
S Generics-Problem: Class, Class<?>, Class<Object> Java Basics - Anfänger-Themen 4
I Object-Oriented Programming, Objekt erzeugen Java Basics - Anfänger-Themen 1
P Zugreifen auf Object[] Java Basics - Anfänger-Themen 4
B if(object== null) abkürzen? Java Basics - Anfänger-Themen 6
A Object to Map Java Basics - Anfänger-Themen 2
D Object in ArrayList ausgeben Java Basics - Anfänger-Themen 24
L Input/Output Datei Object aus resources Java Basics - Anfänger-Themen 1
T HashSet in List-Object Java Basics - Anfänger-Themen 5
H Datentypen for(typ a : b) nur typ Object möglich ? Java Basics - Anfänger-Themen 2
J Compiler-Fehler Fehler bei Vektor (E extends Object declared in class Vector) Java Basics - Anfänger-Themen 9
T Object zu Char zu String Java Basics - Anfänger-Themen 6
Yamie ArrayList<Object> als Liste von Strings ausgeben? Java Basics - Anfänger-Themen 15
F Methoden Object.clone() Java Basics - Anfänger-Themen 1
A Probleme beim Methodenaufruf von Object[] ! Java Basics - Anfänger-Themen 12
J Methoden Doppelt verkettete Liste remove(Object) Java Basics - Anfänger-Themen 8
S Methoden equals(object o) / toString Java Basics - Anfänger-Themen 15
A JavaScript Object Notation einbinden mittels Maven Java Basics - Anfänger-Themen 7
F Unique Object Java Basics - Anfänger-Themen 3
GreyFox Object dynamisch mit werten versehen. Java Basics - Anfänger-Themen 4
R The method printf(String, Object[]) in the type printStrem in not applicable for the arguments ... Java Basics - Anfänger-Themen 3
Z Object Kreis am Frame abprallen lassen! Java Basics - Anfänger-Themen 12
O Object Java Basics - Anfänger-Themen 4
O nullpointerExce. Gui Object weitergabe Java Basics - Anfänger-Themen 12
K Selbst renderndes Object auf null setzen Java Basics - Anfänger-Themen 1
K Methoden Probleme mit LinkedList.remove(object) Java Basics - Anfänger-Themen 1
J Object bestimmter Klasse Java Basics - Anfänger-Themen 3
F Object mit zwei Entities Java Basics - Anfänger-Themen 3
B Map, basic types & Object Java Basics - Anfänger-Themen 5
B Date Object mit Millisekunden Ausgabe Java Basics - Anfänger-Themen 8
V Object in double? Java Basics - Anfänger-Themen 3
N Object mit String ansprechen Java Basics - Anfänger-Themen 7
A Applet mit Object-Tags einbinden. Java Basics - Anfänger-Themen 3
A If object != null funktioniert nicht Java Basics - Anfänger-Themen 2
B func(Object ....args) korrekt weitergeben Java Basics - Anfänger-Themen 4
M Object people[][] Daten hinzufügen Java Basics - Anfänger-Themen 3
T Input/Output Object Streams Java Basics - Anfänger-Themen 6
T Object[][] to String[][] Java Basics - Anfänger-Themen 8
T HashMap<String,Object> Werte auslesen Java Basics - Anfänger-Themen 5
H Object an methode Java Basics - Anfänger-Themen 4
D Object -> String Java Basics - Anfänger-Themen 6
W Compiler-Fehler "Could not reserve enough space for object heap"... und dann raucht das Programm ab Java Basics - Anfänger-Themen 3
D Datentyp Object Java Basics - Anfänger-Themen 2
B Object "Method" in TreeSet, Fehler beim Vergleichen/Comparable Java Basics - Anfänger-Themen 9
L Datentypen Object zu double zu int konvertieren Java Basics - Anfänger-Themen 6
M String to Object Java Basics - Anfänger-Themen 15
S Object Initialisierung Java Basics - Anfänger-Themen 7
H Object in einem .jar-File einlesen Java Basics - Anfänger-Themen 3
D Object oder Primitiv Java Basics - Anfänger-Themen 10
E Object in eigene Klasse umwandeln? Java Basics - Anfänger-Themen 7
W Main-method in Object-classes Java Basics - Anfänger-Themen 5
algebraiker TreeMap<Date,Object> navigieren? Java Basics - Anfänger-Themen 24
E Equals-Methode auf Class-Object Java Basics - Anfänger-Themen 17
C Typen aus List<Object[]> ändern Java Basics - Anfänger-Themen 7
C JComboBox setSelectedItem(Object) Problem Java Basics - Anfänger-Themen 5
B Methoden object = this; Java Basics - Anfänger-Themen 4
S Object Member<T> Klasse Java Basics - Anfänger-Themen 5
M Methode von einem Object überschreiben Java Basics - Anfänger-Themen 5
S Collections Aus Set<Object> bestimmte Typen entfernen Java Basics - Anfänger-Themen 3
M Variablen dynamisch variableninhalt von Object auslesen Java Basics - Anfänger-Themen 4
M Fehlermeldung: the method.... ist undefined for the type object Java Basics - Anfänger-Themen 6
R ArrayList(int index, Object) funktioniert nicht korrekt? Java Basics - Anfänger-Themen 7
C Bereits geöffnetes Object ermitteln Java Basics - Anfänger-Themen 5
N HashMap<String, Object> bei jre4 Java Basics - Anfänger-Themen 3

Ähnliche Java Themen

Neue Themen


Oben