我正在制作一个基于用户输入进行计算的程序,并且应该将负数更改为默认值,而不使用“ if语句”或“:”。我尝试使用Math.max(input,1),但是,这会导致0到1之间的值出现问题。有什么建议吗?
答案 0 :(得分:4)
也许是一个愚蠢的解决方案,但是请尝试以下操作:
while (input < 0)
input = 1;
答案 1 :(得分:3)
好的,我可以想到一种非常可怕的方式。它依赖于使用Math.signum
,对于负输入返回-1.0,对于正输入返回1.0,对于零输入返回0。我们可以使用Math.min(Math.signum(input, 0))
将-1.0用于负输入,将0用于零或正输入。
这样,我们可以将输入钳位为最小的零,然后减去“ -1.0或0”以避免更改任何非负输入,而是将负输入转换为1。
执行此操作的完整代码:
public class Test {
public static void main (String[] args) {
testValue(-1.5);
testValue(-0.5);
testValue(0);
testValue(0.5);
testValue(1.5);
}
private static void testValue(double input) {
double result = transformInput(input);
System.out.println(input + " -> " + result);
}
private static double transformInput(double input) {
double clampedValue = Math.max(input, 0);
double clampedSign = Math.min(Math.signum(input), 0);
return clampedValue - clampedSign;
}
}
但是正如我在评论中指出的那样,这是一个可怕的问题,使用?:
运算符可以更好地实现 ,我对此表示怀疑。谁为您设置了此作业。
答案 2 :(得分:1)
绝对不是我想要的那么干净(即使我不喜欢它有多复杂),但是它可以工作;)
Math.round(((Math.max(input+1, 1)-Math.signum(input+Math.abs(input)))*100))/100.0
输入
5
0.5
0.3
-0.2
-0.5
-2
输出
5.0
0.5
0.3
1.0
1.0
1.0
答案 3 :(得分:0)
您可以使用自己的方法来实现逻辑并返回所需结果,而不用使用Math.max(..,..)
。
public static double mapInput(double input) {
return Math.max(input, (input < 0 ? 1 : input));
}