根据布尔值插入参数

发布于 2024-10-21 00:24:04 字数 138 浏览 1 评论 0原文

是否可以根据布尔值在函数中插入参数?

例如,我有这段代码:

Math.min(boolA ? doubleValueA, boolB ? doubleValueB);

提前致谢!

Is it possible to insert a parameter in a function depending on a boolean value?

For example, I have this piece of code:

Math.min(boolA ? doubleValueA, boolB ? doubleValueB);

Thanks in advance!

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

温暖的光 2024-10-28 00:24:04

如果 boolAboolB 为 false,请使用默认值(例如 Double.MAX_VALUE):

Math.min(
    (boolA) ? doubleValueA : Double.MAX_VALUE,
    (boolB) ? doubleValueB : Double.MAX_VALUE
);

编辑

如果您有所需的变量列表要找到最小值,但前提是设置了相应的布尔变量,请将列表加载到数组中并找到最小值:

ArrayList<Double> myArray = new ArrayList<Double>();
if (boolA) myArray.add(doubleValueA);
if (boolB) myArray.add(doubleValueB);
// etc

double minValue = Double.MAX_VALUE; // start with largest possible value
// loop through and replace with any smaller values
for (double val : myArray)
    if (val < minValue) minValue = val;
// val now contains the smallest value

编辑 2

这通常也可以应用于其他函数。有选择地将参数添加到数组中,然后将该数组传递给函数。如果您可以控制函数定义,则可以使用 变量参数 使其更简单。

public double MyMin(double... myArray) {
    double minValue = Double.MAX_VALUE; // start with largest possible value
    // loop through and replace with any smaller values
    for (double val : myArray)
        if (val < minValue) minValue = val;
    // val now contains the smallest value
    return val;
}

Use a default value (such as Double.MAX_VALUE) if boolA or boolB is false:

Math.min(
    (boolA) ? doubleValueA : Double.MAX_VALUE,
    (boolB) ? doubleValueB : Double.MAX_VALUE
);

Edit

If you have a list of variables that you want to find the minimum, but only if the corresponding boolean variable is set, load the list into an array and find the minimum:

ArrayList<Double> myArray = new ArrayList<Double>();
if (boolA) myArray.add(doubleValueA);
if (boolB) myArray.add(doubleValueB);
// etc

double minValue = Double.MAX_VALUE; // start with largest possible value
// loop through and replace with any smaller values
for (double val : myArray)
    if (val < minValue) minValue = val;
// val now contains the smallest value

Edit 2

This can also be applied in general to other functions. Selectively add your parameters to an array, and pass the array to the function. If you have control over the function definition, you can use variable arguments to make it simpler.

public double MyMin(double... myArray) {
    double minValue = Double.MAX_VALUE; // start with largest possible value
    // loop through and replace with any smaller values
    for (double val : myArray)
        if (val < minValue) minValue = val;
    // val now contains the smallest value
    return val;
}
世界和平 2024-10-28 00:24:04

java没有类似的运算符

boolA ? doubleValueA

,但支持 三元运算符

boolA ? doubleValueA : defaultValue

这意味着如果 boolA 为 true,则使用 doubleValueA,否则使用 defaultValue。否则,

Math.min(boolA ? doubleValueA, boolB ? doubleValueB);

如果 boolA 为 false(除了特殊处理并在这种情况下使用 null,但 Java 没有),

那么完全没有意义,您应该更改为

Math.min(boolA ? doubleValueA : defaultA, boolB ? doubleValueB : defaultB);

java does not have operator like

boolA ? doubleValueA

but supports ternary operator

boolA ? doubleValueA : defaultValue

it means that if boolA is true, then use doubleValueA otherwise use defaultValue. Otherwise

Math.min(boolA ? doubleValueA, boolB ? doubleValueB);

would be pointless if boolA is false (except for special processing and going with null in this case, but Java does not)

altogether, you should change to

Math.min(boolA ? doubleValueA : defaultA, boolB ? doubleValueB : defaultB);
沙沙粒小 2024-10-28 00:24:04

如果您使用三元运算符,则需要一个假条件。假设您想确保如果 boolA 为 false,则 doubleValueB 将为 min,而如果 boolB 为 false,则 doubleValueA 将为 min。您可以将另一个条件设置为最大整数,然后就会出现这种情况。

当然,如果 boolA 和 boolB 都为 false,那么您的值将是最大整数值。如果这种情况发生,那么您将需要额外的代码来处理它。

Math.min(boolA ? doubleValueA : Integer.MAX_VALUE, boolB ? doubleValueB : Integer.MAX_VALUE);

请注意 数学。 min(int, int) 不接受可变参数。如果您想按照 的描述使用可变长度参数列表在这里你需要你自己的带有可变参数的 min 函数。

If you are using the ternary operator, you need a false condition. Say you want to make sure that if boolA is false then doubleValueB will be min while if boolB is false doubleValueA will be min. You could make the other condition be the max integer and then this will be the case.

Of course if both boolA and boolB are false then your value will be the max integer value. If that can ever happen, then you'll need additional code to handle it.

Math.min(boolA ? doubleValueA : Integer.MAX_VALUE, boolB ? doubleValueB : Integer.MAX_VALUE);

Note that Math.min(int, int) does not take varargs. If you want to use a variable-length argument list as described here you'll need your own min function with varargs.

一场信仰旅途 2024-10-28 00:24:04
if(boolA && boolB) {
    Math.min(doubleA, doubleB);
} else if(boolA) {
    doubleA;
} else if(boolB) {
    doubleB;
} else {
    ????
}
if(boolA && boolB) {
    Math.min(doubleA, doubleB);
} else if(boolA) {
    doubleA;
} else if(boolB) {
    doubleB;
} else {
    ????
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文