Wie kann ich diesen Code in Java vereinfachen?
boolean b = false;
public void schalte() {
if (b) {
System.out.println("0");
b = false;
}
else {
System.out.print("1");
b = true;
}
}
5 Antworten
![](https://images.gutefrage.net/media/default/user/15_nmmslarge.png?v=1551279448000)
public void schalte() {
String command = b ? "0" : "1";
System.out.print(command);
b = !b;
}
Ungetestet. Zudem könntest du deine Bezeichner (also Variablen und Funktionen) vernünftig benennen und ausserdem wäre es wichtig, wenn du meinen Code nicht nur einfach rauskopierst, sondern wirklich verstehst, was da passiert - ansonsten schreib lieber eine längere Lösung, die du dafür aber auch kapierst.
![](https://images.gutefrage.net/media/user/xxxcyberxxx/1691185806883_nmmslarge__0_0_1230_1230_4dfa4fbf5df5051b1dd22ccc1781adca.png?v=1691185807000)
public void schalte(){
System.out.println(b ? "0" : "1");
b = !b;
}
dann kannst du noch die Variable von außerhalb in die Methode selbst verlagern und den neuen Wert returnen
![](https://images.gutefrage.net/media/user/Isendrak/1555747535308_nmmslarge__0_0_160_160_7f828fad18ee7edb96b8daceedaeeadb.png?v=1555747535000)
boolean b = false;
public void schalte(){
System.out.println((b = !b) ? "1" : "0");
}
Sehr viel kürzer dürfte kaum gehen.
![](https://images.gutefrage.net/media/default/user/11_nmmslarge.png?v=1551279448000)
![](https://images.gutefrage.net/media/default/user/9_nmmslarge.png?v=1551279448000)
![](https://images.gutefrage.net/media/user/Isendrak/1555747535308_nmmslarge__0_0_160_160_7f828fad18ee7edb96b8daceedaeeadb.png?v=1555747535000)
![](https://images.gutefrage.net/media/default/user/9_nmmslarge.png?v=1551279448000)
Könntest du mir nur schnell erklären wie genau "(b = !b)" funktioniert, bzw. wieso du eine Zuweisung anstelle der Bedingung geschrieben hast?
![](https://images.gutefrage.net/media/user/Isendrak/1555747535308_nmmslarge__0_0_160_160_7f828fad18ee7edb96b8daceedaeeadb.png?v=1555747535000)
Ich habe beides gemacht.
In Java (und einigen anderen Sprachen auch) kann man eine Zuweisung als Statement verwenden, dessen Wert dem zugewiesenen Wert entspricht.
Es wird also zuerst b auf "nicht" b gesetzt und dann das Ergebnis direkt in der Bedingung weiterverwendet.
![](https://images.gutefrage.net/media/default/user/9_nmmslarge.png?v=1551279448000)
Es gibt in JAVA Anweisungen und Ausdrücke. Das ist eine Schreibweise als Ausdruck.
![](https://images.gutefrage.net/media/default/user/9_nmmslarge.png?v=1551279448000)
Wenn schon mit Crap-Code nach Crap-Code gefragt wird: Warum dann überhaupt die interne Darstellung von der äußeren Darstellung trennen?
static int b = 0;
public static void schalte(){
System.out.println((b = (b + 1) % 2));
}
![](https://images.gutefrage.net/media/user/Ecaflip/1568983541297_nmmslarge__82_18_325_325_c2d8ea08570e05a6058e64957c3e9ea1.jpg?v=1568983541000)
Kommt drauf an. Wenn der Code alles ist und immer so statisch bleibt, reicht
System.out.print("1");
b = true;
Ich nehme aber mal an, du willst das mehrmals aufrufen, dann kannst du höchstens das 'else' weglassen.
Danke für die schnelle Antwort, ich denke das ist die kürzeste von allen :)