2012-12-04 15 views
5

मेरे पास एक bufferedreader इनपुट के लिए प्रतीक्षा कर रहा है लेकिन किसी कारण से यह दूसरे पढ़ने की प्रतीक्षा नहीं करता है और मेरा तीसरा प्रिंट स्टेटमेंट प्रिंट करना जारी रखता है।जावा विधि BufferedReader इनपुट पर प्रतीक्षा नहीं कर रहा है?

कोड: कृपया अपने शब्द के लिए एक पत्र दर्ज करें:

BufferedReader inFromUser=new BufferedReader(new InputStreamReader(System.in)); 
char letter,xVal; 
int yVal; 


System.out.println("Please enter a letter for your word.(a-z)"); 
     letter=(char)inFromUser.read(); 
     System.out.println("Please enter a X location for this piece.(A-J)"); 
     xVal=(char)inFromUser.read(); 
     System.out.println("Please enter a Y location for this piece.(0-9)"); 
     yVal=inFromUser.read(); 

उदाहरण निष्पादन इस प्रकार है। // इनपुट यहाँ

पर वेट्स ने एक

इस टुकड़े के लिए एक एक्स स्थान दर्ज करें। // यहाँ इंतजार नहीं करता ???

कृपया इस टुकड़े के लिए एक वाई स्थान दर्ज करें।

+0

दोनों उत्तर पूरी तरह से काम करते हैं और समझाते हैं कि मैं गलत तरीके से क्या कर रहा था। मदद लोगों के लिए धन्यवाद! – user1874257

+0

एनपी, आपका स्वागत है। – dreamcrash

उत्तर

5

ऐसा इसलिए हो रहा है क्योंकि एक बार जब आप एक पत्र लिखने के बाद एंटर दबाते हैं, तो आप स्ट्रीम में न्यूलाइन कैरेक्टर भी भेज रहे हैं।

जब आप read() पर कॉल करते हैं तो पहली बार यह अपेक्षित के रूप में पहला अक्षर लौटाता है। हालांकि, जब आप read() को दूसरी बार कॉल करते हैं, तो यह स्ट्रीम में बफर किए गए न्यूलाइन कैरेक्टर में आसानी से पढ़ा जाएगा, जिससे ऐसा लगता है कि यह एक पढ़ा गया निर्देश छोड़ दिया गया है।

System.out.println("Please enter a letter for your word.(a-z)"); 
letter = inFromUser.readLine().charAt(0); 

तुम भी उपयोगकर्ता केवल इस मामले में कुछ सत्यापन करके इस पर सुधार करना चाहते हो सकता है:

समाधान BufferedReader बता पूरी पंक्ति को पढ़ने के लिए है, तो लाइन से पहले चरित्र लाने के लिए है एक पत्र इनपुट किए बिना प्रेस दर्ज करें।

+0

+1। इनलाइन डालना अच्छा है :) – dreamcrash

5

कारण है कि यह इंतजार कर नहीं किया गया है क्योंकि xVal=(char)inFromUser.read();letter=(char)inFromUser.read();

तो एक समाधान यह एक inFromUser.readLine(); प्रत्येक शीघ्र बाद जोड़ने के लिए पढ़ रहा था लाइन से "\ n":

System.out.println("Please enter a letter for your word.(a-z)"); 
    letter=(char)inFromUser.read(); 
    inFromUser.readLine(); 
    System.out.println("Please enter a X location for this piece.(A-J)"); 
    xVal=(char)inFromUser.read(); 
    inFromUser.readLine(); 
    System.out.println("Please enter a Y location for this piece.(0-9)"); 
    yVal=inFromUser.read(); 
    inFromUser.readLine(); 

आप जोड़ने एक inFromUser.readLine(); प्रत्येक प्रॉम्प्ट के बाद, यह "\ n" पढ़ सकता है।

संबंधित मुद्दे