ম্যাথ.র্যান্ডম () ব্যাখ্যা


133

এটি একটি দুর্দান্ত সরল জাভা (যদিও সম্ভবত সমস্ত প্রোগ্রামিংয়ের ক্ষেত্রে প্রযোজ্য) প্রশ্ন:

Math.random() শূন্য এবং একের মধ্যে একটি সংখ্যা প্রদান করে।

আমি যদি শূন্য ও শতাব্দীর মধ্যে একটি পূর্ণসংখ্যা ফেরত দিতে চাই তবে আমি করবো:

(int) Math.floor(Math.random() * 101)

এক থেকে একশ'র মধ্যে আমি করব:

(int) Math.ceil(Math.random() * 100)

তবে আমি যদি তিন থেকে পাঁচয়ের মধ্যে একটি নম্বর পেতে চাই? এটা কি নিম্নলিখিত বিবৃতি মত হবে:

(int) Math.random() * 5 + 3

আমি জানি nextInt()java.lang.util.Random। তবে আমি এটি দিয়ে কীভাবে করব তা শিখতে চাই Math.random()


[৩,৫] এর জন্য:(int)Math.floor(Math.random()*3) + 3
শুভেচ্ছা

9
বিটিডাব্লু: এর পরিসীমা ০.০ সমেত থেকে ১.০ এক্সক্লুসিভ (আপনি বাস্তবে বাস্তবে ১.০ পাবেন না) নেক্সটইন্ট () ব্যবহার করা আরও ভাল পছন্দ, এটি কেবল সহজ নয় আরও দ্রুততরও।
পিটার লরে

2
ব্যবহার Math.ceilকরা ভুল, এটি Math.random()প্রত্যাবর্তনের সময় ভুল ফলাফল দেয় 0
স্টার ব্লু

ম্যাথ.ফ্লুর যদি 0.029 ফেরত দেয় তবে কী হবে? কীভাবে সর্বদা একটি একক বিবৃতি দিয়ে একটি দুই অঙ্কের নম্বর পাবেন?
নাইশিল ভারধন

উত্তর:


165
int randomWithRange(int min, int max)
{
   int range = (max - min) + 1;     
   return (int)(Math.random() * range) + min;
}

randomWithRange(2, 5)10 বার আউটপুট :

5
2
3
3
2
4
4
4
5
4

সীমাগুলি অন্তর্ভুক্ত, অর্থাৎ [2,5], এবং উপরের উদাহরণের minচেয়ে কম হওয়া উচিত max

সম্পাদনা: যদি কেউ চেষ্টা করে মূup় ও বিপরীত হয়ে যাচ্ছিল minএবং maxআপনি কোডটি এতে পরিবর্তন করতে পারেন:

int randomWithRange(int min, int max)
{
   int range = Math.abs(max - min) + 1;     
   return (int)(Math.random() * range) + (min <= max ? min : max);
}

সম্পাদনা 2: আপনার সম্পর্কে আপনার প্রশ্নের জন্য double, এটি ঠিক:

double randomWithRange(double min, double max)
{
   double range = (max - min);     
   return (Math.random() * range) + min;
}

এবং আবার আপনি যদি নির্বোধ-প্রমাণ করতে চান তবে এটি ঠিক:

double randomWithRange(double min, double max)
{
   double range = Math.abs(max - min);     
   return (Math.random() * range) + (min <= max ? min : max);
}

1
আপনি যদি (int)এটি ব্যবহার না করেন এবং এটি একটি ফেরত চান double?
সুইটস

আপনি যদি ডাবল চান তবে কেবল intএস এর সাথে doubleএস প্রতিস্থাপন করুন (এবং টাইপকাস্ট অপ্রয়োজনীয়)। আমি ধরে নিয়েছি আপনি চাইছেন intতবে আমি আমার পোস্টে যুক্ত করব।
অসি ব্লক

2
আসলে এর সাথে এগুলিও doubleসরিয়ে দিন + 1যেহেতু Math.random()কাটা হচ্ছে না। তবে, পরিসীমাটি [মিনিট, সর্বাধিক) হবে যেহেতু Math.random"ধনাত্মক চিহ্নের সাথে একটি ডাবল মান প্রত্যাবর্তন করবে, এটি 0.0 এর চেয়ে বড় বা সমান এবং 1.0 এর চেয়ে কম হবে" " সংখ্যাটি হবার সম্ভাবনা maxথাকলেও হুবহু হবার খুব কম সম্ভাবনা ছিল।
অসি ব্লক

44

আপনি যদি 0 থেকে 100 পর্যন্ত একটি নম্বর উত্পন্ন করতে চান তবে আপনার কোডটি দেখতে এই রকম হবে:

(int)(Math.random() * 101);

10 থেকে 20 পর্যন্ত একটি সংখ্যা তৈরি করতে:

(int)(Math.random() * 11 + 10);

সাধারণ ক্ষেত্রে:

(int)(Math.random() * ((upperbound - lowerbound) + 1) + lowerbound);

(যেখানে lowerboundঅন্তর্ভুক্তি এবং upperboundএকচেটিয়া)।

অন্তর্ভুক্তি বা বর্জন upperboundআপনার পছন্দের উপর নির্ভর করে। এর কথা বলা যাক range = (upperbound - lowerbound) + 1তারপর upperboundসমেত, কিন্তু যদি range = (upperbound - lowerbound)তারপর upperboundস্বতন্ত্র।

উদাহরণ: যদি আমি 3-5-এর মধ্যে পূর্ণসংখ্যা চাই, তবে যদি পরিসীমা (5-3) +1 হয় তবে 5টি অন্তর্ভুক্ত থাকে তবে পরিসীমাটি যদি (5-3) হয় তবে 5টি একচেটিয়া।


2
upperboundএকচেটিয়া? আমি মনে করি এটি অন্তর্ভুক্ত হবে।
বিগত 14

1
@ বিদিত এটি একচেটিয়া

1
ভেবে দেখবেন না যে আপনি বড় ছবি উপরের দিকে যেতে পারেন, উদাহরণ হিসাবে যেমনটি দেওয়া হয়েছে
Teezy7

19

Randomজাভার ক্লাসে অবস্থিত java.utilপ্যাকেজ আপনার উদ্দেশ্য ভাল পরিবেশন করা হবে। এর কিছু nextInt()পদ্ধতি রয়েছে যা পূর্ণসংখ্যা ফেরত দেয়। যে কোনও ইনট আর্গুমেন্ট গ্রহণ করবে সে 0 এবং সেই পরিমানের মধ্যে একটি সংখ্যা উত্পন্ন করবে, পরবর্তীটি অন্তর্ভুক্ত নয়।


আমি আমার প্রশ্ন আপডেট করেছি, আমি এটি দিয়ে কীভাবে করব তা জানতে চাই Math.random()। ধন্যবাদ।
17

1

সমেত 10 থেকে 20 এর মধ্যে একটি সংখ্যা তৈরি করতে, আপনি ব্যবহার করতে পারেন java.util.Random

int myNumber = new Random().nextInt(11) + 10

0

এখানে এমন একটি পদ্ধতি যা সীমানা গ্রহণ করে এবং এলোমেলো পূর্ণসংখ্যা প্রদান করে। এটি সামান্য আরও উন্নত (সম্পূর্ণ সর্বজনীন): সীমানা ধনাত্মক এবং নেতিবাচক উভয় হতে পারে , এবং ন্যূনতম / সর্বাধিক সীমা যে কোনও ক্রমে আসতে পারে।

int myRand(int i_from, int i_to) {
  return (int)(Math.random() * (Math.abs(i_from - i_to) + 1)) + Math.min(i_from, i_to);
}

সাধারণভাবে, এটি সীমানার মধ্যে নিখুঁত দূরত্ব সন্ধান করে, প্রাসঙ্গিক এলোমেলো মান পায় এবং তারপরে নীচের সীমানার ভিত্তিতে উত্তর স্থানান্তর করে ifts

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