создайте таблицу истинности и проверьте, что происходит
aSmile bSmile
true true
true false
false true
false false
case 1: monkeyTrouble (true, true)
if (aSmile && bSmile) {
return true;
case 2: monkeyTrouble (true , false)
return false
case 3: monkeyTrouble (false, true)
return false
case 4: monkeyTrouble (false, false)
if (!aSmile && !bSmile) {
return true;
, поэтому последний оператор выполняется в двух случаях.