Hi,
es ist zwar in Java aber ich denke das macht keinen großen unterschied.
Ich möchte testen, ob die Zahl gerade ist, aber irgendwie springt er nicht in die if-anweisung.
for (int i = 0; i < 64; i++) {
if (i%2 == 1) {
flaeche.setBackground(Color.black);
frame.add(flaeche);
}
else {
frame.add(flaeche);
}
}
Danke!
Hallo MisterXY,
mit i%2 == 1 testest du, ob die Zahl ungerade ist, aber sonst ist es ok.
herbivore
Viell. habe ich denn dann nen denkfehler drin, denn ich möchte nen Schachbrett erstellen, aber irgendwie erhalte ich in der ersten Reihe nur Schwarze und in allen anderen Reihen nur weiße Felder.
public class SchachbrettMuster extends java.awt.Frame {
public static void main(String[] args) {
Frame frame = new Frame();
frame.setSize(800, 800);
Canvas flaeche = new Canvas();
flaeche.setSize(8, 8);
for (int i = 0; i < 64; i++) {
if (i%2 == 1) {
flaeche.setBackground(Color.black);
frame.add(flaeche);
}
else if (i == 1) {
flaeche.setBackground(Color.black);
frame.add(flaeche);
}
else {
frame.setBackground(Color.white);
frame.add(flaeche);
}
}
GridLayout layout = new GridLayout(8, 8);
frame.setLayout(layout);
frame.setVisible(true);
}
}
Ist aber Java 🙂
Hallo MisterXY,
das 'else if' ist zuviel.
herbivore
Hallo MisterXY,
sorry, aber es liegt daran. Aber das alleine reicht nicht, du musst noch dafür sorgen, dass in ungraden Zeilen die ungeraden und in geraden die geraden Felder schwarz werden.
herbivore
Habe den else - if Zweig herausgenommen und das selbe Problem besteht weiterhin.
Ich weise doch mit setBackground(Color.black) die farben der Felder zu.
Hallo MisterXY,
mit
for (int i = 0; i < 64; i++) {
if (i%2 == 1) {
flaeche.setBackground(Color.black);
} else {
frame.setBackground(Color.white);
}
frame.add(flaeche);
}
werden die Felder abwechseln schwarz und weiß gefärbt. Da kannst du mich wohl auch nur schwer von Gegenteil überzeugen. Jetzt musst du nur noch, wie ich schon sagte, dafür sorgen, dass das bei graden und ungraden Zeilen wechselt.
Dafür könnte die Abfrage z.B. so aussehen (ungetestet):
(i+(i+1)/8)%2 == 1
Wenn dadurch das linke untere Feld weiß statt schwarz ist, nimm
(i+(i+1)/8)%2 == 0
herbivore
Hallo zusammen!
Da ich Schachspieler bin, interessiert mich das schon ein Wenig 😉
Aber ich frage mich immer noch, warum so ein kompliziertes Zählverfahren gewählt worden ist.
Wenn ich das Schachbrett in X und Y Koordinaten unterteile, dann kann ich doch mit einer einfachen Abfrage feststellen, ob Schwarz oder Weiß:
if ( (x%2 == 0) || (y%2 == 0) )
{
// weiß
}
else
{
// schwarz
}
Jetzt brauch ich nur noch eine ineinandergeschachtelte for Schleife, dass ich insgesamt auf die 64 Felder komme:
for (x=1; x <= 8; x++)
{
for (y=1; y <= 8; y++)
{
// hier Feld erstellen
}
}
Oder sehe ich das irgendwie falsch?
Ciao
Norman-Timo
A: “Wie ist denn das Wetter bei euch?”
B: “Caps Lock.”
A: “Hä?”
B: “Na ja, Shift ohne Ende!”
Hallo norman_timo,
Oder sehe ich das irgendwie falsch?
Ja! 😃 Dein Schachspiel wird überwiegend weiß sein.
Aber ich frage mich immer noch, warum so ein kompliziertes Zählverfahren gewählt worden ist.
Kompliziert?
herbivore
Original von herbivore
Kompliziert?herbivore
So ist's kompliziert 😁
//Anzahl Felder
int intAnzFelder=64;
//Wieviele Felder pro Linie
int intAnzProLine=(int)Math.Sqrt((double)intAnzFelder);
//Gegenprüfung
if (Math.Pow(intAnzProLine,2D)!=intAnzFelder)
{
throw new Exception("Das ist aber ein komisches Quadrat");
}
//Wieviele haben auf 2 Linien Platz (ab dann wiederholt sich ja das ganze)
int intAnzDoppelt=intAnzProLine*2;
for (int i=0;i<intAnzFelder;i++)
{
string strColor=(i%intAnzDoppelt>=intAnzProLine) ^ i%2==0 ?"Black":"White";
System.Diagnostics.Debug.WriteLine(string.Format("Feld: {0} {1}",i.ToString(),strColor));
}
Früher war ich unentschlossen, heute bin ich mir da nicht mehr so sicher...
studier es halt 🙂 es ist übrehaupt nicht kompliziert, sondern genial 🙂
Original von .unreal
studier es halt 🙂 es ist übrehaupt nicht kompliziert, sondern genial 🙂
Find ich auch 8) aber vorallem Anfänger habe nach dem Lesen einen Knoten in den Hirnwindungen 😁
Früher war ich unentschlossen, heute bin ich mir da nicht mehr so sicher...
mit nur anschauen wird man nicht schlau, hirn einschalten und dann klappts... ich merk das wenn ich müde bin.. dann guck ich den code nur an, studiere aber nicht viel, kapiere darum auch fast nix (:
Original von .unreal
mit nur anschauen wird man nicht schlau, hirn einschalten und dann klappts...
Oder Step by Step im Debugger anschauen dann wird's auch klar 🙂
Früher war ich unentschlossen, heute bin ich mir da nicht mehr so sicher...
ich glaube, dass er mit kompliziert die formel meinte... diese kann man nicht sehr gut mit dem debugger verfolgen...
Original von .unreal
ich glaube, dass er mit kompliziert die formel meinte... diese kann man nicht sehr gut mit dem debugger verfolgen...
Er hat sich wohl eher auf den vorher geposteten Code bezogen.... und ich habe das Kompliziert ? als Herausforderung gesehen die ganze Formel mit nur einem Loop auf einer Zeile darzustellen....
Früher war ich unentschlossen, heute bin ich mir da nicht mehr so sicher...
Hallo Programmierhans,
hm, irgendwie verstehe ich das nicht mehr ganz. Mein Code von oben arbeitet auch nur mit einer Schleife und quasi einer Zeile in der Schleife (denn statt meiner if-Abfrage könnte man auch eine bedingte Bewertung verwenden und schwupps, wäre es eine Zeile). Und irgendwie erscheint mir auch mein Code einfacher als deiner - ok das ist natürlich Ansichtssache. Also ist dein Code - nach meiner Einschätzung - weder kürzer noch einfacher. Wo war da die Herausforderung?
Da ich weiß, dass du wenig Unsinn machst, übersehe ich wohl was. Ich weiß nur nicht was.
herbivore
@herbivore
Deine Lösung ist natürlich mindestens so elegant wie meine 🙂... mich hat einfach das +1 irgendwie gestört (man möge mir dies verzeihen)...
string strColor=(i+(i+1)/intAnzProLine)%2 == 1 ?"Black":"White";
Wobei ich den Sinn der Formel auch erst im zweiten Rutsch erkannt habe.
Es gibt so viele Variationen welche alle zum Ziel führen 🙂
string strColor=(i+1)/intAnzProLine %2 == 1 ^ i%2==1?"Black":"White";
Früher war ich unentschlossen, heute bin ich mir da nicht mehr so sicher...
Hallo Programmierhans,
mich hat einfach das +1 irgendwie gestört
Damit hast du ganz recht! Das +1 ist falsch. 😃
So müsste es richtig sein: (i+i/8)%2 == 1
herbivore