Krautkanal.com

Veröffentlicht am 2015-09-18 11:56:21 in /prog/

/prog/ 7787: allgemeiner Java Faden

joshuapekera Avatar
joshuapekera:#7787

Nanu, wo ist der Java Faden? Dann starte ich gleich einen.

grafxiq Avatar
grafxiq:#7788

Und gleich eine Frage, wie ist es mit mehreren Konstruktoren, Bernd?

Also angenommen, es gibt eine Klasse X mit Konstruktor X(), der keine Argumente braucht. Es gibt noch weitere Konstruktoren, die jedoch Argumente brauchen.

In X() soll ein wenig Magie statt finden und darauf die passenden Konstruktoren aufgerufen werden. Wie geht es unter Java?

Hier ein Stück sinnbefreiten Code:
http://pastebin.com/Cj0MWBPm


t.pythonlüfter

ovall Avatar
ovall:#7789

>>7788
Und was ist jetzt deine Frage? Kannste machen, wenn du willst.

degandhi024 Avatar
degandhi024:#7790

>>7789
die Frage war wie es unter Java geht.
So wie in dem Beispiel geht es nicht,
da in Java this() nur dann ausführbar
ist, wenn es als aller Erstes im an-
derem Konstruktor gerufen wird.
(muss man wissen)

wiljanslofstra Avatar
wiljanslofstra:#7791

>>7788

Glaube nicht, dass es wie in deinem Beispiel geht. Würde die Magie in eine Factory auslagern. Die anderen beiden Konstruktoren funktionieren ja.

ggavrilo Avatar
ggavrilo:#7792

>>7788
Geht nischt. Konstruktoren aus Konstruktoren aufrufen geht nur aus der ersten Zeile des Konstruktors.

/prog/ hätte es dafür aber nicht gebraucht. https://www.google.de/search?q=calling+constructor+from+another+constructor+java

vickyshits Avatar
vickyshits:#7795

>>7792
Das das nicht geht, war mir ohne google klar, deswegen kam die Frage.

>>7791
Danke. Werde mich in der Fabrik umschauen.

andyisonline Avatar
andyisonline:#7796

>>7788
Schon mal was von Factory-Pattern gehört? Mir fällt kein Beispiel ein indem mehrere Konstruktoren die sich gegenseitig aufrufen sinnvoller sein sollten als eine Factory die eben diese "Magie" macht.

davidtoltesy Avatar
davidtoltesy:#7812

>>7796
Local Reasoning.
Wenn der Code über mehrere Dateien verteilt ist, ist er schlechter lesbar + wartbar.
Keep simple things simple.

C# und C++ (glaube ab C++11) z.B. unterstützen das.
Java ist einfach minderwertig.

kosmar Avatar
kosmar:#7820

>>7812
Kannst die Factory auch als X.Factory definieren statt als XFactory. Oder die simplere Variante von Factories: ein paar statische Methoden auf X nach dem Schema X.createX() (möglichst mit etwas aussagekräftigerer Benennung)

rcass Avatar
rcass:#7821

Obligatorische Java-Säge

jqueryalmeida Avatar
jqueryalmeida:#7822

>>7812
Erzähl das mal deinem Exceptionhandling. Raten ob da ein Fehlerfall vorliegen könnte sorgt nämlich auch nicht gerade für wart- und lesbaren Code.

_kkga Avatar
_kkga:#7833

>>7830
Also sagst du auch Factory-Pattern?

alagoon Avatar
alagoon:#7840

Ich suche eine 2D Struktur, eine Art 2 dimensionales Array, von der ich alle Elemente in einer bestimmten Umgebung um einen Element rauspopeln könnte? (Also nicht so, dass alle Elemtente dafür angefasst werden müssten)

anass_hassouni Avatar
anass_hassouni:#7846

in etwa so etwas

kurafire Avatar
kurafire:#7849

>>7846
Was genau heißt "rauspopeln"?
Löschen oder einfach nur effizient finden können?
Ist der "Mengenauschnitt" immer kreisförmig wie im Bild?

anhskohbo Avatar
anhskohbo:#7850

>>>7846
Also bei dem Kreis hier kannst du ja die Kandidaten a priori auf ein Quadrat rund um den Kreis eingrenzen.
Das sollte schon mal besser sein als alle Elemente anzupacken.

herrhaase Avatar
herrhaase:#7854

>>7849
>>7850

Also, die Maske ist erst mal ein Kries, dass kann man eigentlich sehr gut mit Kreisformel 1 = x² + y² rausfinden:

boolean isdrin(int x, int y, int xa, int ya, int radius){
  int delta_x = abs(xa - x);
  int delta_y = abs(ya - y);
  int ma = delta_x*delta_x + delta_y*delta_y;
  if ( ma < radius * radius) {
    return true;   
  } else {
    return false;
  }
}


Mit Rauspöpeln meine ich, dass ich die Punkte in der Maske gern löschen oder bearbeiten möchte, sodass diese ihre Koordinaten verändern könnten.
Bis jetzt habe ich einen zwei dimensionalen Array von ArrayListen (in die Punke eingefügt werden) aufgebaut. Wenn ein Punkt, seine Koordinaten ändert, wird er aus der Liste entfernt und der Passenden Liste im 2D Array zugefügt.

Das ist schon ein wenig umständlich, diese Listen in Arrays zu verwalten, aber ich denke nicht, dass es eine leichtere Methode dafür gibt.

chrisvanderkooi Avatar
chrisvanderkooi:#7855

>>7846
Frickelbernd würde die Fläche in ein Raster aufteilen und bei jedem Umsetzen/Neusetzen eines Punktes schauen und speichern, in welchem Raster er ist. Wenn das Raster schon "genau genug" ist - sehr schön. Wenn nicht, kann man erst prüfen, welche Quadrate den Ausschnitt schneiden und dann ausschließlich in diesen Quadraten prüfen. Je nach dem, wie häufig sich die Punkte bewegen (und du folglich prüfen musst, in welchem Quadrat sie sich danach befinden) und wie oft du schauen musst, welche Punkte in welcher geometrischen Figur sind, ist das sehr viel effizienter zumindest gefühlt, als alle anzufassen. Im Endeffekt wirst du aber nicht drumrum kommen, viel mehr anzufassen, als du eigentlich möchtest. Alle Angaben ohne Gewähr

ah_lice Avatar
ah_lice:#7856

>>7854
Okay, vergiss, was ich (>>7855) gesagt habe...

bighanddesign Avatar
bighanddesign:#7857

>>7855
>>7856
Ja, genau so ist mein naiver Ansatzt, die Punkte bei jeder Iteration grob vorsortieren indem ich die grob in das 2D Array verstaue.

karsh Avatar
karsh:#7858

>>7857
Benutz doch einen Quadtree.
https://en.wikipedia.org/wiki/Quadtree

Neuste Fäden in diesem Brett: