如何检查布尔数组的所有元素都是true

时间:2013-09-05 08:52:19

标签: java arrays boolean

我有一个布尔数组,其大小取决于随机选择的字符串的大小。

所以我有这样的事情:

boolean[] foundLetterArray = new boolean[selectedWord.length()];

随着程序的进展,这个特定的布尔数组会为数组中的每个元素填充真值。我只想在数组的所有元素都为真时打印一个语句。所以我试过了:

if(foundLetterArray[selectedWord.length()]==true){
    System.out.println("You have reached the end");
}

这给了我一个超出范围的异常错误。我也尝试了contains()方法,但即使数组中的1个元素为真,也会结束循环。我是否需要一个迭代遍历数组所有元素的for循环?我该如何设置测试条件?

8 个答案:

答案 0 :(得分:10)

使用增强型for循环,您可以轻松地遍历数组,无需索引和大小计算:

private static boolean allTrue (boolean[] values) {
    for (boolean value : values) {
        if (!value)
            return false;
    }
    return true;
}

答案 1 :(得分:2)

有一个Java 8单行代码:

boolean allTrue(boolean[] arr) {
    return IntStream.range(0, arr.length).allMatch(i -> arr[i]);
}

答案 2 :(得分:1)

boolean [] foundLetterArray = new boolean [5]; abow数组的内存分配类似于

      foundLetterArray[0],foundLetterArray[1],foundLetterArray[2],foundLetterArray[3],foundLetterArray[4] 

数组索引从0开始,总内存计数为5,最后一个数组索引为4.

您正在尝试获取不存在的foundLetterArray [5]的索引5。这就是你获得ArrayIndexOutofBoundsException

的原因
   if(foundLetterArray[selectedWord.length()-1]==true){
      System.out.println("You have reached the end");
   }

答案 3 :(得分:0)

Java中的数组从index 0开始,最后一个索引始终为[array.length()-1]

当您检查foundLetterArray[selectedWord.length()]时,它会为您提供一个超出绑定异常的数组,请尝试foundLetterArray[selectedWord.length()-1]

像:

if(foundLetterArray[selectedWord.length()-1]){
System.out.println("You have reached the end");
}

答案 4 :(得分:0)

java中的索引以及大多数编程语言都是基于0的,这意味着具有n个元素的数组中的各个元素具有索引0,1,2,...,n-1。数组中的最后一个元素始终位于index array.length - 1。

答案 5 :(得分:0)

数组索引从0开始,所以最后一个索引总是比数组长度少1,所以这里你试图通过执行foundLetterArray [selectedWord.length()]来访问最后一个索引+ 1,这样就可以通过ArrayIndexBoundEception使用array.lastIndex( )方法或减去1个表格长度。

实现这个foundLetterArray[selectedWord.length()-1]如果你的数组不包含任何元素,那么你必须要注意一件事,然后selectedWord.length()返回0并再次得到同样的异常,所以在执行此操作之前检查lengh是好的{ {1}}。

答案 6 :(得分:0)

这样做

public boolean allTrue(boolean[] array) {
    for (boolean b : array) {
        if (!b) {
           return false;
        }
    }
    return true;
}

没有“一行”的方式来了解数组中的所有元素是否满足某个条件(有些库会为您处理循环,但您仍需要编写条件)。查询array [x]只会告诉你该数组中的第x项,所以对于你的问题,你需要检查每个项目。

另外,正如其他人所指出的,数组索引是从0开始的,所以第一个元素在数组[0],最后一个在数组[array.length() - 1]。

我的示例使用一个称为for-each的备用循环结构。当您不需要修改数组内容时,这是合适的,您只需要从中读取它们。它避免了任何乱七八糟的指数。

答案 7 :(得分:0)

你只检查数组中的最后一个元素(做错了,上面说明了原因)。

为了得到数组只包含真值,你应该检查所有值。

boolean allAreTrue = true;
for (boolean val : foundLetterArray) {
  allAreTrue = allAreTrue && val;
}

//在此行,如果所有值都为真,则allAreTrue将包含true;如果您至少有一个“false”,则allAreTrue将包含false