在Java中生成真值表(Generating truth tables in Java)

2019-06-24 17:03发布

我想打印一些真值表作为学校的任务的一部分。 我怎样才能生成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

等等。 我一直在试图使用递归来实现它,但我只是无法得到它的权利。

Answer 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
    }
}


Answer 2:

这不是一个真值表 -更确切地说,它是二进制数的表。 您可以使用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);
}


Answer 3:

递归的魔力:

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


Answer 4:

如果你看一下你产生什么,这似乎是在二进制计数。 你会被计算2 ^(N) - 1的二进制和随地吐痰位。



Answer 5:

事实表上的数字的二进制表示,但不删除前导零的,所以你会做的是从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);
    }
}


Answer 6:

一个更长的时间,以你的问题

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


Answer 7:

我必须做同样的事情,除了最近的项目是生成一个给定的逻辑表达式的真值表。 这是我想出了分配独立变量的真值。

    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)



文章来源: Generating truth tables in Java