আকর্ষণীয় সমস্যা আসলে উভয় ক্ষেত্রে লুপটি অন্তহীন নয়
তবে এগুলির মধ্যে প্রধান পার্থক্য হ'ল এটি কখন শেষ হবে এবং x
সর্বাধিক int
মান অতিক্রম করতে কত সময় লাগবে যা এর 2,147,483,647
পরে এটি ওভারফ্লো অবস্থায় পৌঁছে যাবে এবং লুপটি সমাপ্ত হবে।
এই সমস্যাটি বোঝার সর্বোত্তম উপায় হ'ল একটি সাধারণ উদাহরণ পরীক্ষা করা এবং এর ফলাফলগুলি সংরক্ষণ করা।
উদাহরণ :
for(int i = 10; i > 0; i++) {}
System.out.println("finished!");
আউটপুট:
finished!
BUILD SUCCESSFUL (total time: 0 seconds)
এই অসীম লুপটি পরীক্ষা করার পরে এটি শেষ হতে 1 সেকেন্ডেরও কম সময় লাগবে।
for(int i = 10; i > 0; i++) {
System.out.println("infinite: " + i);
}
System.out.println("finished!");
আউটপুট:
infinite: 314572809
infinite: 314572810
infinite: 314572811
.
.
.
infinite: 2147483644
infinite: 2147483645
infinite: 2147483646
infinite: 2147483647
finished!
BUILD SUCCESSFUL (total time: 486 minutes 25 seconds)
এই পরীক্ষার ক্ষেত্রে আপনি প্রোগ্রামটি শেষ করে শেষ করতে এবং শেষ করতে শেষ হওয়া সময়ের মধ্যে একটি বিরাট পার্থক্য লক্ষ্য করবেন।
আপনি যদি ধৈর্য না রাখেন তবে আপনি ভাববেন যে এই লুপটি অন্তহীন এবং শেষ হবে না তবে বাস্তবে এটি সমাপ্ত হতে এবং i
মূল্য থেকে ওভারফ্লো অবস্থায় পৌঁছাতে কয়েক ঘন্টা সময় লাগবে ।
লুপের জন্য প্রিন্ট স্টেটমেন্টটি ভিতরে রাখার পরে শেষ পর্যন্ত আমরা উপসংহারে পৌঁছেছি যে প্রিন্ট বিবৃতি ছাড়াই প্রথম ক্ষেত্রে লুপের চেয়ে অনেক বেশি সময় লাগবে।
প্রোগ্রামটি পরিচালনার জন্য নেওয়া সময়টি নির্দিষ্ট প্রক্রিয়াকরণ শক্তি (প্রসেসরের ক্ষমতা), অপারেটিং সিস্টেম এবং আপনার আইডিই যা প্রোগ্রামটি সংকলন করে তা আপনার কম্পিউটারের স্পেসিফিকেশনের উপর নির্ভর করে।
আমি এই ক্ষেত্রে এই পরীক্ষা:
লেনোভো 2.7 গিগাহার্টজ ইন্টেল কোর আই 5
ওএস: উইন্ডোজ 8.1 64x
আইডিই: নেটবিয়ানস 8.2
প্রোগ্রামটি শেষ করতে প্রায় 8 ঘন্টা (486 মিনিট) সময় লাগে।
এছাড়াও আপনি খেয়াল করতে পারেন যে লুপের জন্য ধাপে বৃদ্ধিটি সর্বোচ্চ ধাপের মানটিতে i = i + 1
পৌঁছানোর জন্য খুব ধীর ফ্যাক্টর।
কম সময়ে লুপের পরীক্ষা করার জন্য আমরা এই ফ্যাক্টরটি পরিবর্তন করতে পারি এবং পদক্ষেপের বৃদ্ধি আরও দ্রুত করতে পারি।
যদি আমরা এটি রাখি i = i * 10
এবং পরীক্ষা করি:
for(int i = 10; i > 0; i*=10) {
System.out.println("infinite: " + i);
}
System.out.println("finished!");
আউটপুট:
infinite: 100000
infinite: 1000000
infinite: 10000000
infinite: 100000000
infinite: 1000000000
infinite: 1410065408
infinite: 1215752192
finished!
BUILD SUCCESSFUL (total time: 0 seconds)
আপনি দেখতে পাচ্ছেন এটি আগের লুপের সাথে তুলনা করে খুব দ্রুত
প্রোগ্রামটি শেষ করতে এবং শেষ করতে এটি 1 সেকেন্ডেরও কম সময় নেয়।
এই পরীক্ষাটি উদাহরণ আমার মনে হয় এটা সমস্যা নির্মল এবং বৈধতা প্রমাণ করা উচিত পর Zbynek Vyskovsky - kvr000 এর উত্তর , এছাড়াও এটি এই উত্তর হতে হবে প্রশ্ন ।
x
সীমাটি দ্রুত বৃদ্ধি পায়j
। অন্য কথায়j
কখনই উপরের বাউন্ডে আঘাত করবে না, তাই লুপটি "চিরকাল" চলবে। ঠিক আছে, চিরকালের জন্য নয়, আপনি সম্ভবত কোনও সময়ে একটি ওভারফ্লো পাবেন।