การรับข้อมูลทางแป้นพิมพ์โดยใช้คลาสของ stream จัดทำโดย : Mr.POP พิมพ์
 Untitled Document สวัสดีครับ ในบทความนี้ผมจะกล่าวถึงเรื่องของการรับข้อมูลเข้าทางแป้นพิมพ์ใน Java ก่อนที่จะไปพูดเรื่องคำสั่ง if แบบที่ 3 นะครับ เพราะว่าในโค้ดบางส่วนจะมีการให้เรากรอกข้อมูลทางแป้นพิมพ์ก่อนแล้วนำผลไปทำงานต่อไป ให้มองภาพว่าคล้ายกับภาษา c ที่มี cin หรือ scanf แหละครับ แต่ขอบอกว่าใน Java อาจจะใช้ยากกว่านะครับ ไม่พูดมากแล้วมาลองดูกันเลยครับ ลองพิมพ์โค้ดต่อไปนี้แล้วรันดูนะครับ

อธิบายโปรแกรม จากโปรแกรมผมจะสร้าง method ขึ้นมาหนึ่งตัวชื่อ read นะครับ มันจะทำหน้าที่เหมือนคำสั่ง cin หรือ scanf ในภาษา c นะครับ คือ รอรับข้อมูลทางแป้นพิมพ์ ผมขอยกตัวอย่างคำสั่งของภาษา c มาเปรียบเทียบจะได้เห็นภาพได้ชัดเจนขึ้นนะครับ ถ้าใครยังไม่เคยเขียนภาษา c มาก่อนก็ไม่เป็นไรครับ มาดูที่โครงสร้างของ read กันต่อเลยครับ

จากบรรทัดที่ 4 จะเห็นว่า method นี้จะมี type เป็น String คือรับค่าที่ return กลับมาเป็นชนิดข้อความ ส่วน throws IOException นั้นเป็นคลาสที่ใช้ในการตรวจจับข้อผิดพลาดในการ stream ข้อมูลเข้ามาของคลาส BufferedReader นะครับ สำหรับใครที่อ่านแล้วงงๆ ก็ขอให้อ่านพอผ่านๆ ไปก่อนนะครับ เพราะในภาษา Java นั้นมี class และ method อีกมากมายที่เราต้องเรียนรู้ แล้ววันหนึ่งท่านจะเข้าใจไปเองแหละครับ ถ้าท่านยังอยู่ในวงการ Java ต่อไป เอาเป็นว่าตอนนี้เขียนตามนี้ไปก่อน

บรรทัดที่ 6 จะเป็นการประกาศ object ชื่อ din จากคลาส BufferedReader ซึ่งคลาสนี้อยู่ใน java.io นั่นเองนะครับ สาเหตุที่เราต้องสร้าง object จากคลาสนี้นั้น เนื่องจากเราจะไปใช้ method readLine() ซึ่งทำหน้าที่อ่านข้อความที่เราพิมพ์เข้ามาจากแป้นพิมพ์ ส่วน new InputStreamReader(System.in) เป็นเรียกใช้ constructor ของคลาส InputStreamReader แล้วส่งไปให้คลาส BufferedReader โดยเราจะใช้ System.in ในการรอรับข้อมูลจากผู้ใช้ทางแป้นพิมพ์นั่นเอง

บรรทัดที่ 7 จะเป็นการสร้างตัวแปร s เป็นสตริงเพื่อใช้รับค่าที่เป็นข้อความนั่นเอง ส่วนบรรทัดที่ 8 จะเป็นการเรียกใช้ method ชื่อ readLine() โดยใช้ object din เรียก โดย readLine() จะทำการอ่านข้อความที่เราพิมพ์ทางแป้นพิมพ์แล้วเก็บค่าไว้ที่ s นั่นเอง

จากนั้นเรามาดูที่ main นะครับ เราจะสร้าง object มาหนึ่งตัวจากคลาส EX10 นะครับชื่อ din เหมือนกับใน read เลย แต่จริงๆ จะใช้ชื่ออะไรก็ได้ครับในการสร้าง object ไม่จำเป็นต้องเหมือนกับใน read ก็ได้จะเห็นว่าที่ท้าย main ต้องม throws IOException ด้วยนะครับเพราะเราจะเรียกใช้ read ซึ่งจำเป็นจะต้องมีการตรวจจับข้อผิดพลาดดังได้กล่าวมาแล้วจากนั้นเมื่อรันโปรแกรมแล้วจะมีการรอรับชื่อให้เราลองใส่ชื่อลงไปจากนั้นจะมีการรอรับค่าที่เป็นตัวเลขให้เราลองใส่ค่าตัวเลขลงไปนะครับ แต่ปัญหาจะเกิดขึ้นว่าตัวเลขที่เราใส่เข้าไปจะจะถูกมองเป็นสตริง ครับซึ่งจะนำไปคำนวณไม่ได้ ดังนั้นเราจึงใส่โค้ดในบรรทัดที่ 21 ลงไปเพื่อแปลงค่า s ที่รับมาเป็นตัวเลข โดยใช้คลาส Integer ช่วยในการแปลงแล้วนำไปเก็บไว้ที่ตัวแปร num จากนั้นก็ให้แสดงค่าออกมาโดยผมจะลองเอา num+1 เพื่อทำให้เห็นว่า num นั้นคำนวณได้จริง

เป็นอย่างไรกันบ้างครับ เล่นเอาเหนื่อยเลยนะครับแค่จะรับข้อมูลทางแป้นพิมพ์ นี่ถ้าเป็นภาษา c ใช้ cin หรือ scanf ก็จบไปนานแล้วครับ บางคนสงสัยว่า แล้วเขาจะทำให้ยุ่ง ยากทำไมอ่ะ ถ้างั้นไปใช้ภาษา c ไม่ดีกว่าหรือ? ในมุมมองของผมภาษา Java เขาจะเน้นไปที่การใช้ GUI (Graphic User Interfaces) ติดต่อกับผู้ใช้เสียมากกว่าที่จะ มารับข้อมูลทางแป้นพิมพ์โดยผ่าน DOS น่ะครับ ซึ่งถ้าท่านติดตามบทความของผมต่อไปจะพบว่าการเขียนโปรแกรมโดยใช้ GUI ใน Java นั้นทำได้ง่ายมากเลยครับแล้ว จะมี class และ method ให้เราสามารถเลือกใช้งานได้หลากหลาย ส่วนคลาสที่เราเรียนรู้ในบทความนี้จะถูกว่า stream ซึ่งมันก็มีประโยชน์นะครับ เช่น เราอาจจะ ใช้ในการส่งข้อมูลผ่าน network ซึ่งเราจะต้องส่งข้อมูลออกไปเป็นลักษณะเป็นเส้นทาง เป็นแถวออกไปนั่นเอง ดังนั้นเราจึงดัด แปลงมันมาใช้ให้รับข้อมูลทางแป้นพิมพ์ผ่าน DOS เพื่อใช้กับบางโปรแกรมที่เราต้องการรับค่ามานั่นเอง ก่อนที่เราจะไปเรียนรู้การเขียนแบบ GUI ต่อไป

สำหรับบทความนี้ผมคงขอจบเพียงเท่านี้ครับ ค่อยๆ เรียนรู้ไปทีละนิดครับ ไม่มีอะไรยากเกินไปสำหรับคนที่ใฝ่รู้ครับ ...


คุณอาจสนใจ
เหตุผลที่คุณควรใช้ไฟร์วอลล์คอมพิวเตอร์
สายลม (15,057 - 19 เม.ย. 51)
เคล็ดไม่ลับ กับการยกเลิกการผสาน Cell ใน Excel 97
Mr.GuruZ (33,413 - 02 ก.ค. 49)
การคำนวณข้ามชีท (ต่อ)
nut (50,136 - 02 ก.ค. 49)
โครงสร้างและการใช้งาน Method
Mr.POP (58,456 - 05 พ.ย. 49)
ความหมายของ static
Mr.POP (46,910 - 05 พ.ย. 49)
การใส่หัวข้อให้กับเอกสาร HTML
สายลม (43,845 - 04 มิ.ย. 49)
เลือกแสดงแถบเครื่องมือแบบแถวเดียว หรือสองแถว
นายนุก (19,978 - 06 มี.ค. 51)
มาทำให้เว็บเราเปลี่ยนภาษาได้กันเถอะ
~๐จอมขมังโค้ด๐~ (54,208 - 03 มิ.ย. 49)