ฉันมีวิธีการจาวาที่ฉันรวมชุดของตัวเลข อย่างไรก็ตามฉันต้องการให้ตัวเลขเชิงลบใด ๆ ถูกถือว่าเป็นผลบวก ดังนั้น (1) + (2) + (1) + (- 1) ควรเท่ากับ 5
ฉันแน่ใจว่ามีวิธีง่าย ๆ ในการทำเช่นนี้ - ฉันไม่รู้
ฉันมีวิธีการจาวาที่ฉันรวมชุดของตัวเลข อย่างไรก็ตามฉันต้องการให้ตัวเลขเชิงลบใด ๆ ถูกถือว่าเป็นผลบวก ดังนั้น (1) + (2) + (1) + (- 1) ควรเท่ากับ 5
ฉันแน่ใจว่ามีวิธีง่าย ๆ ในการทำเช่นนี้ - ฉันไม่รู้
คำตอบ:
แนวคิดที่คุณกำลังอธิบายเรียกว่า "ค่าสัมบูรณ์" และ Java มีฟังก์ชันที่เรียกว่าMath.absสำหรับคุณ หรือคุณสามารถหลีกเลี่ยงการเรียกใช้ฟังก์ชันและทำมันเอง:
number = (number < 0 ? -number : number);
หรือ
if (number < 0)
number = -number;
คุณกำลังมองหาค่าสัมบูรณ์ Math.abs(-5)
ส่งคืน 5 ...
ใช้abs
ฟังก์ชั่น:
int sum=0;
for(Integer i : container)
sum+=Math.abs(i);
รหัสนี้ไม่ปลอดภัยที่จะถูกเรียกในจำนวนบวก
int x = -20
int y = x + (2*(-1*x));
// Therefore y = -20 + (40) = 20
ลองสิ่งนี้ (ค่าลบที่อยู่ด้านหน้าของ x ใช้ได้เนื่องจากมันเป็นโอเปอเรเตอร์ unary ค้นหาเพิ่มเติมได้ที่นี่ ):
int answer = -x;
ด้วยวิธีนี้คุณสามารถเปลี่ยนค่าบวกเป็นลบและลบเป็นบวกได้
อย่างไรก็ตามหากคุณต้องการให้จำนวนลบเป็นค่าบวกให้ลองทำดังนี้:
int answer = Math.abs(x);
หรือหากคุณไม่ต้องการใช้วิธี abs () ด้วยเหตุผลบางประการลองทำสิ่งนี้:
int answer = Math.sqrt(Math.pow(x, 2));
หวังว่ามันจะช่วย! โชคดี!
คุณกำลังถามเกี่ยวกับค่าสัมบูรณ์
Math.abs (... ) เป็นฟังก์ชันที่คุณอาจต้องการ
Math.abs()
คุณต้องการที่จะห่อจำนวนในแต่ละ เช่น
System.out.println(Math.abs(-1));
พิมพ์ออกมา "1"
หากคุณต้องการหลีกเลี่ยงการเขียน - Math.
ส่วนคุณสามารถรวมคณิตศาสตร์ใช้แบบคงที่ แค่เขียน
import static java.lang.Math.abs;
พร้อมกับการนำเข้าของคุณและคุณสามารถอ้างถึงabs()
ฟังก์ชั่นเพียงแค่เขียน
System.out.println(abs(-1));
วิธีที่ง่ายที่สุดถ้าใช้วิธีนี้เพื่อตัดแต่ละหมายเลขในการโทร 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);
}
มี 2 วิธีที่คุณสามารถปฏิเสธค่าได้:
value = (-value);
value = value *
(-1);
จริง ๆ แล้วทั้งสองเป็นเหรียญเดียวกัน มันเป็นแค่ที่คุณมักจะจำไม่ได้ว่าเป็นจริงvalue = (-value);
value = 1 * (-value);
สำหรับวิธีการที่คุณทำใน Java มันง่ายมากเพราะ Java มีฟังก์ชันอยู่แล้วในMath class
:value = Math.abs(value);
ใช่การทำโดยไม่ต้องMath.abs()
เป็นเพียงบรรทัดของรหัสที่มีคณิตศาสตร์ง่าย ๆ แต่ทำไมรหัสของคุณดูน่าเกลียด? เพียงใช้Math.abs()
ฟังก์ชั่นที่มีให้ของ Java ! พวกเขาให้เหตุผล!
หากคุณจำเป็นอย่างยิ่งที่จะข้ามฟังก์ชั่นที่คุณสามารถใช้value = (value < 0) ? (-value) : value;
ซึ่งเป็นเพียงรุ่นขนาดกะทัดรัดมากขึ้นของรหัสที่ผมกล่าวถึงในตรรกะ (3) ส่วนที่ใช้ประกอบการ Ternary (? :
)
นอกจากนี้อาจมีสถานการณ์ที่คุณต้องการแสดงถึงความสูญเสียหรือขาดหายไปในฟังก์ชันที่อาจได้รับทั้งค่าบวกและค่าลบ
แทนที่จะทำการตรวจสอบที่ซับซ้อนคุณสามารถรับค่าสัมบูรณ์และคัดค้านได้: 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;
หากคุณสนใจกลไกของส่วนประกอบทั้งสองนี่เป็นวิธีที่ไม่มีประสิทธิภาพอย่างแท้จริง
private static int makeAbsolute(int number){
if(number >=0){
return number;
} else{
return (~number)+1;
}
}
ฉันจะแนะนำวิธีแก้ไขปัญหาต่อไปนี้:
ไม่สนุก lib:
value = (value*value)/value
(ด้านบนใช้งานไม่ได้)
ด้วยความสนุก lib:
value = Math.abs(value);
String s = "-1139627840";
BigInteger bg1 = new BigInteger(s);
System.out.println(bg1.abs());
อีกวิธีหนึ่งคือ:
int i = -123;
System.out.println(Math.abs(i));
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
ตัวอย่าง
โมฆะคงที่สาธารณะหลัก (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
ฉันต้องการค่าสัมบูรณ์นานและลึกเข้าไปใน Math.abs และพบว่าถ้าอาร์กิวเมนต์ของฉันน้อยกว่า LONG.MIN_VAL ซึ่งเป็น -9223372036854775808l -9223372036854775808l แล้วฟังก์ชัน abs จะไม่คืนค่าสัมบูรณ์ แต่เพียงค่าต่ำสุด ในกรณีนี้หากรหัสของคุณใช้ค่า abs นี้มากขึ้นแสดงว่าอาจมีปัญหา
คุณกรุณาลองอันนี้หน่อยได้ไหม?
public static int toPositive(int number) {
return number & 0x7fffffff;
}
ใน kotlin คุณสามารถใช้ unaryPlus
input = input.unaryPlus()
https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-int/unary-plus.html
อย่าทำอย่างนี้
จำนวน = (หมายเลข <0? -number: number);
หรือ
if (number <0) number = -number;
นี่จะเป็นข้อบกพร่องเมื่อคุณเรียกใช้พบข้อบกพร่องในรหัสของคุณมันจะรายงานว่าเป็น RV_NEGATING_RESULT_OF