stdin

2012-10-27 41 views
13

से हो रही इनपुट मैंstdin

3 
10 20 30 

की पहली संख्या दूसरी पंक्ति में संख्या की राशि है के लिए में stdin से इनपुट प्राप्त करना चाहते हैं। यहां मुझे जो मिला है, लेकिन यह लूप में फंस गया है ... इसलिए मुझे विश्वास है। मैं डीबग मोड में भाग गया और सरणी किसी भी मूल्य को असाइन नहीं कर रही है ...

import java.util.*; 

public class Tester { 

    public static void main (String[] args) 
    { 

     int testNum; 
     int[] testCases; 

     Scanner in = new Scanner(System.in); 

     System.out.println("Enter test number"); 
     testNum = in.nextInt(); 

     testCases = new int[testNum]; 

     int i = 0; 

     while(in.hasNextInt()) { 
      testCases[i] = in.nextInt(); 
      i++; 
     } 

     for(Integer t : testCases) { 
      if(t != null) 
       System.out.println(t.toString());    
     } 

    } 

} 

उत्तर

10

इसे स्थिति के साथ करना है।

in.hasNextInt() 

यह आप पाशन और उसके बाद के बाद तीन पुनरावृत्तियों 'मैं' मान 4 और testcases के बराबर है [4] फेंकता ArrayIndexOutOfBoundException रखने देता है।

करने के लिए समाधान हो सकता है इस

for (int i = 0; i < testNum; i++) { 
*//do something* 
} 
+0

धन्यवाद .. किसी कारण से यह लूप के साथ काम करता है; हालांकि यह थोड़ी देर के साथ काम नहीं करता है .. – miatech

3

अद्यतन आपके जबकि नीचे के रूप में केवल वांछित संख्या को पढ़ने के लिए:

 while(i < testNum && in.hasNextInt()) { 

अतिरिक्त शर्त && i < testNumwhile में जोड़ा एक बार संख्या पढ़ने बंद हो जाएगा अपने आपके सरणी आकार के बराबर संख्याओं को पढ़ा है, अन्यथा यह अनिश्चित हो जाएगा और आपको ArrayIndexOutOfBoundException मिलेगा जब संख्या सरणी testCases पूर्ण है यानी आपके साथ पढ़ रहे हैंसंख्या।

+1

स्थिति को जोड़ने के बाद भी यह लूप के साथ क्यों काम करता है, लेकिन मैंने आपकी विधि की कोशिश की और यह काम नहीं किया, अजीब बात यह है कि इसे अपडेट करना चाहिए प्रत्येक पुनरावृत्ति – miatech

+0

के साथ 'i' चर है hasNextInt() विधि के साथ कुछ है जो लूपिंग रखता है या अगले int के लिए प्रतीक्षा करता है ... – miatech

+1

@miatech यह मूर्ख था। हमें 'i