Aণাত্মক সংখ্যাটিকে ইতিবাচক করুন


146

আমার একটি জাভা পদ্ধতি রয়েছে যাতে আমি সংখ্যার সেট যোগ করছি। যাইহোক, আমি চাই যে কোনও নেতিবাচক সংখ্যাগুলি ধনাত্মক হিসাবে বিবেচিত হবে। সুতরাং (1) + (2) + (1) + (- 1) এর সমান 5 হওয়া উচিত।

আমি নিশ্চিত যে এটি করার খুব সহজ উপায় আছে - আমি কীভাবে তা জানি না।


সহজ গণিতশাস্ত্র stackoverflow.com/a/5220597/185022 :)
AZ_

5
আমাকে অবাক করে দেয় কীভাবে এই জাতীয় প্রাথমিক প্রশ্নগুলি এতগুলি উত্স পেয়ে যায় ...
জোসে রুই সান্টোস

আমার প্রশ্ন এই তুলনায় অধিক যুক্তিসঙ্গত কিন্তু এখনো এটা এত বেশি downvotes হয়েছে
Noone

উত্তর:


366

শুধু ম্যাথ.এবসকে কল করুন । উদাহরণ স্বরূপ:

int x = Math.abs(-5);

যা সেট xহবে 5


42
প্রান্তের কেসগুলি দ্রষ্টব্য, যেমন ম্যাথ.অ্যাবস (পূর্ণসংখ্যা। এমএটিভিএলইউ) = পূর্ণসংখ্যা M
জাচ স্ক্রিভেনা

((একটি <= 0.0 ডি)? 0.0 ডি - এ: এ)
কোইকিবক্স

103

আপনি যে ধারণাটি বর্ণনা করছেন তাকে "পরম মান" বলা হয় এবং জাভাটির কাছে ম্যাথ.এবস নামে একটি ফাংশন রয়েছে এটি আপনার জন্য করতে। অথবা আপনি ফাংশন কল এড়াতে এবং এটি নিজে করতে পারেন:

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

অথবা

if (number < 0)
    number = -number;

21
ওহ, দ্বিধাদ্বন্দ্ব সময় - অনেক সমানভাবে ভাল উত্তর আছে, আমি আমারও মুছে ফেলতে পারে যে। তবে তার পরে আমি ৪০ পয়েন্ট হারাব এবং আমি যদি জোন স্কিটকে এটি করি তবে আমি কখনই তাকে ধরব না।
পল টমলিন 21

3
একটি স্ট্যান্ডার্ড লাইব্রেরি কল পুনর্নবীকরণের জন্য -1।
ক্লিটাস

12
@ ক্লেটাস, আপনি কি লক্ষ্য করেছেন যে আমি ইতিমধ্যে স্ট্যান্ডার্ড লাইব্রেরি কলটি উল্লেখ করেছি? অথবা এই ক্ষেত্রে, "পুনর্নবীকরণ" কম নির্দেশাবলী গ্রহণ করে যা লাইব্রেরিতে ফোন করে?
পল টমবলিন

লাইব্রেরি কল পিছনে বিশদ বোঝার মূল্য। বিশেষত যদি লাইব্রেরি কলটিতে পার্শ্ব প্রতিক্রিয়া থাকে বা পলের উল্লেখ করার মতো পারফরম্যান্স সমস্যা থাকে।
সাইমন 16

@ ক্লেটাস -১ এর কারণেও +1। আপনি কোনও সমস্যার সর্বোত্তম মানের সমাধান এবং সেই সমাধানটি আসলে কী করছে (বা এর সাথে তুলনামূলক কিছু) উভয়ই দেখিয়ে আপনি আরও ভাল প্রোগ্রামার তৈরি করেন।
ফ্রান্সিসকো জারাবোজো


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

আপনি কি পরম মান সম্পর্কে জিজ্ঞাসা করছেন?

ম্যাথ.এবস (...) হ'ল ফাংশন যা আপনি সম্ভবত চান।


6

আপনি প্রতিটি নম্বর মোড়ানো করতে চান Math.abs()। যেমন

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

"1" মুদ্রণ করে।

আপনি যদি Math.পার্ট লেখা এড়াতে চান তবে আপনি স্ট্যাটিলেটিমে ম্যাথ ইউজ করতে পারবেন। শুধু লেখো

import static java.lang.Math.abs;

আপনার আমদানির পাশাপাশি এবং আপনি abs()কেবল লিখেই ফাংশনটি উল্লেখ করতে পারেন

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

5

সবচেয়ে সহজ, যদি ভারবস করার উপায়টি হ'ল ম্যাথ.এবস () কলটিতে প্রতিটি নম্বর মোড়ানো হয়, তবে আপনি যুক্ত করতে পারেন:

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

আপনার কোডটি কীভাবে সংযুক্ত করা হয়েছে তা প্রতিবিম্বিত করার জন্য যুক্তিযুক্ত পরিবর্তনের সাথে। ভার্বোজ, সম্ভবত, তবে এটি আপনি যা চান তা করে।


3
আপনি একটি স্ট্যাটিক আমদানি দিয়ে এটি কম ভার্বোস তৈরি করতে পারেন।
ড্যান ডায়ার

1
মানগুলির যদি তার প্রত্যক্ষ নিয়ন্ত্রণ থাকে তবে কেবল -সাইন (গুলি) মুছে ফেলা ভাল না ? অথবা অন্যথায়, যদি তার নিয়ন্ত্রণ না থাকে তবে সেগুলি সহ absoluteSum( int[] values ){ /*loop with Math.abs()*/ }প্রতিটি মানটিতে ম্যাথ.এবস () কে ম্যানুয়ালি মোড়ানোর পরিবর্তে কোনও ফাংশন ব্যবহার করা কি ভাল নয় ? [-1]
XenoRo

আমি রাজী. কোনও নামযুক্ত ফাংশনে যুক্তি সজ্জিত করা এটি আরও পরিষ্কার করে দেবে।
এডি 15

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
প্রথমটি কি আবার নেতিবাচক সংখ্যার ফলাফল করবে না?
ব্যবহারকারী 2875404

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

নেতিবাচক সংখ্যাটিকে ধনাত্মক সংখ্যায় রূপান্তর করতে (একে পরম মান বলা হয়), ম্যাথ.এবস () ব্যবহার করে। এই ম্যাথ.এবস () পদ্ধতিটি এর মতো কাজ করে

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

নীচের উদাহরণে, Math.abs(-1)1ণাত্মক সংখ্যা 1টিকে ইতিবাচক 1 এ রূপান্তর করবে।

উদাহরণ

পাবলিক স্ট্যাটিক অকার্যকর প্রধান (স্ট্রিং [] আরগস) {

    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 এর চেয়ে কম হয় - -9223372036854775808l, তবে অ্যাবস ফাংশনটি একটি নিখুঁত মান না দিয়ে কেবলমাত্র সর্বনিম্ন মানকে প্রত্যাবর্তন করবে। এই ক্ষেত্রে যদি আপনার কোড এই অ্যাবস মানটি আরও ব্যবহার করে তবে কোনও সমস্যা হতে পারে।


4
Long.MIN_VAL এর সম্পূর্ণ বিন্দুটি হ'ল আপনার "LONG.MIN_VAL এর চেয়ে কম" লম্বা থাকতে পারে না।
পল টমবলিন

0

আপনি কি এটি চেষ্টা করতে পারেন?

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

4
দশ বছরের পুরনো প্রশ্নে অন্য 17 টি উত্তর দিয়ে আপনি প্রশ্নের উত্তরের কোন নতুন দিকটি সম্বোধন করছেন তা ব্যাখ্যা করা উচিত। কোনও প্রশ্নের উত্তর দিয়ে শুরু করা পর্যালোচনা সারিতে শেষ হলে এটি বন্ধ করার একটি ভাল উপায়।
জেসন অ্যালার


-3

এটা করবেন না

সংখ্যা = (সংখ্যা <0?-সংখ্যা: সংখ্যা);

অথবা

যদি (সংখ্যা <0) সংখ্যা =-সংখ্যা;

আপনি যখন আপনার কোডটিতে বাগ সন্ধান করেন তখন এটি একটি ত্রুটি হবে এটি এটি আরভি_এনজিএটিএটিং সংক্ষেপের হিসাবে রিপোর্ট করবে OF

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.