2013-04-16 11 views
8

यह शायद सबसे आसान चीजों में से एक है लेकिन मैं नहीं देख रहा हूं कि मैं क्या गलत कर रहा हूं।अगलीलाइन() एक खाली स्ट्रिंग क्यों लौट रही है?

मेरा इनपुट एक संख्या (पढ़ने के लिए लाइनों की संख्या), डेटा के साथ लाइनों का एक समूह और केवल अंतिम पंक्ति के साथ एक अंतिम पंक्ति शामिल है \ n। मुझे इस इनपुट को संसाधित करना चाहिए और आखिरी पंक्ति के बाद, कुछ काम करें।

5 
test1 
test2 
test3 
test4 
test5 
     /*this is a \n*/ 

और के लिए इनपुट मैं इस कोड है पढ़ने:

मैं इस इनपुट है।

int numberRegisters; 
String line; 

Scanner readInput = new Scanner(System.in); 

numberRegisters = readInput.nextInt(); 

while (!(line = readInput.nextLine()).isEmpty()) { 
    System.out.println(line + "<"); 
} 

मेरा सवाल है कि मैं कुछ भी प्रिंट क्यों नहीं कर रहा हूं? कार्यक्रम पहली पंक्ति पढ़ता है और फिर कुछ भी नहीं करता है।

+0

बीटीडब्ल्यू, पहले नंबर की संख्या परीक्षण की संख्या है? – RiaD

+0

लाइन के साथ line.isEmpty() को प्रतिस्थापित करने का प्रयास करें! = शून्य? – user2147970

+0

हां यह – Favolas

उत्तर

31

nextInt निम्नलिखित नए-रेखा वर्ण को नहीं पढ़ता है, इसलिए पहले nextLine (which returns the rest of the current line) हमेशा खाली स्ट्रिंग लौटाएंगे।

यह काम करना चाहिए:

numberRegisters = readInput.nextInt(); 
readInput.nextLine(); 
while (!(line = readInput.nextLine()).isEmpty()) { 
    System.out.println(line + "<"); 
} 

लेकिन मेरी सलाह के साथ nextInt/nextDouble/next/आदि क्योंकि किसी को भी कोड बनाए रखने की कोशिश (अपने आप को शामिल), के बारे में पता नहीं हो सकता है या nextLine मिश्रण नहीं है उपरोक्त कोड द्वारा कुछ हद तक भ्रमित हो गया है, तो भूल गए हैं।

तो मेरा सुझाव है:

numberRegisters = Integer.parseInt(readInput.nextLine()); 

while (!(line = readInput.nextLine()).isEmpty()) { 
    System.out.println(line + "<"); 
} 
+0

डॉन नहीं रोकता है! । इस व्यवहार पर कोई स्पष्टीकरण क्यों? –

1

मुझे लगता है कि मैंने पहले इस मुद्दे को देखने गए हैं। मैं आपको एक और readInput.nextLine() वरना तुम सिर्फ 5 के अंत के बीच पढ़ रहे हैं, और \n कि

int numberRegisters; 
String line; 

Scanner readInput = new Scanner(System.in); 

numberRegisters = readInput.nextInt(); 
readInput.nextLine(); 

while (!(line = readInput.nextLine()).isEmpty()) { 
    System.out.println(line + "<"); 
} 
0

के बाद जोड़ने के लिए वास्तव में यह सवाल पूरी तरह से उत्तर नहीं मिलता है (क्यों अपने कोड नहीं है की जरूरत है काम कर रहा है) लेकिन आप निम्नलिखित कोड का उपयोग कर सकते हैं।

int n = Integer.parseInt(readInput.readLine()); 
for(int i = 0; i < n; ++i) { 
    String line = readInput().readLine(); 
    // use line here 
} 

मेरे लिए यह अधिक पठनीय है और यहां तक ​​कि

BTW (फ़ाइल के अंत में अतिरिक्त जानकारी के साथ) इस तरह के दुर्लभ मामलों में अपने समय की बचत हो सकती है जब testcases सही नहीं हैं, लगता है कि आप कुछ प्रोग्रामिंग में भाग लेने प्रतियोगिता। ध्यान दें, स्कैनर बहुत सारे डेटा इनपुट करने में काफी धीमा हो सकता है। आप संभावित का उपयोग कर StringTokenizer (इस कार्य में आवश्यक नहीं)

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