我想打印一些真值表作为学校的任务的一部分。 我怎样才能生成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
等等。 我一直在试图使用递归来实现它,但我只是无法得到它的权利。
我想打印一些真值表作为学校的任务的一部分。 我怎样才能生成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
等等。 我一直在试图使用递归来实现它,但我只是无法得到它的权利。
这里是我拿上你的问题,所有书面不错,在小班紧,只是复制/粘贴
注意我是如何使用模2π(%符号),以获得0和1个的从环路指数
public class TruthTable {
private static void printTruthTable(int n) {
int rows = (int) Math.pow(2,n);
for (int i=0; i<rows; i++) {
for (int j=n-1; j>=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<<n) ; i++) {
String s = Integer.toBinaryString(i);
while (s.length() != 3) {
s = '0'+s;
}
System.out.println(s);
}
递归的魔力:
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<<n);i++) { String binaryRep = Integer.toBinaryString(i); while (s.length() != n) { binaryRep = '0'+binaryRep; } System.out.println(s); } }
您可以进行使用递归也:
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);
}
}
一个更长的时间,以你的问题
import java.util.Scanner;
public class tt{
boolean arr[][];
boolean b=false;
boolean[][] printtt(int n){
for(int i=0;i<n;i++){
for(int j=0;j<(Math.pow(2,n));j++){
if(j<Math.pow(2,n-1)){
arr[j][i]=b;
}
else{
arr[j][i]=!b;
}
}
}
return(arr);
}
public static void main(String args[]){
Scanner sc=new Scanner(System.in);
System.out.println("Input values count");
tt ob=new tt();
int num=sc.nextInt();int pownum=(int)Math.pow(2,num);
boolean array[][]=new boolean[pownum][num];
array=ob.printtt(num);
for(int i=0;i<num;i++){
for(int j=0;j<(Math.pow(2,num));j++){
System.out.println(array[j][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开始排的数学可能会略有变化。
此位....
如果((行-1)%的翻转== 0)
会成为....
如果(行%的翻转== 0)