2016-03-06 2 views
-1

Рассмотрим булевой массив с четырьмя элементами. Первоначально все элементы являются ложными. Цикл do-while будет выполнять некоторые тесты и изменять состояние каждого элемента до тех пор, пока все четыре элемента не будут истинными.Возможно тестирование элементов булевого массива в диапазоне?

boolean[] pickedSuits = new boolean[4]; 

do { 
    ...some testing... 

} while (pickedSuits[0] != true && pickedSuits[1] != true && pickedSuits[2] != true && pickedSuits[3] != true); 

Есть ли способ Java для сравнения диапазона элементов вместо тестирования каждого из них по отдельности? Я имею в виду, не для цикла, что-то вроде:

while (pickedSuits[0-3] != true); 
+1

Да, есть способ Java: Напишите свой собственный вспомогательный метод: 'логическое isAllTrue (логическое [] обр, внутр начало, конец ИНТ)'. Обычно в таком методе индекс 'end' является * exclusive *, что означает, что ваш вызов будет' isAllTrue (selectedSuits, 0, 4) '. – Andreas

+0

@rburny Не делает * диапазон * часть, но в остальном то же самое. Конечно, OP * * проверяет полный массив, так что, возможно, это действительно дубликат. – Andreas

ответ

1

Как уже упоминался в комментариях, вы можете написать вспомогательный метод:

boolean rangeIsTrue(boolean[] arr, int start, int end) { 
    for(int i = start; i < end; i++) if(!arr[i]) return false; 
    return true; 
} 
+0

Обычно должно быть 'i Andreas

+0

Правда, исправлено это. – Marv

+0

Извините, я сделал поиск, но этот поток не появился. Должен ли я удалить эту запись? – aaronvan

2

Хотя нет логического потока, вы можете использовать IntStream.

do { 
    ... 
} while (IntStream.range(0, pickedSuits.length).noneMatch(i -> pickedSuits[i])); 
+0

Nice Java 8 поток ответ. +1 – Andreas

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