gpt4 book ai didi

java - 测量阵列之间的重叠

转载 作者:搜寻专家 更新时间:2023-10-31 20:18:22 25 4
gpt4 key购买 nike

给定 Java 中的几个数组(我将遍历当前存储在 HashMap 中的键),我希望能够识别(基于当前存储的 boolean[] 键)哪些索引是 true在所有这些中,哪些是 false .

例子:

{true, true,false}
{true,false,false}
{true,false, false}

将产生所有真值的索引 0,以及所有假值的索引 2。

我的一个想法是将 boolean 数组转换为整数数组,对值求和,如果求和的数组索引 = numArrays,则在所有数组中都为 True。类似地,如果求和数组索引为 0,则在所有数组中都为 false。

我不确定如何以有效的方式(在 Java 中)执行此操作,更不用说这是实现我想要的结果的好方法。

有没有办法将 boolean 数组转换为整数?如果不是,那么实例化一个新的 int 数组并循环遍历 boolean 数组以填充新数组是最简单的替代方法吗?

最佳答案

它们是 boolean 值,所以我真的不知道你为什么要考虑将它们转换为整数并总结它们:这真的很容易但绝对没用。

所以。我假设您没有将它们放在矩阵中(我实际上假设您不知道矩阵是什么,但请不要被这冒犯),您将它们放在单独的数组中,并且您确切地知道您有多少个数组有(比方说 3)。我还假设它们都具有相同的长度。

这个想法是:对于每个可用位置,我们检查三个数组中占据该位置的三个元素,看看它们是否都为真。我们可以用这个比较的结果做什么?我们可以将它打印到屏幕上,将它放在另一个数组中,或者我们喜欢做的任何事情。

让我们从三个数组开始:

boolean[] foo = {true, true, false};
boolean[] bar = {true, false, false};
boolean[] baz = {true, false, false};

好的。我们现在可以创建第四个数组来存储我们的结果。
boolean[] qux = new boolean[3];

或者,甚至更好:
boolean[] qux = new boolean[foo.length];

让我们开始构建我们的 C 风格的循环:
for (i = 0; i < foo.length; i++) {
...
}

如果您正在使用数组,您可能已经知道 for 循环的工作原理:第一个语句将被执行,就像它写成的 之前 大括号内的整个代码块;第二个语句被检查为 第一 每次执行块时的指令,如果失败则循环停止;第三条语句将作为 执行最后 每次执行块时的指令。
你可能已经知道,如果一个数组的长度是 n ,其元素的索引将为 0, [...], n-1 .
如果你不知道这两件事......好吧,不客气。

那么,我说我们想要对每个可用职位做什么?我们想比较那个位置的三个元素。所以for循环变成了:
for (int i = 0; i < foo.length; i++) {

if (foo[i] && bar[i] && baz[i]) {
...
}

}

我们刚刚添加的是这个检查:如果位置 i 处的元素数组中 foo true , 还有位置 i 处的元素数组中 酒吧 true , 还有位置 i 处的元素数组中 baz true ......我们做点什么。

例如,我们可以将结果放入 qux :
for (int i = 0; i < foo.length; i++) {

if (foo[i] && bar[i] && baz[i]) {

qux[i] = true;

} else {

qux[i] = false;

}

}

请注意,比较本身的计算结果为 boolean 值,并且当其值为 true 时我们存储了 true ;当 false我们存储了 false .所以我们也可以这样写:
for (int i = 0; i < foo.length; i++) {

qux[i] = (foo[i] && bar[i] && baz[i]);

}

Grrrrreat,我们实现了我们想要实现的目标!您是否也想显示这样的结果?让我向您介绍增强的 for 循环:
for (boolean val : qux) {
...
}

基本上,是 qux 一个 boolean 数组,它是一个 boolean 值的“容器”。这个 for 语句说:对于组成 的每个元素qux ... 做点什么。

所以,让我们用它来打印这些元素:
for (boolean val : qux) {

System.out.println(val);

}

方法 println() , 在对象 out , 类的静态成员 System (如果您不理解所有这些术语,请不要担心,如果您继续学习 Java,您将了解它们的含义)在屏幕上显示一些内容。从技术上讲,这个“东西”应该是一个字符串,但是由于 Java 知道如何从 boolean 值中生成字符串,因此在将 val 传递给它时我们不必太担心。

想要在第一个 for 中完成所有操作并以漂亮的方式打印?非常简单:
for (int i = 0; i < foo.length; i++) {

qux[i] = (foo[i] && bar[i] && baz[i]);

System.out.println("At position " + i + " we have " + qux[i]);

}

那么,我们现在如何检查全假位置?我们可以使用 bang( ! ),其含义是:取这个 boolean 值并考虑它的否定( true 如果是 falsefalse 如果是 true )。
使用它,我们可以表达这个检查:如果位置 i 处的元素数组中 foo false , 还有位置 i 处的元素数组中 酒吧 false , 还有位置 i 处的元素数组中 baz false ......我们做点什么。

所以我们需要第五个数组:
boolean[] norf = new boolean[foo.length];

我们会将循环更改为
for (int i = 0; i < foo.length; i++) {

qux[i] = (foo[i] && bar[i] && baz[i]);

if (qux[i]) {

System.out.println("At position " + i + " they are all true.");

}

norf[i] = (!foo[i] && !bar[i] && !baz[i]);

if (norf[i]) {

System.out.println("At position " + i + " they are all false.");

}

}

希望这是有用的。

关于java - 测量阵列之间的重叠,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32859289/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com