B
B1gF1sh
Gast
Hi an alle.
Ich beschäftige mich jetzt seit ca einer Woche mit Java, und die meisten Fragen die man so am Anfang hat, lassen sich recht schnell beantworten, wenn man nur ein wenig im Internet sucht. Bei folgendem Problem bin ich allerdings ratlos. Java ist die erste object orientierte Sprache für mich (wenn man mal von meinen Programmieranfängen in AHK absieht :O ) und ich bin ziemlich sicher das mit einem besseren Verständnis von Klassen mein Dilemma schnell geklärt wäre.
Genug der Vorrede. Mein Programm soll anhand einem String ein Raster erstellen, welches aus farbigen Quadraten besteht. Den String soll man letztendlich von einer Datei auslesen, die irgendjemand irgendwann mal erstellt hat und sieht beispielsweise so aus:
Die Datei soll desweiteren die Größe der Quadrate und die jeweilige Anzahl in x und y Richting übergeben. Diese Variablen nennen wir mal unitsize, xunitvalue und yunitvalue.
Zu diesem Zweck habe ich mir eine Klasse Drawing erstellt die ein JComponent erzeugt auf welches ich mit der Methode addGridElement aus gegebener Geometry (Position + Größe) und Farbe ein Quadrat zeichne.
Dann wird eine GUI erstellt die die Zeichnung beinhalten soll. Diese wird mit der Methode drawGrid() gefüllt.
Um mich im wesentlichen erst einmal mit der Programm Architektur zu beschäftigen gehe ich von folgenden Konstanten aus:
Demnach sieht drawGrid() so aus:
Zur Hälfte fertig mit Schreiben von drawGrid() ist mir mein Probelm bewusst geworden, weswegen ich zwischendrin aufhörte Anweisung in Beziehung zu meinen Variablen (xunitvalue, yunitvalue und unitsize) zu setzen und stattdessen mit konstanten int Werten weiter gerechnet habe.
Mein Problem ist nun, dass die Anzahl der If-Anweisungen in der Methode drawGrid() ja unmittelbar mit den Werten von xunitvalue und y unitvalue zusammen hängt. Sprich hat mein grid drei Zeilen und vier Spalten funktioniert meine Methode. Allerdings zeigt mir mein Raster nicht mehr das was ich will, wenn sich diese Werte verändern, selbst wenn ich die Ausdrücke in den If-Anweisung mit xunitvalue und yunitvalue in Beziehung setze.
Ich habe auch überlegt ob es für meine Anwendung nicht egal sei, und ich immer von der selben Größe Raster ausgehen kann, also xunitvalue und yunitvalue immer konstant sind. Allerdings soll so ein Raster letzendlich mal hunderte Quadrate in beiden Richtung beinhalten, und es muss eine weniger aufwendige Methode geben Position und Größe der Quadrate zu ermitteln.
Anzahl der If-Anweisung im Farbcheck ist mir egal, da die Anzahl and möglichen Farben überschaubar bleibt.
Ich wäre sehr dankbar für jeden Tip, der mich in die richtige Richtung verweist.
Ich beschäftige mich jetzt seit ca einer Woche mit Java, und die meisten Fragen die man so am Anfang hat, lassen sich recht schnell beantworten, wenn man nur ein wenig im Internet sucht. Bei folgendem Problem bin ich allerdings ratlos. Java ist die erste object orientierte Sprache für mich (wenn man mal von meinen Programmieranfängen in AHK absieht :O ) und ich bin ziemlich sicher das mit einem besseren Verständnis von Klassen mein Dilemma schnell geklärt wäre.
Genug der Vorrede. Mein Programm soll anhand einem String ein Raster erstellen, welches aus farbigen Quadraten besteht. Den String soll man letztendlich von einer Datei auslesen, die irgendjemand irgendwann mal erstellt hat und sieht beispielsweise so aus:
Java:
String map = ("wwwwwggwwwww");
Zu diesem Zweck habe ich mir eine Klasse Drawing erstellt die ein JComponent erzeugt auf welches ich mit der Methode addGridElement aus gegebener Geometry (Position + Größe) und Farbe ein Quadrat zeichne.
Dann wird eine GUI erstellt die die Zeichnung beinhalten soll. Diese wird mit der Methode drawGrid() gefüllt.
Um mich im wesentlichen erst einmal mit der Programm Architektur zu beschäftigen gehe ich von folgenden Konstanten aus:
Java:
xunitvalue = 4;
yunitvalue = 3;
unitsize = 200;
map = ("wwwwwggwwwww");
Java:
public final void drawGrid() {
int r = 0;
int g = 0;
int b = 0;
int x = 0;
int y = 0;
for (int i=0; i<map.length(); i++) {
// check element color
if (map.substring(i, i+1).equals("w")) {
r = 0;
g = 0;
b = 185;
} else {
if (map.substring(i, i+1).equals("g")) {
r = 0;
g = 150;
b = 0;
}
}
//check element geometry y
if (i < xunitvalue) {
y = 0;
} else {
if (i >= xunitvalue && i < (xunitvalue*2)) {
y = unitsize;
} else {
if (i >= xunitvalue*2 && i < xunitvalue*3) {
y = unitsize*2;
}
}
}
//check element geometry x
if (i == 0 || i == 4 || i == 8) {
x = 0;
} else {
if (i == 1 || i == 5 || i == 9) {
x = unitsize;
} else {
if (i == 2 || i == 6 || i == 10) {
x = unitsize*2;
} else {
if (i == 3 || i == 7 || i == 11) {
x = unitsize*3;
}
}
}
}
//add element to the grid
grid.addGridElement(x, y, unitsize, r, g, b);
}
}
Mein Problem ist nun, dass die Anzahl der If-Anweisungen in der Methode drawGrid() ja unmittelbar mit den Werten von xunitvalue und y unitvalue zusammen hängt. Sprich hat mein grid drei Zeilen und vier Spalten funktioniert meine Methode. Allerdings zeigt mir mein Raster nicht mehr das was ich will, wenn sich diese Werte verändern, selbst wenn ich die Ausdrücke in den If-Anweisung mit xunitvalue und yunitvalue in Beziehung setze.
Ich habe auch überlegt ob es für meine Anwendung nicht egal sei, und ich immer von der selben Größe Raster ausgehen kann, also xunitvalue und yunitvalue immer konstant sind. Allerdings soll so ein Raster letzendlich mal hunderte Quadrate in beiden Richtung beinhalten, und es muss eine weniger aufwendige Methode geben Position und Größe der Quadrate zu ermitteln.
Anzahl der If-Anweisung im Farbcheck ist mir egal, da die Anzahl and möglichen Farben überschaubar bleibt.
Ich wäre sehr dankbar für jeden Tip, der mich in die richtige Richtung verweist.