Создание «логического исключающего или» оператора в Java - PullRequest
257 голосов
/ 07 апреля 2009

Замечания:

В Java есть логический оператор AND.
У Java есть логический оператор ИЛИ.
В Java есть логический оператор NOT.

Проблема:

В Java нет логического оператора XOR, в соответствии с солнцем . Я хотел бы определить один.

Определение метода:

Как метод, он определяется следующим образом:

public static boolean logicalXOR(boolean x, boolean y) {
    return ( ( x || y ) && ! ( x && y ) );
}


Вызов метода:

Этот метод вызывается следующим образом:

boolean myVal = logicalXOR(x, y);


Использование оператора:

Я бы предпочел оператор, используемый следующим образом:

boolean myVal = x ^^ y;


Вопрос:

Я не могу ничего найти о том, как определить новый оператор в Java. С чего мне начать?

Ответы [ 17 ]

2 голосов
/ 24 октября 2012

Вы можете использовать Xtend (Инфиксные операторы и перегрузка операторов) , чтобы перегрузить операторы и «остаться» на Java

1 голос
/ 04 апреля 2018

Логический монопольный или в Java называется !=. Вы также можете использовать ^, если хотите запутать своих друзей.

1 голос
/ 04 августа 2017

Я использую очень популярный класс "org.apache.commons.lang.BooleanUtils"

Этот метод проверен многими пользователями и безопасен. Повеселись. Использование:

boolean result =BooleanUtils.xor(new boolean[]{true,false});
1 голос
/ 06 июня 2017

A и B должны быть логическими значениями, чтобы сделать! = Такими же, как xor, чтобы таблица истинности выглядела одинаково. Вы также можете использовать! (A == B) lol.

0 голосов
/ 20 октября 2017

вам нужно переключиться на Scala для реализации ваших собственных операторов

пример трубы

0 голосов
/ 21 октября 2016

Вот пример:

Если даны 2 значения типа int, вернуть true, если одно отрицательно, а другое положительно. За исключением случаев, когда параметр «отрицательный» имеет значение «истина», возвращает значение «истина», только если оба значения являются отрицательными.

    public boolean posNeg(int a, int b, boolean negative) {
      if(!negative){
        return (a>0 && b<0)^(b>0 && a<0);
      }
      else return (a<0 && b<0);
    }
0 голосов
/ 09 марта 2015

Поскольку логический тип данных хранится как целое число, битовый оператор ^ функционирует как операция XOR, если используется с логическими значениями.

//©Mfpl - XOR_Test.java

    public class XOR_Test {
        public static void main (String args[]) {
            boolean a,b;

            a=false; b=false;
            System.out.println("a=false; b=false;  ->  " + (a^b));

            a=false; b=true;
            System.out.println("a=false; b=true;  ->  " + (a^b));

            a=true;  b=false;
            System.out.println("a=true;  b=false;  ->  " + (a^b));

            a=true; b=true;
            System.out.println("a=true; b=true;  ->  " + (a^b));

            /*  output of this program:
                    a=false; b=false;  ->  false
                    a=false; b=true;  ->  true
                    a=true;  b=false;  ->  true
                    a=true; b=true;  ->  false
            */
        }
    }
...