2009年07月09日

【1日1Commons】BooleanUtilsのxor

// JRE 1.6.0_07
// Commons Lang 2.4
// org.apache.commons.lang.BooleanUtils.xor
// boolean配列の排他的論理和
// tag boolean xor


boolean bool;

// 排他的論理和を取ってみる
// trueとtrueを設定すれば、もちろんfalseになる
boolean[] barray1 = {true, true};
bool = BooleanUtils.xor( barray1 );
System.out.println( bool );
  // => false

// true, true, trueの場合
boolean[] barray2 = {true, true, true};
bool = BooleanUtils.xor( barray2 );
System.out.println( bool );
  // => false

// 複数の排他的論理和は、true が奇数個なら trueだと思っていたのだが、
// 上の処理の結果を見ると、どうやら違うらしい

// xorの中の処理を見ると、配列の中にtrueが1つのみの場合はtrue,
// それ以外はfalseを返している

// JavaDoc見たら、「a set of booleans」だそうです。。。
// Performs an xor on a set of booleans.
// BooleanUtils.xor(new boolean[] { true, true })   = false
// BooleanUtils.xor(new boolean[] { false, false }) = false
// BooleanUtils.xor(new boolean[] { true, false })  = true