Programmieren - alles kontrollieren 4.941 Themen, 20.708 Beiträge

Problem in Java (ArrayList)

Lifetec1 / 9 Antworten / Baumansicht Nickles

Guten Tag,

ich programmiere gerade eine Verwaltungssoftware für ein Autohaus auf sehr niedrigem Niveau und hätte da ein Problem.
Unzwar hab eich eine ArrayList, in der automatisch alle eingegebenen Werte, wie zB Kennzeichen, Typ usw. gespeichert werden. Mein Problem besteht nun darin, dass ich eine "Suche" programmieren möchte, die, wenn ich zB den Typ "Sportwagen" eingebe, mir alle Einträge der ArrayList zeigt, die vorher als Sportwagen eingefügt worden sind. Mit welchen Methoden ist dies möglich? Die Suchfunktion soll durch ein einziges JTextField durchgeführt werden. Es soll also ein JTextField bestehen, in dem der User die Möglichkeit hat, seinen Suchbegriff einzugeben und dann automatisch in der ArrayList nach allen Einträgen gesucht wird, die diesen Begriff beinhalten. Die Ausgabe soll zunächst nur über die Konsole geschehen.
Ich bin dankbar für jede Hilfe

Meine ersten Verusche sehen so aus:
public void compareTo(Object o) {
AutoInfo m = (AutoInfo)o;
if (arrayList.equals(m)) {
AutoInfo.getTyp();
System.out.println("JAAA");
} else {
System.out.println("Nein");
}
}

bei Antwort benachrichtigen
Borlander Lifetec1 „Problem in Java (ArrayList)“
Optionen

Also ich verstehe ich nicht so recht wo da nun das Problem ist...

1) Array durchlaufen
2) Eigenschaft prüfen
3) Ausgabe falls Bedingung erfüllt


Gruß
Borlander

bei Antwort benachrichtigen
Lifetec1 Borlander „Also ich verstehe ich nicht so recht wo da nun das Problem ist... 1 Array...“
Optionen

OK, also. ich habe eine Funktion "Hinzufügen". Diese fügt die in einem Dialogfenster eingegebenen Werte der arrayList hinzu. Danach wird in einer anderen Gui diese ArrayList ausgelesen und deren Inhalt wird in eine JList eingefügt. In genau dieser GUI möchte ich ein JTextField einrichten mit dem ich, wie oben angegeben, suchen kann. Das Problem ist jetzt nur, wie kann ich zB auf den Wagentyp in der ArrayList zugreifen. Meiner Ansicht nach (ich kann mich auch irren, bin Anfänger) ist es nicht möglich einzelne Werte aus der ArrayList auszulesen, denn durch die getIndex() Funktion der ArrayList wird mir, wenn ich einen bestimmten Index auslesen will immer der ganze Datensatz angezeigt, der auch später in der JList steht, also Besitzer, Wagentyp, Kosten usw. Wie kann ich denn jetzt genau vergleichen, ob der eingegebene Wert im TextField einem Wert in der ArrayList entspricht?

bei Antwort benachrichtigen
Borlander Lifetec1 „OK, also. ich habe eine Funktion Hinzufügen . Diese fügt die in einem...“
Optionen
getIndex() Funktion der ArrayList
Laut API-Doc gibt es nur eine Methode get() und die liefert das Objekt an diesem Index zurück. Wenn Du eine typisierte ArrayList erzeugst (es gibt nur wenig Gründe das nicht zu tun) könntest Du auch z.B. direkt ein Objekt vom Typ AutoInfo zurückgeliefert bekommen...

Der Vergleich würde wohl auf einen Strinvergleich mit der gewünschten Eigenschaft hinauslaufen. Was nicht umbedingt wirklich elegant wäre bei einer doch sehr kleinen Anzahl möglicher Typen.
bei Antwort benachrichtigen
koern Borlander „ Laut API-Doc gibt es nur eine Methode get und die liefert das Objekt an diesem...“
Optionen

Weiss zwar immer noch nicht so richtig was du genau machen möchtest, aber es klingt stark nach Iterator.

Ein Iterator ist ein Objekt, was genau ein Element in der Liste repräsentiert.
Er bietet Möglichkeiten auf das nächste (folgende) Element zuzugreifen und sich so durch Listen zu "hangeln".
Das ganze klingt sehr umständlich um durch Elemente einer Liste zu gehen, ist aber notwendig, da Java nie genau weiss wie lang ein einzelnes Datum ist.
In jedem Element ist praktisch die Adresse für das darauffolgende Element versteckt- glaub mir wenn du das paar mal gemacht hast, isses ganz einfach.

Hier ein Beispiel:

public class MainClass {
public static void main(String args[]) {
ArrayList

bei Antwort benachrichtigen
Lifetec1 koern „Weiss zwar immer noch nicht so richtig was du genau machen möchtest, aber es...“
Optionen

Super alles klar, besten Dank. Bei einem kleinerem Problem konnte mir das schon super helfen. Werd mich jetzt mal an das Größere machen. ;-) Danke

bei Antwort benachrichtigen
Borlander koern „Weiss zwar immer noch nicht so richtig was du genau machen möchtest, aber es...“
Optionen
Stell Dir aber Listen nicht so vor, dass jedes Element ne laufende Nummer hat, auf die Du zugreifen kannst, wie bei nem Array.
Das Interface List sieht offiziell einen Zugriff über den Index vor, siehe get/set. Wie teuer diese Operation ist hängt natürlich von der verwendeten Datenstruktur ab. Bei ArrayList ist diese ein Array.

so kanns auch schnell mal sein, das ein Index weg is.
Siehe API-doc: Die Indizes liegen immer im Intervall [0;list.size()-1]...

Diese Elemente kann man ebenfalls mit nem Iterator durchgehen.
http://www.galileodesign.de/openbook/javainsel5/javainsel11_000.htm#Rxx747java11000040003701F0431CD - für faule Programmierer ;-)


Gruß
Borlander
bei Antwort benachrichtigen
koern Borlander „ Das Interface List sieht offiziell einen Zugriff über den Index vor, siehe...“
Optionen

Hast Recht drauf zugreifen kann man schon, allerdings halte ich es für problematisch diese Nummern in einer Verwaltung als ID's zu pflegen.
Hatte mal in nem Projekt zu tun, wo die Kollegen genau das gemacht haben und anschließend haben wir uns gewundert warums Nullpointer und falsche Daten hakelte.
Finde die Iteratoren sehr schick und vor allem sicher...

bei Antwort benachrichtigen
Borlander koern „Hast Recht drauf zugreifen kann man schon, allerdings halte ich es für...“
Optionen
allerdings halte ich es für problematisch diese Nummern in einer Verwaltung als ID's zu pflegen.
Da stimmt ich auch voll zu. Es gibt nunmal keine dauerhaft eindeutige Beziehung zwischen Index und gespeichertem Objekt. Es ist sinnvoller dann gleich eine Referenz auf das Objekt zu speichern, statt den Umweg über eine solchen key. Das ist eine Geschichte die man in Datenbanken macht ;-)
bei Antwort benachrichtigen
neanderix Lifetec1 „Problem in Java (ArrayList)“
Optionen

Hmm....

ich frage mich, warum das unbedingt auf diese Weise machen willst. Was spricht dagegen, die Daten in einer Datenbank vorzuhalten und bei Bedarf abzurufen?
Dafür muss IIRC nichtmal ein SQL Server wie mySQL oder Postgre installiert werden - eine ODBC-anbindung an z.B: eine Access *.mdb Datei reicht.
(Zugegeben, ein mySQL oder ein Postgre wäre komfortabler)

Wie gesagt - das würde dir die Programmierung erheblich erleichtern, weil du nur noch SQL-Strings erzeugen und übergeben müsstest.

Volker

Computers are like airconditioners - they stop working properly when you open Windows Ich bin unschuldig, ich habe sie nicht gewählt!
bei Antwort benachrichtigen