2013-09-03 5 views
2

Всем, кому было интересно, есть ли простой способ преобразования истинных и ложных значений этой программы Java в 1 и 0, без слишком большого ручного труда ?. Я решил добавить тип данных «byte» и иметь два отдельных значения переменных 1 и 0 и вводить их вручную в код, но есть ли более простой способ?Изменение таблицы истинности логического оператора

public class LogicalOpTable1 { 

public static void main(String args[]) { 

     boolean p, q; 


     System.out.println("P\tQ\tAND\tOR\tXOR\tNOT"); 

     p = true; q = true; 
     System.out.print(p + "\t" + q +"\t"); 
     System.out.print((p&q) + "\t" + (p|q) + "\t"); 
     System.out.println((p^q) + "\t" + (!p)); 

     p = true; q = false; 
     System.out.print(p + "\t" + q + "\t"); 
     System.out.print((p&q) + "\t" + (p|q) + "\t"); 
     System.out.println((p^q) + "\t" + (!p)); 

     p = false; q = true; 
     System.out.print(p + "\t" + q + "\t"); 
     System.out.print((p&q) + "\t" + (p|q) + "\t"); 
     System.out.println((p^q) + "\t" + (!p)); 

     p = false; q = false; 
     System.out.print(p + "\t" + q + "\t"); 
     System.out.print((p&q) + "\t" + (p|q) + "\t"); 
     System.out.println((p^q) + "\t" + (!p)); 
    } 

} 
+1

В простейшем случае вы можете использовать 'p? 1: 0', т. Е. Тернарный оператор. Вы можете пойти дальше и добавить метод утилиты, который обертывает оператора. –

+0

@BoristheSpider Вы должны написать это как ответ. – Fildor

+0

Это из «руководства для начинающих Java 5-го издания», я просто скопировал код. В следующий раз, когда у меня возник вопрос, я попытаюсь упростить код. Все ответы действительно информативны, спасибо. – user2742001

ответ

1

В Java boolean не конвертированы в int (1 или 0). Взгляните на this

В качестве альтернативы вы можете использовать BooleanUtils от Apache here

+0

Вы имеете в виду, что «Boolean не имеет методов конвертации». Конечно, вы можете «b? 1: 0». Представление зависимости для меня кажется излишним для меня. – Fildor

+0

Я имел в виду не конвертируемый без утверждения if. Эта зависимость для простоты. Вы можете создать свой собственный метод утилиты :) –

2

же код повторно используется. Создайте простой метод, передав логические значения в качестве аргументов.

Method creation

public static void main(String args[]) 
    { 
     System.out.println("P\tQ\tAND\tOR\tXOR\tNOT"); 

     Sample sample = new Sample(); 
     sample.display(true, true); 
     sample.display(true, false); 
     sample.display(false, true); 
     sample.display(false, false); 

    } 

    private void display(boolean p, boolean q) 
    { 
     System.out.print(p + "\t" + q + "\t"); 
     System.out.print((p & q) + "\t" + (p | q) + "\t"); 
     System.out.println((p^q) + "\t" + (!p)); 
    } 
0

Этот вопрос, как представляется, мнение, основанное. Если вы заботитесь в основном о форме презентации, то ИМХО простейшим будет ваш путь, о котором идет речь, -> изменение p и q целым числам. Вам нужно было бы изменить способ вычисления NOT с !p на что-то вроде 1-p или 1^p, потому что нет ни одного байтового оператора NOT.

Ваш код может выглядеть

private static void printRow(int p, int q) { 
    System.out.print(p + "\t" + q + "\t"); 
    System.out.print((p & q) + "\t" + (p | q) + "\t"); 
    System.out.println((p^q) + "\t" + (1 - p)); 
} 

public static void main(String args[]) throws Exception { 

    System.out.println("P\tQ\tAND\tOR\tXOR\tNOT"); 

    printRow(1, 1); 
    printRow(1, 0); 
    printRow(0, 1); 
    printRow(0, 0); 
} 

выход:

P Q AND OR XOR NOT 
1 1 1 1 0 0 
1 0 0 1 1 0 
0 1 0 1 1 1 
0 0 0 0 0 1 
2

У вас есть много дублирования кода. Никогда copy paste, Всегда создавать методы. Это сделает ваш код доступным и читабельным. Даже в простом упражнении это всегда хорошая практика.

Самый простой способ печати 1 или 0 - использовать тернарный оператор, boolean ? 1 : 0 сделает трюк в очень немногих символах.

Теперь, разделив свой код в методы и применение тройного оператора мы имеем:

public static void main(String args[]) { 

    System.out.println("P\tQ\tAND\tOR\tXOR\tNOT"); 
    System.out.println(row(true, true)); 
    System.out.println(row(true, false)); 
    System.out.println(row(false, true)); 
    System.out.println(row(false, false)); 
} 

private static String row(final boolean p, final boolean q) { 
    return tabDelimited(p, q) + tabDelimited(p & q, p | q) + tabDelimited(p^q, !p); 
} 

private static String tabDelimited(final boolean a, final boolean b) { 
    return (a ? 1 : 0) + "\t" + (b ? 1 : 0) + "\t"; 
} 

Немного лучше, вы согласитесь?

Выход:

P Q AND OR XOR NOT 
1 1 1 1 0 0 
1 0 0 1 1 0 
0 1 0 1 1 1 
0 0 0 0 0 1 

Вы можете сделать всю партию чуть менее жестко закодированной делая tabDelimited метод печати любого количества boolean с:

public static void main(String args[]) { 

    System.out.println("P\tQ\tAND\tOR\tXOR\tNOT"); 
    System.out.println(row(true, true)); 
    System.out.println(row(true, false)); 
    System.out.println(row(false, true)); 
    System.out.println(row(false, false)); 
} 

private static String row(final boolean p, final boolean q) { 
    return tabDelimited(p, q, p & q, p | q, p^q, !p); 
} 

private static String tabDelimited(final boolean... toPrint) { 
    if (toPrint.length == 0) { 
     return ""; 
    } 
    final StringBuilder sb = new StringBuilder(); 
    sb.append(toPrint[0] ? 1 : 0); 
    for (int i = 1; i < toPrint.length; ++i) { 
     sb.append("\t").append(toPrint[i] ? 1 : 0); 
    } 
    return sb.toString(); 
} 
0
public class Chapter2 { 

    public static void main(String[] args) { 
     System.out.println("P\tQ\tAND\tOR\tXOR\tNOT"); 
     Compare(true ,true); 
     Compare(true ,false); 
     Compare(false ,true); 
     Compare(false ,false); 
    } 
    static void Compare(boolean p, boolean q) { 
     System.out.println((p?0:1) + "\t" + (q?0:1) +"\t"+((p&q)?0:1) + "\t" + 
      ((p|q)?0:1) + "\t" +((p^q)?0:1) + "\t" + ((!p)?0:1)); 
    }  
} 
0

Я думаю, это способ сделать это, так как в этой части книги методы:? и т. д., и даже если еще не охвачены:

System.out.print(p + "\t" + q + "\t" + (p * q) + "\t"); 
if(p != q) System.out.println((p + q) + "\t" + (p + q) + "\t" + q); 
if((p == q) & (p == 1)) System.out.println(p + "\t0\t0"); 
if((p == q) & (p == 0)) System.out.println(p + "\t0\t1"); 
Смежные вопросы