Generating truth tables in Java

后端 未结 7 519
悲哀的现实
悲哀的现实 2021-01-02 16:42

I\'m trying to print some truth tables as part of a school assignment. How can I generate a dynamic size truth table in Java?

So that printTruthTable(1)

相关标签:
7条回答
  • 2021-01-02 16:59

    here's my take on your problem, all written nice and tight in a small class, just copy/paste

    notice how I used modulo2 (the % sign) to get 0's and 1's from the loop indices

    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
        }
    }
    
    0 讨论(0)
  • 2021-01-02 16:59

    The magic of recursion:

    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);
            }
        }
    }
    
    0 讨论(0)
  • 2021-01-02 17:00

    the truth table is base on the binary representation of the number but without removing leading zero's so what you would do is to loop from 0 to (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);
        }
    }
    

    you can make that using recursion also :

    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);
        }
    }
    
    0 讨论(0)
  • 2021-01-02 17:00

    A longer take to your problem

    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]);
                    }
            }
        }
        }
    
    0 讨论(0)
  • 2021-01-02 17:02

    If you look at what you're generating, it appears to be counting in binary. You're going to be counting to 2^(n) - 1 in binary and spitting out the bits.

    0 讨论(0)
  • 2021-01-02 17:07

    This is not a truth table - rather, it's a table of binary numbers. You can use Java's Integer.toBinaryString method to generate the zeros and ones that you need; inserting spaces should be trivial.

    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);
    }
    
    0 讨论(0)
提交回复
热议问题