परीक्षक चेतावनी
ए. क्लासिक बफ़र स्किप बग:
§5
nextInt(),
nextDouble(), और
next() जैसी विधियां केवल लक्ष्य टोकन को स्कैन करती हैं, जिससे अनुगामी न्यूलाइन वर्ण (ENTER कुंजी द्वारा उत्पन्न
\n) कीबोर्ड स्ट्रीम में बिना पढ़े रह जाता है।
System.out.print('रोल नंबर दर्ज करें:');
int रोल = in.nextInt(); // उपयोगकर्ता 105 टाइप करता है और ENTER दबाता है (
)
System.out.print('पूरा नाम दर्ज करें:');
स्ट्रिंग नाम = in.nextLine(); // कीड़ा! बचे हुए को तुरंत खा लेता हूं'
' और छोड़ देता है!
बी. असफल-सुरक्षित समाधान (बफर क्लियरिंग):
पूरी पंक्ति पढ़ने का प्रयास करने से पहले संख्यात्मक या एकल-शब्द इनपुट पढ़ने के तुरंत बाद हमेशा एक अतिरिक्त डमी in.nextLine(); डालें:
System.out.print('रोल नंबर दर्ज करें:');
int रोल = in.nextInt();
in.nextLine(); // बफर फ्लश! उपभोग करता है और अनाथ को त्याग देता है'
'
System.out.print('पूरा नाम दर्ज करें:');
स्ट्रिंग नाम = in.nextLine(); // त्रुटिहीन रूप से काम करता है! वास्तविक उपयोगकर्ता इनपुट के लिए रुकता है.