在java中将int[]转换为boolean[],基于一个数字是偶数(true)还是非偶数(false)

mrzz3bfm  于 2021-07-11  发布在  Java
关注(0)|答案(4)|浏览(476)

这个问题在这里已经有答案了

对于每个循环java错误arrayindexoutofboundsexception(6个答案)
上个月关门了。
我正在尝试将包含int数据类型的数组转换为包含布尔数据类型的数组。我的方法必须能够检查数字是偶数还是非偶数,然后将其存储为“真”如果偶数或其他“假”。返回类型必须是布尔数组。我该怎么做?我写的代码显然不起作用,我真的不明白为什么。实际上,我得到的错误是arrayindexoutofboundsexception:索引12超出长度6的界限(我原来的数组确实有6个元素)。有人能告诉我为什么吗?我正在使用Java8。

public static boolean[] evenNumbers ( int[] array){
            boolean[] array1= new boolean[array.length];
            for (int i: array) {
                if(array[i]%2==0){
                    array5[i]=true;
                }
            }
            return array5;
        }

非常感谢你!

5cg8jx4n

5cg8jx4n1#

在你的循环中, i 是元素的值,而不是它的索引,因此可能不是有效的索引。
将foreach循环更改为常规循环 for 回路:

boolean[] result = new boolean[array.length];
for (int i = 0; i < array.length; i++)  {
    result[i] = array[i]%2==0;
}
return result;
fzsnzjdm

fzsnzjdm2#

有人能告诉我为什么吗?
在for循环中

for (int i: array) {

你用的不是索引,而是元素。
改用传统的for,因为foreach意在隐藏迭代器。

for(int i = 0; i < array.length; i++) {

}
4ioopgfo

4ioopgfo3#

这个 i 在代码中不是索引,而是值。你可以用传统的 for 循环而不是增强 for 循环解决此问题。

import java.util.Arrays;

public class Main {
    public static void main(String[] args) {
        // Test
        System.out.println(Arrays.toString(evenNumbers(new int[] { 1, 2, 3, 4, 5, 6, 7 })));
    }

    public static boolean[] evenNumbers(int[] array) {
        boolean[] array1 = new boolean[array.length];
        for (int i = 0; i < array.length; i++) {
            if (array[i] % 2 == 0) {
                array1[i] = true;
            }
        }
        return array1;
    }
}

输出:

[false, true, false, true, false, true, false]

请注意,您的代码中有一个拼写错误。你已经写好了 array5 而不是 array1 .

vq8itlhq

vq8itlhq4#

基于流的解决方案(尽管 Boolean[] )可能是:

public static Boolean[] evenNumbers ( int... array) {
    return IntStream.range(0, array.length)
                    .mapToObj(i -> array[i] % 2 == 0)
                    .toArray(Boolean[]::new);
}
System.out.println(Arrays.toString(evenNumbers(1, 2, 3, 4, 5, 6, 5, 3, 1, 2)));

输出:

[false, true, false, true, false, true, false, false, false, true]

相关问题