[JavaScript] IF-Statement wird ignoriert?

2 Antworten

Von Experte Babelfish bestätigt

Der Strichpunkt ist da falsch.
Stichpunke schreibt man nur nachdem man eine Funktion oder Zuweisung ausgeführt hat, nicht mitten in einer If-Abfrage.

if (x == 1) {
  f1 = 1;
  b1.setzeHintergrundFarbe(Farbe.GELB);              
} else if (x == 2) {
  f1 = 1;
  b1.setzeHintergrundFarbe(Farbe.GRUEN);             
} else if (x == 3){
  f1 = 1;
  b1.setzeHintergrundFarbe(Farbe.SCHWARZ);              
} else if (x == 4) {
  f1 = 1;
  b1.setzeHintergrundFarbe(Farbe.BLAU);             
}

So muss das.
Bzw. falls du aufgrund der Übersichtlichkeit einzelne ifs willst:

if (x == 1) {
  f1 = 1;
  b1.setzeHintergrundFarbe(Farbe.GELB);              
}
if (x == 2) {
  f1 = 1;
  b1.setzeHintergrundFarbe(Farbe.GRUEN);             
}
if (x == 3){
  f1 = 1;
  b1.setzeHintergrundFarbe(Farbe.SCHWARZ);              
}
if (x == 4) {
  f1 = 1;
  b1.setzeHintergrundFarbe(Farbe.BLAU);             
}

Außerdem gibt es in JavaScript keine Datentypen wie int. Stattdessen gibt es "const" für konstante Werte und "let" für Werte die du mal änderst.

let x = 0;
x = freifelder[random];

müsste es also am Anfang heißen.

Kann man übrigens kürzen zu

const x = freifelder[random];

Falls deine freifelder-Liste 4 Elemente beinhaltet wird deine Zufallszahl-Auswahl ab und zu einen Zugriffsfehler verursachen.

const random = Math.floor(Math.random() * 4 + 1);

Da kann nämlich auch die Zahl 4 rauskommen, welche bei 4 Elementen kein gültiger Index ist. Gültig sind da nur 0 - 3. Das "+ 1" muss also weg. Einfach Math.floor(Math.random() * <Anzahl an Elementen>).

Den Rückgabetyp einer Funktion muss man in JavaScript auch nicht angeben. Und public/private auch nicht. Stattdessen macht man Funktionen so:

function test() {
   ...
}

Konventionen:
- Funktionsnamen schreibt man, wie auch Variablennamen (was du eh schon richtig machst) klein.
- Die geschweifte Klammer { kommt immer in die selbe Zeile.

Woher ich das weiß:Hobby – Programmieren ist mein Hobby & Beruf
verreisterNutzer  29.07.2022, 20:38

es tut mir so unfassbar Leid. Ich weiß nicht wie ersteres übersehen konnte. Manchmal frage ich mich wirklich ob ich nicht geistig behindert bin

0
verreisterNutzer  29.07.2022, 20:41

und danke sehr <33

0
MrAmazing2  29.07.2022, 20:44
@verreisterNutzer

Bitte :D

Hab noch ein paar Sachen ergänzt ^^

Kanns sein, dass du schon ein bisschen Java kannst und dich jetzt an JavaScript versuchst? Weil sieht so aus, der Code ist mehr Java als JavaScript xD

1
verreisterNutzer  29.07.2022, 20:57
@MrAmazing2

och man keine Ahnung. Ich hab in der Schule Informatik, dort machen wir eins vom beidem hahahaha. Ich passe nie auf und kann kaum was bin trzd iwie mit ner 3 durchgekommen. Auf jeden Fall habe ich jetzt Lust aufs programmieren bekommen und da bin ich :)

0
verreisterNutzer  29.07.2022, 21:26
@MrAmazing2

Ich will dich auf keinen Fall nerven, aber ich hätte doch noch eine Frage. Ich brauche für mein Programm auch den Fall das eine Option aus dem Array gestrichen werden soll falls diese schon vorkam.

Ich habe das erst auf eine dumme Weise versucht und mir ist jetzt aufgefallen, dass das ganze gar nicht richtig Sinn macht. Jetzt versuche ich es in dem ich eine vorgekommene Option einfach den Wert z.b 0 gebe und falls 0 aktiviert wird ich die Funktion einfach wiederhole. Wenn ich aber:

 public void Hindernisse()
    {
        int x = 0;
        int random = (int) Math.floor(Math.random() * 36);
        x = freifelder[random];
        if (x == 0)
        {
            Hindernisse();
        }
        if (x == 1)
        {
            f1 = 1;
            b1.setzeHintergrundFarbe(Farbe.BLAU); 
            freifelder[0] = 0;
        }
    }

schreibe kriege ich eine Fehlermeldung. Ist ja auch irgendwo klar, wie könnte ich aber das wiederholen der Funktion in der Funktion umgehen? Einfach mit einer 2ten Funktion, das führt aber wieder zu einer Loop.

0
verreisterNutzer  29.07.2022, 21:32
@verreisterNutzer

vergiss was ich geschrieben habe. Ich sollte das nächste mal GENAU lesen was in der Fehlermeldung steht. Hab mich verlesen xD

0
MrAmazing2  29.07.2022, 21:54
@verreisterNutzer

Ah, das brauch ich immer wenn ich Snake programmiere, beim Apfel-Spawnen :D

Zwei Möglichkeiten:

  1. Schleife, die das ziehen so lange wiederholt, bis eine erlaubte Option gezogen wurde
  2. Du mischt das Array durch. Mit jedem ziehen nimmst und entfernst du dann die erste Zahl. Kannst du dir so vorstellen:

Gemischtes Array: [6,3,8,1,5]
Ziehen: 6. Array ist jetzt nurnoch [3,8,1,5]
Ziehen: 3. Array ist jetzt nurnoch [8,1,5]
Ziehen: 8. Array ist jetzt nurnoch [1,5]
usw.

Ich bevorzuge letztere Option.

Trick wie du das mit nem normalen Array machst:
Wenn du einfach einen index i machst, und den bei jedem mal Ziehen erhöhst, dann kannst du einfach immer die Zahl an der Stelle i vom gemischten Array ausgeben.

Gemischtes Array: [6,3,8,1,5]
gemischtesArray[0] => 6
gemischtesArray[1] => 3
gemischtesArray[2] => 8
usw.

Aber das mischen ist vlt. etwas schwer... Also mach einfach deine Lösung mit der Schleife haha

1

frgt sich erstmal was

freifelder[random] 

ist und zweitens kannst du dir doch einfach die werte mal ausgeben lassen .

ausserdem weiss keiner wann du wie Test aufrufst .


verreisterNutzer  29.07.2022, 21:12

Test wird nur einmalig aufgerufen. Ich habe doch die Möglichen Probleme extra eingegegrenzt.

freifelder ist ein array

0