J'essaie d'imprimer des tables de vérité dans le cadre d'une affectation scolaire. Comment puis-je générer une table de vérité de taille dynamique en Java?
de sorte que et ainsi de suite. J'ai essayé de la mettre en œuvre à l'aide de la récursion, mais je ne peux tout simplement pas le faire correctement. P> p> printtruthable (1) code> imprime: p>
printtruthable ( 3) code> impression: p>
8 Réponses :
Si vous regardez ce que vous générez, il semble compter en binaire. Vous allez compter jusqu'à 2 ^ (n) - 1 en binaire et cracher les bits. P>
Ce n'est pas un Table de vérité em> - plutôt, c'est une table de chiffres binaires. Vous pouvez utiliser la méthode INTEGER.TOBARYSTRAING JAVA'S CODE> pour générer les zéros et ceux dont vous avez besoin; L'insertion d'espaces doit être triviale.
int n = 3;
for (int i = 0 ; i != (1<<n) ; i++) {
String s = Integer.toBinaryString(i);
while (s.length() != 3) {
s = '0'+s;
}
System.out.println(s);
}
Pour le rendre dynamique, vous devez remplacer s.length ()! = 3 code> avec
S.Length ()! = N code>
La magie de la récursion:
Voici mon problème sur votre problème, tous écrits bien et serré dans une petite classe, il suffit de copier / coller
remarquer comment j'ai utilisé MODULO2 (% signe) pour obtenir 0 et 1 des indices de boucle p>
La table de vérité est la base de la représentation binaire du nombre mais sans éliminer les avantages de zéro alors ce que vous feriez est de boucler de 0 à (1 XXX PRE>
Vous pouvez également utiliser la récursion également: P>
public void generateRecursively(int i , int n){ if(i==(1<<n)) return; else{ String temp = Integer.toBinaryString(i); while(temp.length()<n){ temp = '0'+temp; } System.out.println(temp); generateRecursively(i+1,n); } }
Dans la fonction non récursive, il devrait être 'alors que (BinaryRep.Length () ...', ainsi que 'System.Out.println (Binaryrep);' (Binaryrep au lieu de S).
une prise plus longue à votre problème
Je devais faire quelque chose de similaire récemment, sauf que le projet était de générer une table de vérité pour une expression logique donnée. C'est ce que j'ai créé pour avoir attribué des variables indépendantes leurs valeurs de vérité.
column = 0; while (column < numVariables) { state = false; toggle = (short) Math.pow(2, numVariables - column - 1); row = 1; while (row < rows) { if ((row -1)%toggle == 0) state = !state; if (state) truthTable[row][column] = 'T'; else truthTable[row][column] = 'F'; row++; } column++; }
Ce programme simple stocke votre table de vérité de tout nombre donné d'entrées dans un tableau INT et l'imprime.
import java.util.Scanner; public class Main{ public static class TruthTable { public static int rows; public static int nodes; public static int[][] tt = new int[0][0]; TruthTable(int n) { this.nodes = n; this.rows = (int) Math.pow(2,n); tt = new int[rows][nodes]; for (int i=0; i<rows; i++) { for (int j=n-1; j>=0; j--) { tt[i][j] = (i/(int) Math.pow(2, j))%2; } } } void printTable(){ for (int i=0; i<rows; i++) { for (int j=nodes-1; j>=0; j--) { System.out.printf("%d ", tt[i][j]); } System.out.println(); } } } public static void main(String[] args) { Scanner myObj = new Scanner(System.in); System.out.println("Enter Size of Population: "); int numberOfNodes = myObj.nextInt(); TruthTable myTable = new TruthTable(numberOfNodes); //TruthTable.printTruthTable(3); System.out.println(); myTable.printTable(); }