5

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

所以我有这样的事情:

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

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

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

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

4

8 回答 8

12

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

private static boolean allTrue (boolean[] values) {
    for (boolean value : values) {
        if (!value)
            return false;
    }
    return true;
}
于 2013-09-05T09:20:18.120 回答
4

有一个 Java 8 one-liner 为此:

boolean allTrue(boolean[] arr) {
    return IntStream.range(0, arr.length).allMatch(i -> arr[i]);
}
于 2015-11-12T00:45:32.383 回答
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");
   }
于 2013-09-05T08:53:56.693 回答
0

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

实现这foundLetterArray[selectedWord.length()-1]一点 如果您的数组不包含任何元素,您必须注意一件事,然后 selectedWord.length() 返回 0 并且您将再次获得相同的异常,因此在执行此操作之前检查 lengh 很好foundLetterArray[selectedWord.length()-1]

于 2013-09-05T08:59:32.480 回答
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 的备用循环结构。当您不需要修改数组内容时,这是合适的,您只需要从中读取。它避免了索引的任何混乱。

于 2013-09-05T09:14:56.937 回答
0

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

为了获取数组是否仅包含真值,您应该检查所有这些值。

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

// 在这一行 allAreTrue 将包含 true 如果所有值都是 true 并且如果你有至少一个 "false" 则为 false

于 2013-09-05T09:18:02.860 回答
0

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

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

喜欢:

if(foundLetterArray[selectedWord.length()-1]){
System.out.println("You have reached the end");
}
于 2013-09-05T08:57:02.063 回答
0

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

于 2013-09-05T08:57:23.457 回答