使用Math.max仅替换负数

时间:2019-03-20 11:23:10

标签: java

我正在制作一个基于用户输入进行计算的程序,并且应该将负数更改为默认值,而不使用“ if语句”或“:”。我尝试使用Math.max(input,1),但是,这会导致0到1之间的值出现问题。有什么建议吗?

4 个答案:

答案 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));
  }