PDA

View Full Version : [FRAGE] - ArrayList


Mr.DJ
19-05-2004, 22:36
ich hab von gelbasack (danke!) den tip bekommen meine zahlenpaare evtl mit arrayList zu definieren und damit zu arbeiten.

mir ist aber nicht klar, ob ich hier auch "2-dimensional" arbeiten kann und so leicht zahlenpaare ablegen und nach dem einlesen unbestimmt vieler paare dann auch entsprechend sortieren kann. sortierung erfolgt zuerst nach dem ersten teil des zahlenpaares, dann nach dem 2. teil

hat da jemand etwas erfahrung damit?

dank euch:)
mr.dj

rck
20-05-2004, 00:51
ich hab von gelbasack (danke!) den tip bekommen meine zahlenpaare evtl mit arrayList zu definieren und damit zu arbeiten.

Comic Sans... :rolleyes:

Davon abgesehen: Kannst Du ein bisserl mehr von Deiner Datenstruktur bzw. Deinen Anforderungen an die Datenstruktur erzählen? Was genau hast Du vor? // René

Mr.DJ
20-05-2004, 05:00
Die Aufgabe, bzw das Beispiel:

http://cvs.sourceforge.net/viewcvs.py/*checkout*/eprog/eprog/3132/Konvhuel.html?rev=1.1

Ich möchte Zahlenpaare einlesen und diese auch als Paare ablegen. Weiters möchte ich das Programm so fexibel gestalten, dass es egal ist ob 30 oder mehr Punkte eingelesen werden...

wenn ich eine einfache zahlenliste nehme, so denke ich, tu ich mir schwer mit der sortierung etc. , drum suche ich nach einer vernünftigen lösung wie ich die zahlenpaare einlese, temporär ablege und auch für die weiteren berechnungen zur verfügung habe.

was ich über arrayList gelesen habe erscheint mir dafür recht praktisch, allerdings ist mir nicht klar ob ich das so 2-dimensional gestalten kann, dass ich zahlenpaare habe, die ích dann auch entsprechend einfach sortieren kann.

freu' mich über anregungen.
danke und gruß
mr.dj:)

JohnFoo
20-05-2004, 09:12
Du könntest dir eine eigene Datenstruktur erstellen, die einfach nur zwei Werte aufnehmen kann. Objekte dieser Klasse kannst du dann in der ArrayList ablegen.

Ganz simple Variante:

class ZahlenPaar
{
public int x;
public int y;
}


Da die beiden Zahlen x und y sicher eine bestimmte Bedeutung haben, kannst du die Variablen entsprechend benennen. Ebenso ergibt sich aus ihrer Verbindung sicher eine Bedeutung. Nach dieser kannst du dann die Klasse benennen. Ist aber nicht ein Muss, macht den Code aber verständlicher.

JohnFoo
20-05-2004, 09:20
Wie ich gerade bei Sourceforge in der Spezifikation nachgelesen habe, handelt es sich bei der Datenstruktur um einen Punkt. Kannste es also z.B. so machen: class Point
{
public int _x;
public int _y;
}

oder, noch besser (wegen der Zugriffskontrolle), so:

class Point
{
private int _x;
private int _y;

public int getX()
{
return _x;
}

public int getY()
{
return _y;
}

public void setX(int x)
{
_x = x;
}

public void setY(int y)
{
_y = y;
}
}

Da es in Java aber sowieso schon eine Klasse für einen Punkt gibt, solltest du auch diese nehmen (java.awt.Point (http://java.sun.com/j2se/1.4.2/docs/api/java/awt/Point.html)).

MaxAuthority
20-05-2004, 14:40
oder, noch besser (wegen der Zugriffskontrolle), so:


ich glaub bjoern stroustroup persoenlich (der C++ entwickler) hat mal gesagt, reine get/set methoden die NICHTS anderes machen, als die werte ohne irgeneine pruefung, etc. zu lesen und schreiben, sind unnoetig.

der einzige vorteil ist, wenn ich IRGENDWANN einmal vorhab, einen check einzubauen ists leichter.
Natuerlich weiss man das nicht bei jeder Variablen sofort, trotzdem gibts IMHO zuviele variablen die mit leeren get/set methoden ausgeruestet werden, nur um "hardcore"-OO-Leute zufrieden zu stellen :) - Stichwort: "Overengineering"

Mr.DJ
20-05-2004, 15:26
;) dank euch für die ideen, die bringen mich weiter
erlaube mir mich wieder zu melden,
wenn ich wo anstehe...

JohnFoo
20-05-2004, 18:07
ich glaub bjoern stroustroup persoenlich (der C++ entwickler) hat mal gesagt, reine get/set methoden die NICHTS anderes machen, als die werte ohne irgeneine pruefung, etc. zu lesen und schreiben, sind unnoetig.

der einzige vorteil ist, wenn ich IRGENDWANN einmal vorhab, einen check einzubauen ists leichter.

Tja, und wie willst du von Beginn an ausschließen können, dass das die get/set-Methoden später einmal ausgebaut werden? Geht nicht!

Wenn man get-/set-Methoden sofort einbaut, kann ein Check in dieser oder einer Subklasse einfach hinzugefügt werden - die Methode wird immer noch gleich aufgerufen. Werden die get-/set-Methode erst hinzugefügt, wenn sie benötigt wird, müssen auch die Aufrufer ihren Code ändern. Eindeutig umständlicher.

Leere get/set-Methoden haben nichts mit "Overengineering" zu tun, sondern mit Voraussicht.

rck
21-05-2004, 03:18
Leere get/set-Methoden haben nichts mit "Overengineering" zu tun, sondern mit Voraussicht.

Bin persönlich auch ein Anhänger von get/set Methoden.

Davon abgesehen, ein Schmäh noch (die Kollegen haben ja eh schon fast alles verraten :-)): Du kannst Dir für Collections einen Comperator definieren. Mit dem lassen sich zB ArrayLists supercool mit nur einem Befehl (collection.sort()) sortieren -- auch nach zB Punkten, wenn Du's definierst.

Guck mal auf http://leepoint.net/notes-java/25data/35arrays/70sorting.html, im unteren Teil der Seite findest Du ein nettes Comparatorbeispiel. Sollte sich leicht ausbauen lassen, wenn nicht bei Point eh schon einer definiert ist!

JAVA macht einem das Leben wirklich leicht, anders als so manch andere Programmiersprache (http://www.kiesler.at/article24.html) // René

rck
21-05-2004, 03:27
Die Aufgabe, bzw das Beispiel:

http://cvs.sourceforge.net/viewcvs.py/*checkout*/eprog/eprog/3132/Konvhuel.html?rev=1.1

So anschauliche Beispiele sind halt schon super.

Mr.DJ
24-05-2004, 15:25
Da es in Java aber sowieso schon eine Klasse für einen Punkt gibt, solltest du auch diese nehmen (java.awt.Point (http://java.sun.com/j2se/1.4.2/docs/api/java/awt/Point.html)).
Also irgendwie hab ich das noch nicht ganz heraussen mit der richtigen Anwendung der Classen und zugehörigen Objekten... steh noch etwas auf der seife

Vielleicht kann mir jemand erklären wie ich die java api richtig lese, damit ichs verstehe und dann auch vor allem richtig anwenden kann.

ich lese daten ein, prüfe ob es gültige integerwerte sind und will sie dann als punkte mit x und y koordinaten in meinem dataarray (ArrayList) ablegen. wie definiere ich den punkt richtig und wie trage ich den in mein array ein?

später will ich dann die punkte sortieren.

Ist mir noch zu helfen?

:rolleyes: mr.dj

AntiBit
24-05-2004, 19:27
wie definiere ich den punkt richtig und wie trage ich den in mein array ein?

Point p = new Point(xWert, yWert);

oder alternativ

Point p = new Point();
p.x = xWert;
p.y = yWert;

Einfügen:

ArrayList a = new ArrayList();
a.add(p);

Rauslesen:

for(int i=0;i<a.size();i++)
{
Point p = (Point) a.get(i);
.
.
.
machWasMitPoint();
}

Alles klar?

Mr.DJ
24-05-2004, 21:31
Alles klar?
ziemlich. muß mich noch ein wenig daran gewöhnen...;)
danke!