我有一个Java方法,其中我将一组数字相加。但是,我希望任何负面数字都被视为正数。所以(1)+(2)+(1)+( - 1)应该等于5.
我确信有这么简单的方法 - 我只是不知道如何。
答案 0 :(得分:334)
答案 1 :(得分:97)
您描述的概念称为“绝对值”,Java有一个名为Math.abs的函数可以为您完成。或者你可以避免函数调用并自己动手:
number = (number < 0 ? -number : number);
或
if (number < 0)
number = -number;
答案 2 :(得分:18)
你正在寻找绝对的价值,伙计。 Math.abs(-5)
返回5 ...
答案 3 :(得分:12)
使用abs
功能:
int sum=0;
for(Integer i : container)
sum+=Math.abs(i);
答案 4 :(得分:9)
此代码也可以安全地在正数上调用。
int x = -20
int y = x + (2*(-1*x));
// Therefore y = -20 + (40) = 20
答案 5 :(得分:6)
你在询问绝对值吗?
Math.abs(...)是您可能想要的功能。
答案 6 :(得分:6)
您希望将每个数字换行到Math.abs()
。 e.g。
System.out.println(Math.abs(-1));
打印出“1”。
如果您想避免编写Math.
- 部分,可以静态包含Math util。只需写下
import static java.lang.Math.abs;
以及您的导入,只需编写
即可参考abs()
- 函数
System.out.println(abs(-1));
答案 7 :(得分:5)
最简单的方法是在Math.abs()调用中包装每个数字,所以你要添加:
Math.abs(1) + Math.abs(2) + Math.abs(1) + Math.abs(-1)
通过逻辑更改来反映代码的结构。也许是详细,但它可以做你想要的。
答案 8 :(得分:5)
试试这个(x前面的负数是有效的,因为它是一元运算符,找到更多here):
int answer = -x;
有了这个,您可以将正面变为负面,将负面变为正面。
然而,如果您只想将负数设为正数,请尝试以下方法:
int answer = Math.abs(x);
OR ,如果您因某些原因不想使用abs()方法,请尝试以下方法:
int answer = Math.sqrt(Math.pow(x, 2));
希望它有所帮助!祝你好运!
答案 9 :(得分:5)
当您需要表示没有丢失或缺失概念(负值)的值时,称为“绝对值”。
获得绝对值的逻辑非常简单:"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()
函数!他们提供它是有原因的!
如果你绝对需要跳过这个功能,你可以使用value = (value < 0) ? (-value) : value;
,这只是我在逻辑(第3节)中提到的代码的更紧凑版本,使用Ternary operator (? :
)。< / p>
此外,在某些情况下,您可能希望始终在可能同时接收正值和负值的函数中表示丢失或缺失。
不是做一些复杂的检查,而是简单地得到绝对值,并否定它: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”库中,将这些函数首先拆分为其核心组件,并将最终函数简单地保存为嵌套也可能是个好主意。调用核心组件的now-split函数:
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));
}
答案 10 :(得分:3)
为什么不 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;
答案 11 :(得分:2)
我会推荐以下解决方案:
没有lib乐趣:
value = (value*value)/value
使用lib fun :
value = Math.abs(value);
答案 12 :(得分:1)
如果你对两个补码的机制感兴趣,这是一个绝对低效但说明性的低级方法:
private static int makeAbsolute(int number){
if(number >=0){
return number;
} else{
return (~number)+1;
}
}
答案 13 :(得分:1)
String s = "-1139627840";
BigInteger bg1 = new BigInteger(s);
System.out.println(bg1.abs());
可替换地:
int i = -123;
System.out.println(Math.abs(i));
答案 14 :(得分:1)
可以使用库函数Math.abs()
。
Math.abs()
返回参数的绝对值
- 如果参数为负,则返回参数的取反。
- 如果参数为正,则按原样返回数字。
例如:
int x=-5;
System.out.println(Math.abs(x));
输出:5
int y=6;
System.out.println(Math.abs(y));
输出:6
答案 15 :(得分:1)
要将负数转换为正数(这称为绝对值),请使用Math.abs()。这个Math.abs()方法就是这样
“number = (number < 0 ? -number : number);".
在下面的示例中,Math.abs(-1)
会将负数1转换为正数1。
示例
public static 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
答案 16 :(得分:0)
我需要一个long的绝对值,深入研究Math.abs并发现如果我的参数小于LONG.MIN_VAL这是-9223372036854775808l,那么abs函数不会返回绝对值但只返回最小值值。在这种情况下,如果您的代码进一步使用此abs值,则可能存在问题。
答案 17 :(得分:0)
可以请您尝试一下吗?
public static int toPositive(int number) {
return number & 0x7fffffff;
}
答案 18 :(得分:0)
在kotlin中,您可以使用unaryPlus
input = input.unaryPlus()
https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-int/unary-plus.html
答案 19 :(得分:0)
if(arr[i]<0)
Math.abs(arr[i]); //1st way (taking absolute value)
arr[i]=-(arr[i]); //2nd way (taking -ve of -ve no. yields a +ve no.)
arr[i]= ~(arr[i]-1); //3rd way (taking negation)
答案 20 :(得分:0)
我看到人们在说Math.abs(number)
,但是这种方法不是完全的证据。
当您尝试包装Math.abs(Integer.MIN_VALUE)
时此操作失败(请参见参考文献https://youtu.be/IWrpDP-ad7g)
如果不确定是否要在输入中接收Integer.MIN_VALUE
。始终建议您检查该号码并手动处理。
答案 21 :(得分:-1)
在 for 循环中试试这个:
sum += Math.abs(arr[i])
答案 22 :(得分:-3)
不要这样做
number =(数字&lt; 0? - 数字:数字);
或
if(number&lt; 0)number = -number;
当您在代码上运行查找错误时,这将是一个错误,它会将其报告为RV_NEGATING_RESULT_OF