2011-10-30 13 views
12

के बजाय पहले शब्द को पढ़ता है मेरे वर्तमान कार्यक्रम में एक विधि उपयोगकर्ता को String इनपुट के रूप में उत्पाद का विवरण दर्ज करने के लिए कहती है। हालांकि, जब मैं बाद में इस जानकारी को मुद्रित करने का प्रयास करता हूं, तो String का पहला शब्द दिखाता है। इसका कारण क्या हो सकता है?स्कैनर केवल

void setDescription(Product aProduct) { 
    Scanner input = new Scanner(System.in); 
    System.out.print("Describe the product: "); 
    String productDescription = input.next(); 
    aProduct.description = productDescription; 
} 

तो अगर उपयोगकर्ता इनपुट "नारंगी स्वाद के साथ जगमगाती सोडा" है, System.out.print केवल "जगमगाती" निकलेगा: मेरी विधि इस प्रकार है।

किसी भी मदद की सराहना की जाएगी!

उत्तर

27

nextLine() साथ next() बदलें:

String productDescription = input.nextLine(); 
+5

आपने मुझे हराया, 8 सेकंड +1 –

+0

बहुत बढ़िया। आपका बहुत बहुत धन्यवाद! यह काम किया :) – Kristian

8

उपयोग input.nextLine(); बजाय input.next();

+0

धन्यवाद। यह एक आकर्षण की तरह काम करता है :) – Kristian

3

javadocs for Scanner आपके प्रश्न का उत्तर

एक स्कैनर परिसीमक के पैटर्न, का उपयोग कर टोकन में अपने इनपुट टूट जाता है जो डिफ़ॉल्ट मैट्स स्पेस से मेल खाता है।

आप() की तरह

Scanner s = new Scanner(); 
s.useDelimiter("\n"); 
+2

क्यों इसके साथ गड़बड़ है जब अगलीलाइन() विशेष रूप से इस स्थिति के लिए लिखा गया था और सभी अच्छी तरह से हल करता है? –

1

input.next कुछ कर रही द्वारा चूक खाली स्थान के पैटर्न स्कैनर उपयोग कर रहा है बदल सकता है इनपुट स्ट्रिंग के पहले whitsepace-सीमांकित शब्द में ले जाता है। तो डिजाइन द्वारा यह आपके द्वारा वर्णित किया गया है। input.nextLine() आज़माएं।

+0

बहुत बहुत धन्यवाद! यह अब काम किया :) – Kristian

1

बचाव के लिए Javadoc:

एक स्कैनर परिसीमक के पैटर्न, का उपयोग कर टोकन में अपने इनपुट टूट जाता है जो डिफ़ॉल्ट रूप से खाली स्थान के मेल खाता है

nextLine शायद विधि का उपयोग करना चाहिए है।

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