नकारात्मक संख्या को सकारात्मक बनाएं


146

मेरे पास एक जावा विधि है जिसमें मैं संख्याओं के एक समूह को समेट रहा हूं। हालाँकि, मैं चाहता हूं कि किसी भी नकारात्मक संख्या को सकारात्मक माना जाए। तो (1) + (2) + (1) + (- 1) 5 के बराबर होना चाहिए।

मुझे यकीन है कि ऐसा करने का बहुत आसान तरीका है - मुझे नहीं पता कि कैसे।


सरल गणित stackoverflow.com/a/5220597/185022 :)
AZ_

5
अमाज मुझे बताता है कि इस तरह के बुनियादी सवालों को कितने उभार मिलते हैं ...
जोस रुई सैंटोस

मेरे सवाल इससे कहीं अधिक वाजिब हैं, लेकिन फिर भी इसमें बहुत अधिक गिरावट है
कोई

जवाबों:



103

आप जिस अवधारणा का वर्णन कर रहे हैं, उसे "पूर्ण मूल्य" कहा जाता है, और जावा में एक फ़ंक्शन है जिसे Math.abs कहा जाता है जो आपके लिए यह करना है। या आप फ़ंक्शन कॉल से बच सकते हैं और इसे स्वयं कर सकते हैं:

number = (number < 0 ? -number : number);

या

if (number < 0)
    number = -number;

21
ओह, दुविधा का समय - इतने सारे समान रूप से अच्छे जवाब हैं, कि मैं अपना खुद का नष्ट कर सकता हूं। लेकिन तब मैं 40 अंक खो देता, और अगर मैं ऐसा करता तो मैं कभी भी जॉन स्कीट को नहीं पकड़ता।
पॉल टॉम्बलिन

3
क्षमा करें -1 एक मानक पुस्तकालय कॉल को रोकने के लिए।
क्लेटस

12
@ क्लेटस, क्या आपने देखा कि मैंने पहले ही मानक पुस्तकालय कॉल का उल्लेख किया था? या कि इस मामले में, "पुनर्निवेश" लाइब्रेरी को कॉल करने वाले कम निर्देश लेता है?
पॉल टॉम्बलिन

इसके अलावा पुस्तकालय कॉल के पीछे के विवरण को समझने के लायक है। खासतौर पर अगर लाइब्रेरी कॉल के साइड इफेक्ट्स हों, या पॉल मेंटीनेंस जैसे परफॉर्मेंस इश्यूज हों।
सिमोन

+1 भी @ क्लेटस -1 के कारण। आप किसी समस्या का सबसे अच्छा मानक समाधान दिखा कर बेहतर प्रोग्रामर बनाते हैं और वह समाधान वास्तव में क्या कर रहा है (या इसके साथ कुछ तुलनात्मक)।
546 बजे फ्रांसिस्को ज़ाराबोज़ो


12

absफ़ंक्शन का उपयोग करें :

int sum=0;
for(Integer i : container)
  sum+=Math.abs(i);

8

यह कोड सकारात्मक संख्याओं पर कॉल करने के लिए सुरक्षित नहीं है

int x = -20
int y = x + (2*(-1*x));
// Therefore y = -20 + (40) = 20

3
हम ऐसा करने के बजाय -1 के साथ गुणा कर सकते हैं। क्या मुझे कुछ याद आ रहा है?
शिव कृति कुमार

7

इसे आज़माएँ (एक्स के सामने नकारात्मक एक मान्य ऑपरेटर है क्योंकि यह मान्य है, यहाँ और अधिक खोजें ):

int answer = -x;

इससे आप सकारात्मक को नकारात्मक और नकारात्मक को सकारात्मक में बदल सकते हैं।


हालाँकि , यदि आप केवल एक ऋणात्मक संख्या को सकारात्मक बनाना चाहते हैं तो यह प्रयास करें:

int answer = Math.abs(x);

या , यदि आप किसी कारण से एब्स () विधि का उपयोग नहीं करना पसंद करेंगे तो यह प्रयास करें:

int answer = Math.sqrt(Math.pow(x, 2));

आशा करता हूँ की ये काम करेगा! शुभ लाभ!


6

क्या आप पूर्ण मूल्यों के बारे में पूछ रहे हैं?

Math.abs (...) वह फ़ंक्शन है जिसे आप संभवतः चाहते हैं।


6

आप प्रत्येक संख्या को लपेटना चाहते हैं Math.abs()। जैसे

System.out.println(Math.abs(-1));

"1" प्रिंट करता है।

यदि आप Math.-part लिखने से बचना चाहते हैं , तो आप Math के उपयोग को सांख्यिकीय रूप से शामिल कर सकते हैं। बस लिखें

import static java.lang.Math.abs;

अपने आयातों के साथ, और आप abs()केवल लिखकर -function का उल्लेख कर सकते हैं

System.out.println(abs(-1));

5

सबसे आसान, अगर क्रिया करने का तरीका प्रत्येक संख्या को Math.abs () कॉल में लपेटना है, तो आप जोड़ देंगे:

Math.abs(1) + Math.abs(2) + Math.abs(1) + Math.abs(-1)

यह समझने के लिए कि आपका कोड कैसे संरचित है, तर्क परिवर्तन के साथ। शब्दशः, शायद, लेकिन यह वही करता है जो आप चाहते हैं।


3
आप इसे स्थैतिक आयात के साथ कम कर सकते हैं।
डैन डायर

1
यदि उसका मूल्यों पर सीधा नियंत्रण है, तो क्या केवल -चिन्ह (निशान) को हटाना बेहतर नहीं होगा ? या अन्यथा, अगर उसका नियंत्रण नहीं है, तो क्या absoluteSum( int[] values ){ /*loop with Math.abs()*/ }प्रत्येक मान में मैन्युअल रूप से Math.abs () को लपेटने के बजाय फ़ंक्शन का उपयोग करना बेहतर होगा ? [-1]
XenoRo

मैं सहमत हूँ। एक अच्छी तरह से नामित फ़ंक्शन में तर्क को इनकैप्सुलेट करने से यह अधिक स्पष्ट हो जाएगा।
एडी

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

ऐसे 2 तरीके हैं जिनसे आप किसी मूल्य को नकार सकते हैं:

  1. मूल्य को नकार कर, ठीक है: value = (-value);
  2. इसे "100% नकारात्मक", या "-1" से गुणा करके: value = value * (-1);

दोनों वास्तव में एक ही सिक्के के दो पहलू हैं। यह सिर्फ इतना है कि आप आमतौर पर याद नहीं है कि value = (-value);वास्तव में है value = 1 * (-value);


खैर, जैसा कि आप वास्तव में जावा में करते हैं, यह बहुत सरल है, क्योंकि जावा पहले से ही इसके लिए एक फ़ंक्शन प्रदान करता है Math class:value = Math.abs(value);

हां, इसके बिना Math.abs()करना बहुत सरल गणित के साथ कोड की एक पंक्ति है, लेकिन आपका कोड बदसूरत क्यों दिखता है? बस जावा के प्रदान किए गए Math.abs()फ़ंक्शन का उपयोग करें ! वे इसे एक कारण के लिए प्रदान करते हैं!

यदि आपको पूरी तरह से फ़ंक्शन को छोड़ने की आवश्यकता है, तो आप उपयोग कर सकते हैं value = (value < 0) ? (-value) : value;, जो कि टार्नेरी ऑपरेटर ( ? :) का उपयोग करके तर्क (3 डी) अनुभाग में वर्णित कोड का एक अधिक कॉम्पैक्ट संस्करण है ।


इसके अतिरिक्त, ऐसी परिस्थितियाँ भी हो सकती हैं जहाँ आप हमेशा किसी ऐसे कार्य के भीतर हानि या अनुपस्थिति का प्रतिनिधित्व करना चाहते हैं जो सकारात्मक और नकारात्मक दोनों मान प्राप्त कर सकता है।

कुछ जटिल जांच करने के बजाय, आप बस पूर्ण मूल्य प्राप्त कर सकते हैं, और इसे नकार सकते हैं: 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;
}

संभावना के आधार पर आपको फिर से संबंधित कोड की आवश्यकता हो सकती है, उन्हें अपने स्वयं के "बर्तनों" पुस्तकालय में जोड़ने के लिए एक अच्छा विचार भी हो सकता है, इस तरह के कार्यों को पहले अपने मुख्य घटकों में विभाजित करना और अंतिम फ़ंक्शन को केवल कॉल के घोंसले के रूप में बनाए रखना। मुख्य घटक 'अब विभाजित कार्य:

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


2

यदि आप दो के पूरक के यांत्रिकी में रुचि रखते हैं, तो यहां बिल्कुल अक्षम है, लेकिन निम्न-स्तरीय तरीका इस प्रकार है:

private static int makeAbsolute(int number){
     if(number >=0){
        return number;
     } else{
        return (~number)+1;
     }
}

यह बिल्कुल अक्षम क्यों है? मुझे ऐसा कोई लूपिंग नहीं दिखता जो इसे अक्षम बनाता हो। क्या मैं कुछ भुल गया?
aldok

2

मैं निम्नलिखित समाधान सुझाऊंगा:

बिना मज़ेदार मज़ा:

    value = (value*value)/value

(उपरोक्त वास्तव में काम नहीं करता है।)

मज़ेदार मज़े के साथ:

   value = Math.abs(value);

14
एक नकारात्मक संख्या में पहले एक परिणाम फिर से नहीं होगा?
user2875404

1
String s = "-1139627840";
BigInteger bg1 = new BigInteger(s);
System.out.println(bg1.abs());

वैकल्पिक रूप से:

int i = -123;
System.out.println(Math.abs(i));

1

लाइब्रेरी फ़ंक्शन Math.abs()का उपयोग किया जा सकता है।
Math.abs()तर्क का निरपेक्ष मान लौटाता है

  • यदि तर्क नकारात्मक है, तो यह तर्क की उपेक्षा लौटाता है।
  • यदि तर्क सकारात्मक है, तो वह संख्या को वैसा ही लौटाता है जैसा वह है।

उदाहरण के लिए:

  1. int x=-5;
    System.out.println(Math.abs(x));

आउटपुट: 5

  1. int y=6;
    System.out.println(Math.abs(y));

आउटपुट: 6


1

ऋणात्मक संख्या को धनात्मक संख्या में बदलने के लिए (इसे पूर्ण मान कहा जाता है), Math.abs () का उपयोग करता है। यह Math.abs () विधि इस तरह से काम करती है

“number = (number < 0 ? -number : number);".

नीचे दिए गए उदाहरण में, Math.abs(-1)ऋणात्मक संख्या 1 को धनात्मक 1 में बदल देगा।

उदाहरण

सार्वजनिक स्थैतिक शून्य 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


0

मुझे लंबे समय के पूर्ण मूल्य की आवश्यकता थी, और मैथ.बेस में गहराई से देखा और पाया कि अगर मेरा तर्क LONG.MIN_VAL से कम है जो -922337203685477580 बैंक है, तो एब्स फ़ंक्शन एक पूर्ण मान नहीं लौटाएगा या केवल न्यूनतम मूल्य। यदि आपका कोड इस एब्स वैल्यू को आगे उपयोग कर रहा है, तो एक समस्या हो सकती है।


4
Long.MIN_VAL का संपूर्ण बिंदु यह है कि आपके पास "LONG.MIN_VAL से कम" लंबे समय तक नहीं हो सकता है।
पॉल टॉम्बलिन

0

क्या आप इसे आज़मा सकते हैं?

public static int toPositive(int number) {
    return number & 0x7fffffff;
}

4
17 अन्य उत्तरों के साथ दस वर्ष पुराने प्रश्न पर आपको यह बताना चाहिए कि आपके उत्तर के प्रश्न का नया पहलू क्या है। किसी प्रश्न के साथ उत्तर शुरू करना, समीक्षा पंक्ति में समाप्त होने पर इसे बंद करने का एक अच्छा तरीका है।
जेसन एलर


-3

यह मत करो

संख्या = (संख्या <0? -नंबर: संख्या);

या

if (संख्या <0) संख्या = -नंबर;

जब आप अपने कोड पर बग ढूंढते हैं तो यह एक बग होगा जो इसे RV_NEGATING_RESULT_OF के रूप में रिपोर्ट करेगा

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.