আক্ষরিক xyz টাইপ প্রকারের সীমা ছাড়াই


90

আমি জাভাতে এই মুহুর্তে ডেটা ধরণের সাথে কাজ করছি এবং আমি যদি সঠিকভাবে বুঝতে পারি তবে টাইপটি long-9,223,372,036,854,775,808 থেকে +9,223,372,036,854,775,807 এর মধ্যে রয়েছে accep এখন আপনি নীচে দেখতে পাচ্ছেন, আমি একটি longপরিবর্তনশীল নামে পরিচিত তৈরি করেছি testLong, যদিও আমি যখন 9223372036854775807 মান হিসাবে লিখি তখন আমার জানাতে একটি ত্রুটি পাওয়া যায়:

আক্ষরিক 9223372036854775807 টাইপ int এর সীমা ছাড়াই।

আমি জানি না কেন এটি longডেটা টাইপটিকে একটি হিসাবে উল্লেখ করে int

কারো কোন ধারণা আছে?

কোড:

char testChar = 01;
byte testByte = -128;
int testInt = -2147483648;
short testShort = -32768;
long testLong = 9223372036854775807;
float testFoat;
double testDouble = 4.940656458412;
boolean testBool = true;

যাইহোক: আপনি কোন সংকলক ব্যবহার করছেন? Eclipse এবং সূর্য JDK উভয় সংকলকই এই সমস্যার জন্য পৃথক (আমার মতে আরও ভাল) ত্রুটি বার্তা দেয়।
জোচিম সউর

উত্তর:


196

Lশেষ পর্যন্ত একটি মূলধন যোগ করুন :

long value = 9223372036854775807L;

অন্যথায়, সংকলকটি আক্ষরিক হিসাবে একটি পার্স করার চেষ্টা করবে int, সুতরাং ত্রুটি বার্তা


4
এটি জাভা ভাষার চশমাগুলিতে। এখানে
লুকাশ এডার

@ লুকাস, দীর্ঘ মূল্য = 00000077029062100L; আমাকে একই ত্রুটি দেয় এবং এটি 19 টিরও কম সংখ্যক। কোনও আইডিয়া কেন এটি ছুড়ছে "আক্ষরিক 0000007702062100L টাইপ দীর্ঘ সীমার বাইরে"
সন্তোষ কোমহার

4
@ সন্তোষকুমার: এটি একটি অক্টাল আক্ষরিক , যার মধ্যে অঙ্কগুলি 8বা থাকতে পারে না 9। নেতৃস্থানীয় শূন্যগুলি সরান।
লুকাস এদার

51

আমি জানি না কেন এটি দীর্ঘ ডেটা টাইপটিকে কোনও int হিসাবে উল্লেখ করছে

এইটা না. আপনার সংকলক বার্তাগুলির উপর নির্ভর করা শিখতে হবে (বিশেষত যখন সে বুদ্ধিমান, আধুনিক সংকলক এবং প্রাচীন সি / সি ++ সংকলক নয়)। যদিও তারা যে ভাষায় কথা বলে তা কখনও কখনও বোঝা শক্ত হতে পারে তবে তারা সাধারণত আপনার কাছে মিথ্যা বলে না।

এর আবার দেখুন:

ইতিমধ্যে 9223372036854775807 এর আক্ষরিক সীমার বাইরে।

মনে রাখবেন, এটি না আপনার পরিবর্তনশীল উল্লেখ testLongবা টাইপ longযে কোন স্থানে, তাই এটা না আরম্ভের সম্পর্কে। সমস্যাটি অন্য কোনও সময়ে দেখা যাচ্ছে বলে মনে হয়।

এখন বার্তার কিছু অংশ তদন্ত করতে দিন:

  • int আমাদের বলে যে সে কিছু হিসাবে একটি হিসাবে আচরণ করতে চায় int মান (যা আপনি চেয়েছিলেন তা নয়!)
  • "পরিসীমা ছাড়াই" বেশ স্পষ্ট: কিছু প্রত্যাশিত ব্যাপ্তির মধ্যে নেই (সম্ভবত এটির মধ্যে int )
  • "আক্ষরিক": এখন এটি আকর্ষণীয়: আক্ষরিক কী?

আমি এক মুহুর্তের জন্য আক্ষরিক বিষয়ে কথা বলার জন্য আরামদায়ক তালিকাটি ছেড়ে দেব: আক্ষরিকাগুলি এমন জায়গা যা আপনার কোডে আপনার কিছু মূল্য আছে। আছে Stringলিটারেল, intলিটারেল, classলিটারেল ইত্যাদি। প্রতিবার আপনি আপনার কোডে একটি মান স্পষ্টভাবে উল্লেখ করলে এটি আক্ষরিক।

সুতরাং এটি ভেরিয়েবলের ঘোষণাপত্রের বিষয়ে আসলে আপনাকে কড়া নাড়ায়, তবে সংখ্যাটি নিজেই, মানটি এটি আপনাকে হ্রাস করে।

আপনি সহজেই একই আক্ষরিক প্রসঙ্গে যেখানে longও এবং intসমানভাবে গ্রহণযোগ্য তা প্রাসঙ্গিকভাবে যাচাই করতে পারেন :

System.out.println(9223372036854775807);

PrintStream.printlnযে কোনও একটিint বা একটিlong (বা অন্য কোনও কিছু) নিতে পারে। সুতরাং যে কোড ঠিক আছে, ঠিক করা উচিত?

নং ওয়েল, হয়তো এটা করা উচিত , কিন্তু নিয়ম অনুযায়ী এটা হল নয়।

সমস্যাটি হ'ল "কিছু অঙ্ক" intআক্ষরিক হিসাবে সংজ্ঞায়িত এবং সুতরাং এটি দ্বারা সংজ্ঞায়িত ব্যাপ্তিতে থাকতে হবে int

আপনি যদি একটি লিখতে চান longআক্ষরিক, তারপর আপনি যে সংযোজন দ্বারা স্পষ্ট করতে হবে L(অথবা ছোট হাতের l, কিন্তু আমি অত্যন্ত সুপারিশ আপনি সবসময় উপরের কেস বৈকল্পিক ব্যবহার, কারণ এটি অনেক সহজ একটি জন্য ভুল পড়া এবং কঠিন থেকে1 )।

নোট করুন যে float(পোস্টফিক্স F/ f) এবং double(পোস্টফিক্স D/d ) এর ।

পার্শ্ব দ্রষ্টব্য: আপনি বুঝতে পারবেন যে কোনও byteবা shortআক্ষরিক নেই এবং আপনি এখনও মানগুলি (সাধারণত intআক্ষরিক) byteএবং shortভেরিয়েবলগুলি নির্ধারণ করতে পারেন : এসাইনমেন্ট রূপান্তর সম্পর্কে rules 5.2 এ বিশেষ নিয়মের কারণে এটি সম্ভব : তারা বৃহত্তর ধরণের ধ্রুবক প্রকাশের অ্যাসাইনমেন্টের অনুমতি দেয় থেকে byte, short, charবা int যদি মানের প্রকার মধ্যে পরিসীমা আছে।


4
;-) থেকে আপনি কোথায় সময় নিবেন
লুকাশ ইডার

4
@ লুকাস: আমি মাঝে মধ্যে এই জাতীয় জবাবগুলি এই আশায় লিখি যে এর জন্য আমাকে 300 টি ছোট লিখতে হবে না ;-) এছাড়াও: ত্রুটি বার্তাকে ব্যাখ্যা করতে সহায়তা করা (আশা করি) এর অর্থ "প্রশ্নগুলির ত্রুটি বার্তার অর্থ কী"।
জোছিম সউর

আপনার উত্তরটি খুব ভাল ... কোনও সন্দেহ নেই, এ কারণেই আপ-ভোট করুন, তবে দয়া করে এটি সম্পাদনা করুন এবং শীর্ষে (আপনার উত্তরের শুরুতে), ঠিক 1 লাইনে সমস্যার সঠিক সমাধান লিখুন এবং তারপরে আপনার ব্যাখ্যাটির নীচে। কারণ প্রচুর লোক গভীর ব্যাখ্যার চেয়ে দ্রুত সমাধানের সন্ধান করে
শিরীশ হার্ভাডে

4
তারা অন্যান্য দ্বিতীয় উত্তরগুলি দেখতে নির্দ্বিধায় (সর্বোচ্চ-ভোট প্রাপ্ত একটি এমনকি দ্রুত সমাধান দেয়)। আমি মনে করি যে কীভাবে ত্রুটি বার্তাগুলি বিশ্লেষণ করতে এবং বোঝার বিষয়ে লোককে শিক্ষিত করা তাদের জন্য এটি করার চেয়ে দীর্ঘকালীন আরও কার্যকর। "একজনকে একটি মাছ দিন ..." এবং এগুলি সব।
জোচিম সৌর

পার্শ্ব নোট জন্য ধন্যবাদ।
ভেঙ্কটেশ গৌড

19

করার চেষ্টা করুন 9223372036854775807LLশেষে জাভা বলে যে 9223372036854775807একটি হল long


0

আমার অতীতে এই সমস্যা ছিল এবং আমি বৈজ্ঞানিক আকারে মান লিখে এটি স্থির করেছিলাম। উদাহরণ স্বরূপ:

double val = 9e300;

-2
long ak = 34778754226788444L/l;

উভয়ই ব্যবহার করে তবে একই সময়ে একটি মাত্র বড় হাতের এল বা ছোট হাতের এল ব্যবহার করে।

কেন এল / এল ব্যবহার করবেন? কারণ দীর্ঘটি অবিচ্ছেদ্য ডেটাটাইপের একটি অংশ।

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