2012-05-19 3 views
0

Эй, ребята, мне было интересно, есть ли какой-нибудь способ вернуть определенную долю кучи булевых в java. Проще говоря, я хотел бы узнать, есть ли способ создать метод, который при задании четырех булевых, если три из них верны, возвращает true, но если значение меньше трех, оно возвращает false. Я знаю, что это может быть трудно понять, и если вы не понимаете, просто опубликуйте комментарий.Как вернуть ответ трех четвертей булевых в java

+2

На самом деле, вы действительно должны сначала опубликовать вашу попытку с вашим вопросом как лучше прояснить проблему а также показать плоды ваших усилий. –

ответ

2

Weird вопрос ... в любом случае, здесь возможное решение для всего 4 булевых:

public boolean booleanFraction(boolean a, boolean b, boolean c, boolean d) { 
    int ia = a ? 1 : 0; 
    int ib = b ? 1 : 0; 
    int ic = c ? 1 : 0; 
    int id = d ? 1 : 0; 
    return ia + ib + ic + id == 3; 
} 

Для более общего решение, вот метод, который получает в качестве параметров количество логических элементов, которые должны быть true для рассмотрения true всего выражения и большего, чем нулевое переменное число b oolean значения:

public static boolean booleanFraction(int number, boolean... bools) { 
    int acc = 0; 
    for (boolean b : bools) 
     acc += b ? 1 : 0; 
    return acc == number; 
} 

вызовов это так, для примера в вопросе:

booleanFraction(3, true, true, true, false); 
> true 

booleanFraction(3, false, false, true, false); 
> false 
+0

Это кажется немного жестким. –

+2

@HunterMcMillen В вопросе упоминается только 4 булевых. Если было возможно больше, OP должен указать критерии для определения того, какая часть логических данных должна быть верной, чтобы рассмотреть всю цепочку логических значений true. –

+0

@HunterMcMillen В любом случае. Я изменил свой ответ, теперь является таким же общим, каким он может быть. –

2

Просто создайте int, который увеличивается на 1 для каждого true. Если оно больше или равно 3, верните true. Сказав это, я не знаю, где вы застряли, поскольку это кажется слишком рудиментарным, чтобы даже упомянуть.

3

графа истинные находится в массиве ...

public boolean checkBools(boolean[] bools){ 
    int cnt=0; 
    for(boolean b : bools) 
     if(b) cnt++; 
    return cnt < 3 ? false : true; 
} 
+0

Я бы использовал varargs. Это немного более удобно. Однако +1 –

+0

'return cnt> = 3;'? – aioobe

+0

aioobe, он хотел знать, было ли в массиве 3 или более истинно, поэтому, если его меньше 3, верните false. если его 3 или более, верните true :) – GHz

1
public boolean checkBooleans(boolean b1, boolean b2, boolean b3, boolean b4) { 
    boolean[] array = new boolean[4]; 
    boolean[0] = b1; 
    boolean[1] = b2; 
    boolean[2] = b3; 
    boolean[3] = b4; 
    int j = 0; 
    for(int i = 0; i < array.length; i++) { 
     if(array[i]) { 
      j++; 
     } 
     if(j == 3) { 
      return true; 
     } 
    } 
return false; 
} 
0

Если вы хотите, чтобы ваш ответ как выражение boolean, вы можете попробовать,

boolean atLeastThree(boolean a, boolean b, boolean c, boolean d) { 
    return a ? (b && (c || d) || (c && d)) : (b && c && d); 
} 

Подсчет количества true s немного более изящный и понятный,

boolean atLeastThree(boolean a, boolean b, boolean c, boolean d) { 
    return (a ? 1 : 0) + 
      (b ? 1 : 0) + 
      (c ? 1 : 0) + 
      (d ? 1 : 0) > 2; 
} 
0
boolean nOfM(int n, boolean... m) { 
    for (boolean mi : m) if (mi) n--; 

    return n < 1; 
} 
0

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

static boolean threeOrMore(Boolean... bools) { 
    return Stream.of(bools).filter(x -> x).count() >= 3; 
} 
0

Разновидность моего ответа на 2-out-of-3 problem:

boolean atLeastThree(boolean a, boolean b, boolean c, boolean d) 
{ 
    int n = -3; 

    if (a) n++; 
    if (b) n++; 
    if (c) n++; 
    if (d) n++; 

    return (n >= 0); 
} 

 Смежные вопросы

  • Нет связанных вопросов^_^