我有一个Java方法,其中对一组数字求和。但是,我希望将任何负数都视为正数。因此(1)+(2)+(1)+(-1)应该等于5。
我敢肯定有很简单的方法可以做到-我只是不知道怎么做。
我有一个Java方法,其中对一组数字求和。但是,我希望将任何负数都视为正数。因此(1)+(2)+(1)+(-1)应该等于5。
我敢肯定有很简单的方法可以做到-我只是不知道怎么做。
Answers:
您所描述的概念称为“绝对值”,而Java具有一个名为Math.abs的函数可以为您完成此操作。或者,您可以避免函数调用并自己执行:
number = (number < 0 ? -number : number);
要么
if (number < 0)
number = -number;
在正数上调用此代码并不安全。
int x = -20
int y = x + (2*(-1*x));
// Therefore y = -20 + (40) = 20
最简单的方法是将每个数字包装在Math.abs()调用中,因此,您将添加:
Math.abs(1) + Math.abs(2) + Math.abs(1) + Math.abs(-1)
进行逻辑更改以反映代码的结构。也许很详细,但是它可以满足您的要求。
-
符号就不是更好吗?否则,包括他没有控制权在内,使用类似的函数absoluteSum( int[] values ){ /*loop with Math.abs()*/ }
代替在每个值中手动包装Math.abs()会更好吗?[-1]
当您需要表示一个没有损失或缺失(负值)概念的值时,称为“绝对值”。
以获得绝对值的逻辑是非常简单的:"If it's positive, maintain it. If it's negative, negate it"
。
这意味着您的逻辑和代码应按以下方式工作:
//If value is negative...
if ( value < 0 ) {
//...negate it (make it a negative negative-value, thus a positive value).
value = negate(value);
}
您可以通过两种方式取反值:
value = (-value);
value = value *
(-1);
两者实际上都是同一枚硬币的两侧。只是您通常不记得value = (-value);
实际上是value = 1 * (-value);
。
嗯,关于您实际上在Java中的操作方式,这非常简单,因为Java已经在其中提供了一个功能。 Math class
:value = Math.abs(value);
是的,不这样做就Math.abs()
只是用非常简单的数学编写的一行代码,但是为什么要让您的代码看起来丑陋呢?只需使用Java提供的Math.abs()
功能!他们提供它是有原因的!
如果您绝对需要跳过该函数,则可以使用Ternary运算符()value = (value < 0) ? (-value) : value;
,它只是我在逻辑(3rd)部分中提到的代码的紧凑版本。? :
此外,在某些情况下,您可能希望始终在可能同时接收正值和负值的函数中表示损失或缺失。
无需进行复杂的检查,您只需获取绝对值并将其取反即可: negativeValue = (-Math.abs(value));
考虑到这一点,并考虑一个有多个数字之和的情况,例如您的数字,实现一个函数将是一个不错的主意:
int getSumOfAllAbsolutes(int[] values){
int total = 0;
for(int i=0; i<values.lenght; i++){
total += Math.abs(values[i]);
}
return total;
}
根据您可能再次需要相关代码的可能性,将它们添加到您自己的“ utils”库中,将此类函数首先拆分为它们的核心组件,并仅将最终函数作为对调用的嵌套来维护,这也是一个好主意。核心组件现在拆分的功能:
int[] makeAllAbsolute(int[] values){
//@TIP: You can also make a reference-based version of this function, so that allocating 'absolutes[]' is not needed, thus optimizing.
int[] absolutes = values.clone();
for(int i=0; i<values.lenght; i++){
absolutes[i] = Math.abs(values[i]);
}
return absolutes;
}
int getSumOfAllValues(int[] values){
int total = 0;
for(int i=0; i<values.lenght; i++){
total += values[i];
}
return total;
}
int getSumOfAllAbsolutes(int[] values){
return getSumOfAllValues(makeAllAbsolute(values));
}
你为什么不multiply that number with -1
呢?
像这样:
//Given x as the number, if x is less than 0, return 0 - x, otherwise return x:
return (x <= 0.0F) ? 0.0F - x : x;
我建议以下解决方案:
没有lib的乐趣:
value = (value*value)/value
(以上实际上不起作用。)
带有lib乐趣:
value = Math.abs(value);
Math.abs()
可以使用库功能。
Math.abs()
返回参数的绝对值
- 如果参数为负,则返回参数的取反。
- 如果参数为正,则按原样返回数字。
例如:
int x=-5;
System.out.println(Math.abs(x));
输出:5
int y=6;
System.out.println(Math.abs(y));
输出6
要将负数转换为正数(这称为绝对值),请使用Math.abs()。这个Math.abs()方法就是这样工作的
“number = (number < 0 ? -number : number);".
在下面的示例中,Math.abs(-1)
将负数1转换为正1。
例
公共静态void main(String [] args){
int total = 1 + 1 + 1 + 1 + (-1);
//output 3
System.out.println("Total : " + total);
int total2 = 1 + 1 + 1 + 1 + Math.abs(-1);
//output 5
System.out.println("Total 2 (absolute value) : " + total2);
}
输出量
合计:3合计2(绝对值):5
在Kotlin中,您可以使用unaryPlus
input = input.unaryPlus()
https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-int/unary-plus.html