2013-04-25 8 views
7
public static void main(String[] args) { 

     Scanner scan = new Scanner(System.in); 
     try { 
      while (scan.hasNextLine()){ 

       String line = scan.nextLine().toLowerCase(); 
       System.out.println(line); 
      } 

     } finally { 
      scan.close(); 
     } 
    } 

बस सोच रहा है कि इनपुट में प्रवेश करने के बाद मैं प्रोग्राम को कैसे समाप्त कर सकता हूं? स्कैनर के बाद भी जारी रहेगा के रूप में कई "Enter" यह सोचते हैं मैं आदानों में प्रवेश जारी रखने के लिए जा रहा हूँ ... मैंने कोशिश की:इनपुट पूर्ण होने पर स्कैनर को कैसे समाप्त करें?

if (scan.nextLine() == null) System.exit(0); 

और

if (scan.nextLine() == "") System.exit(0); 

वे काम नहीं किया .... कार्यक्रम जारी है और मूल मंशा के साथ गड़बड़,

उत्तर

18

समस्या यह है कि एक प्रोग्राम (जैसे आपका) यह नहीं जानता कि उपयोगकर्ता ने तब तक इनपुट दर्ज कर लिया है जब तक कि उपयोगकर्ता ... किसी भी तरह ... इसे ऐसा नहीं बताता।

  • मार्कर एक "फ़ाइल का अंत" दर्ज करें:

    इन दो तरीकों उपयोगकर्ता ऐसा कर सकता है कर रहे हैं। UNIX पर कि (आमतौर पर) CTRL + डी, और Windows पर CTRL + जेड। इसके परिणामस्वरूप hasNextLine()false लौटाएगा।

  • प्रोग्राम द्वारा मान्यता प्राप्त कुछ विशेष इनपुट दर्ज करें जिसका अर्थ है "मैं कर चुका हूं"। उदाहरण के लिए, यह एक खाली रेखा हो सकती है, या कुछ विशेष मूल्य जैसे "निकास" हो सकता है। कार्यक्रम को विशेष रूप से इसके लिए परीक्षण करने की आवश्यकता है।

(तुम भी क़यास एक टाइमर इस्तेमाल कर सकते हैं, और लगता है कि अगर वे उपयोगकर्ता एन सेकंड, या एन मिनट के लिए किसी भी इनपुट में प्रवेश नहीं करते समाप्त हो गया है। लेकिन ऐसा करने के लिए एक उपयोगकर्ता के अनुकूल तरीका नहीं है इस।)


कारण अपने वर्तमान संस्करण विफल हो रहा है कि आप == उपयोग कर रहे हैं एक खाली स्ट्रिंग के लिए परीक्षण करने के लिए है। आपको या तो equals या isEmpty विधियों का उपयोग करना चाहिए।

अन्य बातों पर विचार करने की स्थिति संवेदनशीलता (जैसे "बाहर निकलें" बनाम "बाहर निकलें") और अग्रणी या पिछली सफेद जगहों के प्रभाव (जैसे "निकास" बनाम "बाहर निकलें")।

0

इस दृष्टिकोण के साथ, आपको स्पष्ट रूप से निकास आदेश या निकास की स्थिति बनाना होगा। उदाहरण के लिए:

String str = ""; 
while(scan.hasNextLine() && !((str = scan.nextLine()).equals("exit")) { 
    //Handle string 
} 

साथ ही, आप स्ट्रिंग संभाल चाहिए .equals() नहीं == साथ मामलों के बराबर होती है। == दो तारों के पते की तुलना करता है, जो कि, जब तक कि वे वास्तव में एक ही वस्तु नहीं हैं, कभी भी सत्य नहीं होंगे।

3

स्ट्रिंग तुलना .equals() और == का उपयोग करके की जाती है।

तो, scan.nextLine().equals("") आज़माएं।

1

आप विशिष्ट पैटर्न जो इंगित करता है अपने इनपुट के अंत उदाहरण के लिए कहते हैं कि देखने के लिए होगा "##"

// TODO Auto-generated method stub 
    Scanner scan = new Scanner(System.in); 
    try { 
     while (scan.hasNextLine()){ 

      String line = scan.nextLine().toLowerCase(); 
      System.out.println(line); 
      if (line.equals("##")) { 
       System.exit(0); 
       scan.close(); 
      } 
     } 

    } finally { 
     if (scan != null) 
     scan.close(); 
    } 
+0

बहुत बहुत धन्यवाद :) – user2318175

0

इस मामले में, मैं, क्या तुम का उपयोग करने की सलाह देते हैं, जबकि जबकि के बजाय पाश।

Scanner sc = new Scanner(System.in); 
    String input = ""; 
    do{ 
     input = sc.nextLine(); 
     System.out.println(input); 
    } while(!input.equals("exit")); 
sc.close(); 

प्रोग्राम से बाहर निकलने के लिए, आपको बस एक स्ट्रिंग हेडर असाइन करने की आवश्यकता है उदा। बाहर जाएं। यदि इनपुट बाहर निकलने के बराबर है तो प्रोग्राम बाहर निकलने जा रहा है। इसके अलावा, उपयोगकर्ता प्रोग्राम से बाहर निकलने के लिए नियंत्रण + सी दबा सकते हैं।

0

आप कंसोल से इनपुट की अगली पंक्ति देख सकते हैं, और आपकी समाप्ति प्रविष्टि (यदि कोई हो) के लिए जांच कर सकते हैं।

मान लीजिए कि आपके समाप्त प्रविष्टि "छोड़ने" है तो आप इस कोड का प्रयास करना चाहिए: -

Scanner scanner = new Scanner(System.in); 
    try { 
     while (scanner.hasNextLine()){ 

      // do your task here 
      if (scanner.nextLine().equals("quit")) { 
       scanner.close(); 
      } 
     } 

    }catch(Exception e){ 
     System.out.println("Error ::"+e.getMessage()); 
     e.printStackTrace(); 
}finally { 
     if (scanner!= null) 
     scanner.close(); 
    } 

, इस code.Your समाप्त लाइन आपके द्वारा दर्ज किया जाना चाहिए की कोशिश करो जब आप बंद/स्कैनर को समाप्त करना चाहते।

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