gpt4 book ai didi

java - 自动更新 boolean 值

转载 作者:塔克拉玛干 更新时间:2023-11-01 23:06:33 25 4
gpt4 key购买 nike

上下文: https://www.reddit.com/r/dailyprogrammer/comments/4wqzph/20160808_challenge_278_easymed_weave_insert_part_1/

完整代码: http://pastebin.com/UghV3xdT

我有 2 个几乎完全相同的方法,它们的区别仅在于一个 if 语句:if (k % 3 != 1)if(k % 2 == 0).

int k = 0;
while(k<50){
if(k % 3 != 1){ // OR if(k % 2 == 0)
// Code logic goes here
k++;
}
}

每个 case 的使用由数组的长度决定,这意味着特定 case 只需确定 1 次。 'k'代表另一个数组的索引,50是这个数组的长度。

我可以写类似 if(foo > 1 ? k % 3 != 1 : k % 2 == 0) 的代码,但这需要程序在每次循环运行时执行操作。

在某种程度上,我想要一种更新 boolean 值。有什么办法可以做到这一点,或者这是按值(value)传递的缺点吗?我应该保留两个单独的方法还是使用三元运算符更好?

本质上,我正在寻找一种包含表达式而不是值的类型。

最佳答案

在 Java 8 中,有一个很好的函数式接口(interface),叫做 IntPredicate。如果将它与 lambda 表达式结合使用,您可以在没有重复、额外代码或任何减速的情况下实现您的目标:

public final class Example {
public static void main(String[] args) {
//Instead of randomly choosing the predicate, use your condition here
Random random = new Random();
IntPredicate intPredicate = random.nextBoolean() ? i -> i % 2 == 0 : i -> i % 3 != 1;

int k = 0;
while(k<50){
/*
*At this point the predicate is either k%2==0 or k%3!=1,
* depending on which lambda you assigned earlier.
*/
if(intPredicate.test(k)){
// Code logic goes here
k++;
}
}
}
}

PS:请注意我使用随机 boolean 值在谓词之间切换,但您可以使用任何条件

关于java - 自动更新 boolean 值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38920790/

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