Java-Programm: Wahrheitstabelle?

1 Antwort

Also nach derzeitigem Stand hapert es wohl schon bei der Syntax. Bei dir fehlen bei die Semikolons am Ende mehrerer Anweisungen, die jeweils in einem if- oder else-Körper liegen. Außerdem muss die Bedingung von if in Klammern gruppiert werden.

if (i == 0) {
  b = false;
}
else b = true;

Zudem müssen die Zählervariablen (i, j, k) erst deklariert werden, bevor du sie einsetzen kannst:

for (int i = 0; // ...

Hinsichtlich des Codes würde ich dir raten, den primitiven Datentyp boolean einzusetzen (die Wrapper-Klasse benötigst du vorerst noch nicht, bin ich der Meinung) und auch für den else-Körper geschweifte Klammern einzusetzen. Andererseits könnte man hier auch stark verkürzen:

a = i != 0;

Das Ergebnis dieses Vergleichs wäre ja ebenso ein boolscher Typ.

Zu deiner Aufgabe:

Ich würde mir an deiner Stelle für jeden Operator eine Funktion schreiben, die die notwendigen Werte berechnet, vielleicht sogar auch schon ausgibt:

public static void printOrTable(boolean[] variables) {
  // ...
}

public static void printAndTable(boolean[] variables) {
  // ...
}

public static void printXorTable(boolean[] variables) {
  // ...
}

In der main müsstest du dir wohl erst einmal ein Array boolschen Typs anlegen, in dem die drei Startwerte für a, b und c gegeben sind. Dieses wird bei Aufruf der einzelnen Methoden jeweils übergeben. Davor könntest du dir noch den Tabellenkopf ausgeben lassen. Lagere das ebenso in eine eigene Methode aus.

public static void printTableHead(int numberOfVariables, String operator) {
  for (char letter = 97; letter < 97 + numberOfVariables; ++letter) {
      System.out.print(letter + "\t");
  }

  System.out.print(operator);
}       

Je Methode ist es nun eigentlich nur notwendig, die jeweiligen Werte miteinander zu kombinieren. Schreibe dir dazu erst alle möglichen Kombinationen auf (in Array-Schreibweise, also variables[0] OR variables[1], u.ä.) und prüfe dann, inwiefern du diese zusammenfassen könntest.