Wie kann ich diesen Code in Java vereinfachen?

5 Antworten

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.

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

boolean b = false;
public void schalte(){
  System.out.println((b = !b) ? "1" : "0");
}

Sehr viel kürzer dürfte kaum gehen.

Terry6170 
Fragesteller
 20.10.2019, 23:15

Danke für die schnelle Antwort, ich denke das ist die kürzeste von allen :)

1
Isendrak  21.10.2019, 10:57
@daseinstein

Nein, das fehlt micht[sic].

Du findest es in diesem Teil:

(b = !b)
1
Terry6170 
Fragesteller
 20.10.2019, 23:44

Könntest du mir nur schnell erklären wie genau "(b = !b)" funktioniert, bzw. wieso du eine Zuweisung anstelle der Bedingung geschrieben hast?

0
Isendrak  21.10.2019, 00:26
@Terry6170

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.

1
oopexpert  21.10.2019, 19:35
@Terry6170

Es gibt in JAVA Anweisungen und Ausdrücke. Das ist eine Schreibweise als Ausdruck.

0

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));
}

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.

Woher ich das weiß:Berufserfahrung – Programmierer