用Java生成真值表

我正在尝试打印一些真值表作为学校作业的一部分。 如何在Java中生成动态大小的真值表?

这样printTruthTable(1)打印:

 0 1 

printTruthTable(3)打印:

 0 0 0 0 0 1 0 1 0 0 1 1 1 0 0 1 0 1 1 1 0 1 1 1 

等等。 我一直在尝试使用递归来实现它,但我无法做到正确。

这是我对你的问题的看法,所有写得很好而且很小,只需要复制/粘贴

注意我是如何使用modulo2(%符号)从循环索引中获取0和1的

 public class TruthTable { private static void printTruthTable(int n) { int rows = (int) Math.pow(2,n); for (int i=0; i=0; j--) { System.out.print((i/(int) Math.pow(2, j))%2 + " "); } System.out.println(); } } public static void main(String[] args) { printTruthTable(3); //enter any natural int } } 

这不是真值表 – 相反,它是二进制数表。 您可以使用Java的Integer.toBinaryString方法生成您需要的零和一个; 插入空格应该是微不足道的。

 int n = 3; for (int i = 0 ; i != (1< 

递归的魔力:

 public static void main(String args[]) { int size = 3; generateTable(0, size, new int[size]); } private static void generateTable(int index, int size, int[] current) { if(index == size) { // generated a full "solution" for(int i = 0; i < size; i++) { System.out.print(current[i] + " "); } System.out.println(); } else { for(int i = 0; i < 2; i++) { current[index] = i; generateTable(index + 1, size, current); } } } 

如果你看看你正在生成什么,它似乎是以二进制计算。 你将以二进制计数到2 ^(n) – 1并吐出这些位。

真值表是基于数字的二进制表示,但没有删除前导零,所以你要做的是从0循环到(1 <

 public void generate(int n){ for (int i=0 ;i!=(1< 

你也可以使用递归来实现:

 public void generateRecursively(int i , int n){ if(i==(1< 

更长的问题

 import java.util.Scanner; public class tt{ boolean arr[][]; boolean b=false; boolean[][] printtt(int n){ for(int i=0;i 

最近我不得不做类似的事情,除了项目是为给定的逻辑表达式生成真值表。 这就是我想出的为自己的真值赋值的独立变量。

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

这假设您的第一行填充了变量名和子表达式。 如果你想从第0行开始,数学可能会略有改变。

这一点....

if((row -1)%toggle == 0)

会成为....

if(row%toggle == 0)

Interesting Posts