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

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

所以我有这样的事情:

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

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

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

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

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

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

这有一个Java 8单线程:

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

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"); } 

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

当你检查foundLetterArray[selectedWord.length()] ,它会给你一个绑定exception的数组,试试foundLetterArray[selectedWord.length()-1]

喜欢:

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

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

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

实现这个foundLetterArray[selectedWord.length()-1]你必须要注意一件事,如果你的数组不包含任何元素,那么selectedWord.length()会返回0,你会得到同样的exception,所以在做之前检查lengh是好的这个foundLetterArray[selectedWord.length()-1]

做这个

 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的备用循环结构。 当您不需要修改数组内容时,这是合适的,您只需要从中读取它们。 它避免了对指数的任何混乱。

您只检查数组中的最后一个元素(并且做错了,上面描述了原因)。

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

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

//如果所有值都为真,那么allAreTrue将包含true,如果至少有一个“false”,则allAreTrue将包含false