คลังเก็บหมวดหมู่: ไม่มีหมวดหมู่

1. การติดตั้งโปรแกรม Eclipse

___________________

รับสอนเขียนJAVA , C# , VB.net

โทร 0853507540

___________________

1. การติดตั้งโปรแกรม Eclipse

ก่อนที่เราจะสามารถเขียนโปรแกรมด้วยภาษาจาวาได้ ก็ต้องเริ่มจากการดาวน์โหลดและติดตั้งโปรแกรมที่มีความจำเป็นต่อการเขียนให้เรียบร้อยเสียก่อน

ก่อนอื่นเริ่มจากสร้างความเข้าใจคร่าวๆต่อการพัฒนาโปรแกรมด้วยภาษาจาวา ซึ่งมีส่วนสำคัญอยู่ด้วยกัน 2 ส่วน ได้แก่

1.Java Development Kit (JDK) เป็นตัวช่วยสำหรับการพัฒนาภาษาจาวาซึ่งจะประกอบไปด้วยคอมไพเลอร์(compiler)[1]และดีบักเกอร์(debugger)[2]

2.Editor เป็นโปรแกรมที่ใช้ในการเขียนภาษาจาวา คล้ายเป็นกระดาษสำหรับเขียนโค๊ด(Code)

แต่อย่างไรก็ตามการพัฒนาโปรแกรมภาษาจาวาด้วยการเขียนลงใน Editor ก่อนนั้น เมื่อเราต้องการคอมไพล์และรันโปรแกรมจะต้องทำการเปิด Command Prompt เพื่อเรียกคำสั่งสำหรับการคอมไพล์ ต่อมาจึงได้มีการพัฒนาโปรแกรมให้สามารถใช้งานได้สะดวกยิ่งขึ้นด้วยการสร้าง IDE(Integrated Development Environment) โดยที่ IDE นั้นจะทำให้สามารถเขียนโปรแกรมและคอมไพล์ได้เลย หรือก็คือทำหน้าที่เป็นทั้ง JDK และ Editor ได้พร้อมกัน โปรแกรมสำหรับการเขียนโปรแกรมจาวาที่จะกล่าวถึงต่อไปนี้มีชื่อว่า “Eclipse” ซึ่งเป็น IDE ที่มีการพัฒนาปรับปรุงอย่างสม่ำเสมอ

 

รูป1-1

 

1.ขั้นตอนแรกให้พิมพ์คำค้นหา “eclipse” ลงใน google.com จะปรากฏตัวเลือกการค้นหาขึ้นมาดังภาพ

 

รูป1-2

2.เลือกตัวแสดงผลการค้นหาดังภาพ https://www.eclipse.org/downloads/

 

รูป1-3

หมายเลข 1 — เป็นจาวามาตรฐานสำหรับการใช้งานจาวา โดยให้เลือกดาวน์โหลดตัวนี้

หมายเลข 2 — เป็นโปรแกรมพัฒนาภาษาจาวาฉบับสมบูรณ์ โดยจะผนวกรวม หมายเลข 1 เข้ากับJava EE ที่สนับสนุนการทำงานบนเซิร์ฟเวอร์อินเตอร์เน็ต(server-side application) ได้แก่ Java Server Page(JSP), Java Servlet เป็นต้น แต่ใช้เวลาในการดาวน์โหลดนาน

หมายเลข 3 – สำหรับการใช้งานปกติ

หมายเลข 4 – สำหรับผู้ต้องใช้ภาษา C++ (อ่านว่า ซีพลัสพลัส)

            จะสังเกตเห็นว่าบริเวณสัญลักษณ์การดาวน์โหลด  จะมีให้เลือกว่าเป็นระบบปฏิบัติการรุ่น 32 บิต(bit) หรือ 64 บิต ดังนั้นจึงต้องมีการตรวจเพื่อดาวน์โหลดให้ตรงกับระบบปฏิบัติการโดนตรวจสอบได้จาก

3. ตรวจสอบวินโดว์(Windows) ว่าคอมพิวเตอร์กำลังเรียกใช้ Windows รุ่น 32 บิตหรือ 64 บิต และเลือกดาวน์โหลดให้ตรงกับระบบปฏิบัติการของคอมพิวเตอร์  โดยตรวจสอบได้จาก การคิกขวาที่ My Computer จากนั้นเลือก Properties ในบริเวณล่างสุด

 

รูป1-4

 

จากนั้นตรวจสอบในบริเวณดังภาพว่าคอมพิวเตอร์เป็นระบบปฏิบัติการ 32 บิต หรือ 64 บิต

 

รูป1-5

 

รูป1-6

4.จากนั้นกลับมาหน้าจอสำหรับการดาวน์โหลด เลือกการดาวน์โหลดที่ตรงกับระบบปฏิบัติการ จะปรากฏหน้าจอดังภาพ จากนั้นให้กดดาวน์โหลด

 

รูป1-7

5. เมื่อทำการดาวน์โหลดโปรแกรมเสร็จสิ้น จะได้รับไฟล์ในรูปแบบซิปไฟล์ (Zip file) ให้ทำการแตกไฟล์ดังขั้นตอนต่อไปนี้

ดับเบิลคลิกยังไฟล์ที่ดาวน์โหลด

จากนั้นเลือก Extract To เพื่อทำการเลือกไดเร็กทอรี่ที่ต้องการเก็บโปรแกรมไว้

 

รูป1-8

6. สร้าง Shortcut ของ eclipse ไว้มาไว้ที่หน้าจอเพื่อให้สะดวกสำหรับการใช้งาน

 

รูป1-9

 

7.จากนั้นให้ทำการเปิดโปรแกรมจะปรากฏหน้าจอดังภาพ

 

รูป 1-10

เลือกโฟลเดอร์ที่เราต้องการเก็บโค๊ดภาษาจาวาของเราจากปุ่ม Browse ด้านข้าง

8. เข้าสู่โปรแกรม eclipse ได้อย่างสมบูรณ์แบบ

 

รูป 1-11

 

หากยังไม่สามารกเรียกใช้โปแกรม eclipse ได้ ให้ทำการดาวน์โหลดและติดตั้งโปรแกรม JDK ตามขั้นตอนดังต่อไปนี้

1.ขั้นตอนแรกให้พิมพ์คำค้นหา “jdk” ลงใน google.com จะปรากฏตัวเลือกการค้นหาขึ้นมาดังภาพ

 

รูป 1-12

2.เลือกตัวแสดงผลการค้นหาดังภาพ http://www.oracle.com/technetwork/java/javase/downloads/jdk7-downloads-1880260.html

3.เมื่อเข้าได้แล้วจะปรากฏหน้าจอดังภาพข้างล่าง  

จากนั้นเลือก Accept License  Agreement

สำหรับระบบปฏิบัติการ 32 บิต ให้เลือก Window x86

สำหรับระบบปฏิบัติการ 64 บิต ให้เลือก Window x64

 

 

รูป 1-13

 

4.หลังจากดาวน์โหลดแล้วจากได้ไฟล์ในรูปแบบซิปไฟล์เช่นเดิมให้ ทำการแตกไฟล์เช่นเดียวกับกรณีข้างบน

5.เมื่อได้โปรแกรมเป็นที่เรียบร้อย ให้ดับเบิลคลิกที่ตัวโปแกรม

 

รูป 1-14

 

6.หลังจากนั้นให้กดปุ่ม Next จนเสร็จทุกขั้นตอนตามภาพดังต่อไปนี้ รอโปแกรมติดตั้งตัวเองเมื่อเรียบร้อนดีแล้วถือว่าเสร็จขั้นตอนการติดตั้ง

 

รูป1-15

 

รูป1-16

รูป1-17

รูป1-18

 

 

รูป1-19

7.จากนั้นเปิดโปรแกรมจากปรากฏภาพของการลงโปรแกรม eclipse ตามข้อ 7 และ 8 ตามลำดับ จากนั้นจึงสามารถใช้งานโปรแกรมได้จามปกติ

 

 

 


[1] คอมไพเลอร์คือตัวแปรภาษาโปรแกรม ซึ่งจะทำการแปล ภาษาต้นฉบับ (source code) ในที่นี้คือภาษาจาวาของเราซึ่งเขียนในภาษาระดับสูง  ให้ไปเป็นภาษาเครื่องที่จะทำให้เครื่องเข้าใจและสามารถทำงานได้

[2] ดีบักเกอร์ใช้สำหรับการค้นหาและแก้ไขข้อผิดพลาดหรือข้อบกพร่องของโปรแกรมที่เกิดขึ้น

 

 

แผนผังการเรียนเขียนโปรแกรม

 

___________________

รับสอนเขียนJAVA , C# , VB.net

http://expert-programming-tutor.com/

โทร 0853507540

2. ความรู้เบื้องต้น การเริ่มใช้งานและโปรแกรมแรกบน Eclipse

___________________

รับสอนเขียนJAVA , C# , VB.net

โทร 0853507540

___________________

2. ความรู้เบื้องต้น การเริ่มใช้งานและโปรแกรมแรกบน Eclipse

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

ขั้นแรกให้ดับเบิลคลิกเข้าไปที่โปรแกรมจากนั้นให้ทำการเปิดโปรแกรมจะปรากฏหน้าจอดังภาพ

รูป 2-1

เลือกโฟลเดอร์ที่เราต้องการเก็บโค๊ดภาษาจาวาของเราจากปุ่ม Browse ด้านข้าง

เข้าสู่โปรแกรม eclipse ได้อย่างสมบูรณ์แบบ

รูป 2-2

เมื่อเข้ามาถึงหน้าโปรแกรมจะปรากฏดังภาพข้างบน โดยในหน้าจอโปรแกรม eclipse จะประกอบไป

ด้วยสิ่งต่างๆดังต่อไปนี้

หมายเลข 1 – Menu Bar เป็นเมนูสำหรับการใช้งาน eclipse สำหรับการเลือกใช้งาน ปรับตั้งค่า รวมถึงการทำงานที่สำคัญๆอย่างเช่น การสร้างโปรเจ็ค การสร้างคลาส และการคอมไพล์โปรแกรม

หมายเลข 2 – Package Explorer เป็นหน้าต่างที่แสดงให้เห็นโปรเจ็คต่างๆใน workspace และคลาสโดยจะแสดงงานทั้งหมดของเราตรงนี้รวมถึงไลบรารีที่ใช้ในโปรเจ็คนั้นๆ

หมายเลข 3 – Editor เป็นบริเวณที่เราใช้ในการเขียนโปรแกรม เราจะเขียนโค๊ด ปรับปรุงและแก้ไขโค๊ดของโปรแกรมในบริเวณนี้

หมายเลข 4 — Console เป็นหน้าจอแสดงผลการคอมไพล์โค๊ดที่เขียนลงในส่วน editor

ก่อนที่จะเริ่มเขียนโปรแกรม จะต้องสร้างสิ่งที่เรียกว่า โปรเจ็ค[1]ขึ้นมาก่อนเป็นอันดับแรก โดยเลือกที่ File ทางด้านซ้ายมือของ menu bar จากนั้นเลือก New และ Java Project ตามลำดับ

รูป 2-3

จากนั้นจะปรากฏหน้าจอสำหรับการตั้งชื่อโปรเจ็ค ควรตั้งชื่อของโปรแกรมหรือเป็นชื่อที่จดจำและเข้าใจได้ง่ายและไม่เขียนเว้นวรรค ในโปรแกรมแรกนี้เราจะตั้งชื่อโปรเจ็คว่า HelloWorld แล้วจึงกดปุ่ม Finish

รูป2-4

 

เมื่อทำการสร้างโปรเจ็คเป็นที่เรียบร้อยแล้ว สิ่งที่ต้องทำต่อไปก็คือการสร้างคลาสซึ่งเปรียบเสมือนกระดาษผังงานเพราะเราจะทำการเขียนโค๊ดเก็บเอาไว้ในคลาส การสร้างคลาสทำโดยการคลิกขวาที่โปรเจ็คที่สร้างขึ้น จากนั้นเลือกคำสั่ง New และตามด้วย Class ดังรูป

รูป 2-5

ตั้งชื่อคลาสและเลือกช่องตรงหน้า คำว่า public static void mail(String [] args) ซึ่งจะเป็นการสร้าง เมท็อดเมน(main) หรือก็คือเมท็อดเริ่มต้นของโปรแกรมให้อัตโนมัติ เมท็อดมีไว้เพื่อให้โปรแกรมเริ่มทำงานได้

รูป 2-6

 

เมื่อสร้างคลาสเสร็จเรียบร้อย ให้เขียน System.out.println(“Hello Wolrd!!”); ลงไปในเมท็อดเมน บริเวณตามในภาพ อย่าลืมเครื่องหมาย ; เพราะเครื่องหมาย ; เป็นเครื่องหมายแสดงการจบคำสั่งในภาษาจาวา เรียกว่า เป็น 1 statement สิ่งนี้สำคัญมากลืมแล้วโปรแกรมจะerror

รูป 2-7

จากนั้นกดปุ่ม คอมไพล์  ที่อยู่ใน menu bar เพื่อให้เกิดการแปลงภาษาจาวาไปเป็นภาษาเครื่อง เมื่อคอมไพล์เสร็จเรียบร้อย จะปรากฏผลลัพธ์คำว่า Hello World ในช่อง console ดังภาพ ถือว่าเป็นการเสร็จสิ้นโปรแกรมแสดงข้อความออกทางหน้าจอ

รูป2-8

เมื่อมาถึงตรงนี้ เราจะสามารถสร้างโปรเจ็คซึ่งเป็นที่เก็บโค๊ดสำหรับโปรแกรม โปรแกรมหนึ่งของเราและสามารถสร้างคลาสที่เปรียบเสมือนผังสำหรับการเขียนโค๊ดรวมถึงเขียนโปรแกรมแสดงผลข้อความออกทางหน้าจอได้แล้ว

อธิบายเพิ่มเติมเรื่องขั้นตอนการทำงานของโปรแกรมคือ ในภาษาจาวาจะมีคำสั่ง เรียกว่า ฟังก์ชัน(function) โดยจะมีฟังก์ชันสำหรับการแสดงผลออกทางหน้าจอ เรียกว่า ฟังก์ชัน println ซึ่งฟังค์ชันที่จะอยู่ในสิ่งที่เรียกว่า out อีกที ในขณะที่ out ก็อยู่ใน System ต่ออีกทีหนึ่ง ทำให้สามารถแสดงผลออกทางหน้าจอได้

ความต่างระหว่าง println(อ่านว่า ปริ๊นต์ไลน์) กับ print คือ println จะทำการขึ้นบรรทัดใหม่ให้อัตโนมัติ

ทำไมต้อง Hello World

            โปรแกรม Hello World กลายมาเป็นสิ่งที่ได้รับการยึดถือปฏิบัติสำหรับผู้เริ่มต้นเรียนเขียนโปรแกรม โดยเริ่มจากโปรแกรม Hello World แรกเกิดขึ้น จากหนังสือการเขียนโปรแกรมภาษาซีชื่อ  The C Programming Language แต่งโดยไบรอัน เคอร์นิงแฮน(Brian Wilson Kernighan) และ เดนนิส ริตชี(Dennis MacAlistair Ritchie)ผู้ให้กำเนิดภาษาซี ตีพิมพ์ในปีพ.ศ. 2521 (ค.ศ. 1978) โดยตัวอย่างโปรแกรมมาจาก กระดาษจดข้อมูลของไบรอันขณะที่ทำงานที่ เบลล์แล็บ (Bell Laboratories) ปี พ.ศ. 2517(ค.ศ. 1974) ตัวอย่างในหนังสือ พิมพ์ข้อความว่า “hello, world” และกลายเป็นธรรมปฏิบัติสำหรับผู้เริ่มเรียนเขียนโปรแกรม

เหตุผลอีกประการเป็นเพราะความง่ายของโปรแกรมซึ่งทำให้ผู้ที่เริ่มต้นเรียนโดยเฉพาะผู้ที่ไม่เคยมีความรู้พื้นฐานด้านการเขียนโปรแกรมมาก่อนสามารถเข้าใจได้โดยง่าย การเขียนโปรแกรม Hello World ยังช่วยให้เข้าใจเรื่อง syntax ของภาษาคอมพิวเตอร์ได้อย่างง่ายๆ นอกจากนี้ยังเป็นตัวช่วยในการทดสอบว่า คอมไพล์เลอร์ รวมถึงdevelopment environment และ run-time environment สามารถทำงานได้เป็นปกติ

การตั้งชื่อในภาษาจาวา

การตั้งชื่อในภาษาจาวาไม่ว่าจะเป็น ตั้งชื่อให้กับตัวแปร(variable) เมท็อด(Method) คลาส(Class) แพ็กเกจ(package) อินเทอร์เฟส(interface) จะมีการตั้งชื่อดังต่อไปนี้

1.      ต้องตั้งชื่อด้วยภาษาอังกฤษ a, A, b, B และสามารถประกอบด้วย ตัวเลข 1 2 3 เครื่องหมายได้แก่ เครื่องหมาย underscore (_) หรือ เครื่องหมาย dollar sing ($) แต่อย่างไรก็ตาม ไม่สามารถใช้เครื่องตัวเลขเป็นชื่อตัวแรกได้ เช่น Test_String, test$tring, tEsTsTrInG123 แต่ไม่สามารถตั้งว่า 123test ได้

2.      การตั้งชื่อมีลักษณะเป็น case-sensitive กล่าวคือตัวอักษรใหญ่และตัวอักษรถือว่ามีความหมายต่างกันเป็นคนละตัวกัน ดังนั้น PhoNe, phone, pHOnE จะต้องถือว่าเป็นคนละชื่อกัน

3.      หากชื่อที่ใช้มีสองคำขึ้นนิยมเขียนด้วยวิธีหลังอูฐ เช่น HelloMyDarling, TestForEachArray

4.      ไม่สามารถมีช่องว่างระหว่างตัวอักษรในชื่อได้

5.      และที่สำคัญคือไม่สามารถตั้งชื่อกับคำสงวนในภาษาจาว่าได้ ดูได้จากตารางดังต่อไปนี้

รูป 2-9

 

เรื่องอื่นๆเพิ่มเติมเพื่อการทำความเข้าใจจาวา

ข้อผิดพลาด(Error)ในการเขียนโปรแกรม

          ในการพัฒนาโปรแกรมย่อมเกิดความผิดพลาดขึ้นได้ โดยข้อผิดพลาดนั้นเกิดขึ้นได้ทั้งแบบที่เราสามารถคอมไพล์ผ่านและคอมไพล์ไม่ผ่านเลยก็ได้ ซึ่งแบบแรกที่ไม่สามารถคอมไพล์ผ่านได้เพราะความผิดพลาดในเรื่องของไวยกรณ์และข้อผิดพลาดอย่างหลังเกิดจากความผิดพลาดระหว่างการทำงานของโปรแกรม

Syntax Error (Compile time error)

            เป็นความผิดพลาดที่ทำให้เวลาคอมไพล์จะคอมไพล์ไม่ผ่านเพราะเกิดจากการเขียนไวยกรณ์ผิด ทำให้คอมไพเลอร์ไม่แปลผลของโปรแกรม ใน eclipse เมื่อเราเขียน syntax ผิดก็จะปรากฏสัญลักษณ์สีแดงโดยเริ่มกากบาทหน้าตัวเลขของแถวที่มีข้อผิดพลาดเกิดขึ้น ท้าย statement ที่มีข้อผิดพลาดจะปรากฏเส้นหยัดสีแดง ในขณะที่ขีดสี่เหลี่ยมสีแดงทางด้านขวาเมื่อกดจะทำให้เลื่อนขึ้นไปยังบรรทัดที่มีข้อผิดพลาดเกิดขึ้น ใช้ในกรณีที่เขียนโปรแกรมไปหลายร้อยบรรทัด

รูป 2-10

Logical Error (Runtime error)

            คือความผิดพลาดขณะสั่งรันโปรแกรม ถ้าเกิดความผิดพลาดในกรณีจะมีการแสดงความผิดพลาดในลักษณะ Error message อออกทาง consoler โปรแกรมเมอร์จะต้องตรวจสอบข้อผิดพรากที่เกิดและแก้ไข การแก้ไข้จะต้องใช้กระบวนการ debugging ซึ่งใช้ยากและใช้เวลานานหากยังไม่ชำนาญ

การจัดเรียงให้โปรแกรมอ่านง่ายและสวยงาม

อันที่จริงแล้วหากเราเขียนถูกหลัก syntax ก็จะทำให้โปรแกรมทำงานได้ก็จริงแต่บางครั้งก็ยากที่จะอ่านจะเข้าใจและยิ่งยากหากต้องกลับมาแก้ไขเช่น

รูป 2-11

แม้เราจะเขียนโปรแกรมไม่เป็นระเบียบแต่หากเขียนถูกต้องตามหลักก็จะทำให้โปรแกรมทำงานได้ปกติแต่หากเกิดความผิดพลาดจำพวก Syntax Error จะทำให้แก้ไขได้ลำบาก จึงควรจะจัดรูปแบบหรือ format ให้เรียบร้อย เช่น กรณีที่เครื่องหมายเยอะขึ้นก็จะทำให้เห็นว่าหากเขียนไม่เป็นระเบียบจะทำให้สับสนได้

รูป 2-12

 

 

 

 

การจัดระเบียบ

รูป 2-13

สิ่งที่ควรพิจารณา

1.ควรดูก็คือปีกกา อันไหนเป็นของอันไหนควรจะทำให้ตรงกัน

2.สิ่งที่อยู่ในปีกกาควร แท็บ(tab) เข้ามาข้างในอย่างน้อยหนึ่งแท็บ เพื่อให้สังเกตได้ง่ายว่าสิ่งใดอยู่ภายใต้การทำงานของสิ่งใด

 

 


[1] โปรเจ็ค(Project) คือสิ่งเก็บโค๊ดหรือกลุ่มของโค๊ดเอาไว้รวมกันเป็นโปรแกรมหรือเป็นแอพลิเคชัน(application)หนึ่ง โปรเจ็คเป็นที่ทำให้โปรแกรมเมอร์สามารถจัดรวมกลุ่มของโค๊ดให้สะดวกต่อการใช้งานและเป็นระเบียบเรียบร้อย

 

แผนผังการเรียนเขียนโปรแกรม

 

___________________

รับสอนเขียนJAVA , C# , VB.net

โทร 0853507540

___________________

 

3. การเลือกทำหรือคำสั่งเงื่อนไข

___________________

รับสอนเขียนJAVA , C# , VB.net

โทร 0853507540

___________________

 

 

 

3. การเลือกทำหรือคำสั่งเงื่อนไข

            คำสั่งเงื่อนไขเป็นหนึ่งในคำสั่งสำหรับการควบคุมโปรแกรมซึ่งอีกอันได้แก่คำสั่งทำซ้ำ ซึ่งทั้ง 2 อย่างนี้มีความสำคัญต่อการเขียนโปรแกรมต่อๆไปเป็นอย่างมาก จึงควรมีต้องฝึกให้ชำนาญ

เงื่อนไข if

เป็นเงื่อนที่ตรวจสอบว่าสิ่งที่ภายใต้เงื่อนไงที่เขียนเอาไว้เป็นจริงหรือไม่ ถ้าจริงจะทำตามเงื่อนที่เขียนไว้ ถ้าไม่เป็นไปตามเงื่อนไขก็จะไม่ทำตามคำสั่ง จะไปตรวจสอบคำสั่งที่อยู่ถัดจาก if ออกไป

 

if(เงื่อนไข)

{

            คำสั่งที่1;  // มีได้มากกว่า 1 คำสั่ง

}

คำสั่งที่2  // มีได้มากกว่า 1 คำสั่ง

รูป 3-1

 

 

ถ้ามีคำสั่งเดียวภายในเงื่อนไข if ไม่ต้องมี { } ได้ เช่น

If(number%2 == 0)

{

            System.out.println(“even number”);

}

เขียนแบบไม่มี { } ก็ได้

If(number%2 == 0)      System.out.println(“even number”);

แต่ถ้ามีมากกว่า 1 ต้องใส่ { } ให้เรียบร้อยจะเห้นได้จากตัวอย่างต่อๆไป

 

ตัวอย่าง

รูป 3-2

โปรแกรมนี้ประกาศตัวแปรเป็นตัวเลขจำนวนเต็มถามว่าจำนวนเต็มนี้เป็นเลขคู่หรือไม่ ซึ่งการจะรู้ว่าเป็นเลขคู่หรือไม่ ต้องรู้ว่า เลขคู่คือตัวเลขที่เมื่อเอาสองไปหารแล้วลงตัว

บรรทัดที่ 6 : ประกาศตัวแปร number เป็นชนิด int

บรรทัดที่ 8 : สร้างเงื่อนไข if ถามว่า number หาร 2 แล้วเศษเป็นศูนย์หรือไม่

บรรทัดที่ 10 : เขียนคำสั่ง ถ้าเงื่อนไขเป็นจริงให้ ให้บอกว่าตัวเลขนั้นเป็นเลขคู่

ได้ผลลัพธ์ใน console ดังนี้

รูป 3-3

คำสั่ง if else

            คำสั่ง if เป็นคำสั่งที่ตรวจสอบว่าเงื่อนไขเป็นจริงหรือไม่ หากจริงจะทำตามคำสั่ง แต่ไม่บอกว่าถ้าเท็จต้องทำอะไรหรือไม่ ส่วน if else จะเพิ่มเติมจาก if ขึ้นมาว่าถ้าจริงให้ทำอะไร หากเท็จให้ทำอะไรต่อ ก็จะเป็นการตรวจสอบเงื่อนไขให้สมบูรณ์ขึ้น

 

 

if(เงื่อนไข)

{

            คำสั่งที่1;  // มีได้มากกว่า 1 คำสั่ง

}

else

{

คำสั่งที่2;  // มีได้มากกว่า 1 คำสั่ง

รูป3-4

 

 

}

คำสั่งอื่น;

 

ตัวอย่าง

รูป 3-5

 

            โปรแกรมนี้ต้องการดูว่าคะแนนสอบผ่านหรือไม่หากมากกว่าหรือเท่ากับ 50 คะแนนถือว่าผ่าน ถ้าไม่ถือว่าสอบไม่ผ่าน

บรรทัดที่ 8 : สร้างเงื่อนไขถามว่าคะแนนมากว่าหรือเท่ากับ50หรือไม่

บรรทัดที่10-11: หากใช่ ให้แสดงข้อความตามคำสั่งทั้งสอง

บรรทัดที่ 14 : หากเงื่อนไขเป็นเท็จ ให้ทำตามคำสั่งในบรรทัดที่ 16-18 จากนั้นให้ออกจากเงื่อนไข

 

นอกจากรูปแบบ

if(เงื่อนไข)

{

            คำสั่งที่1;  // มีได้มากกว่า 1 คำสั่ง

}

else

{

คำสั่งที่2;  // มีได้มากกว่า 1 คำสั่ง

}

คำสั่งอื่น;

 

คำสั่ง if else สามาเขียนได้ในรูปแบบหนึ่งคือ ตัวแปร = เงื่อนไข? คำสั่ง1:คำสั่ง 2;

            c = a > b ? a : b;

            a มากกว่า b หรือไม่ ถ้าใช่ให้ทำ a ถ้าไม่ใช่ ให้ทำ b

เงื่อนไขแบบ Nested if

            คือจะมี การใช้ if else ต่อกันยาวมากกว่า 1 ครั้งติดกัน จึงเรียกว่า Nested if แปลว่า if ที่ซ้อนๆกัน ช่วยในการตรวจสอบ เงื่อนไขที่ซับซ้อนมากขึ้น กล่าวก็คือมีหลายเงื่อนไข

if(เงื่อนไข)

{

            คำสั่งที่1;  // มีได้มากกว่า 1 คำสั่ง

}

else if(เงื่อนไข)

{

คำสั่งที่2;  // มีได้มากกว่า 1 คำสั่ง

}

else if(เงื่อนไข)

{

คำสั่งที่3;  // มีได้มากกว่า 1 คำสั่ง

}

รูป3-6

บรรทัดที่ 9 : ประกาศตัวแปร day เป็นชนิด int

บรรทัดที่ 10 : เรียกใช้คำสั่ง Scan สำหรับ input ข้อมูลจากแป้นพิมพ์

บรรทัดที่ 11 :แสดงผลให้รับข้อมูลเป็นเลขจำนวนเต็ม 1-7 บรรทัดที่ 12 ให้เก็บสิ่งที่ input เข้ามาใส่ไว้ในตัวแปล day

บรรทัด14-61 : จากนั้นตรวจสอบด้วยเงื่อนไข if else ต้องตรวจสอบปีกกาให้ครบคู่กัน

แต่เนื่อง if else แบบข้างบน มีเพียงคำสั่งเดียวในแต่ละเงื่อนไข จึงสามารถเขียนได้อีกวิธีหนึ่ง ดังรูปต่อไปนี้

รูป 3-7

 

ผลลัพธ์ที่ได้

รูป 3-8

 

เงื่อนไขแบบ switch-case

            เป็นอีกรูปแบบหนึ่งของคำสั่งเงื่อนไข เมื่อเรากำหนดเงื่อนไขขึ้น โปรแกรมจะทำการตรวจสอบว่าตรงกับกรณีใดๆที่กำหนดเอาไว้หรือหากมีจะทำกรณีนั้นและจบโปรแกรม

 

switch(ตัวแปรหรือนิพจน์ที่ต้องการตรวจสอบ)

{

            case ค่าที่ 1:

                        คำสั่งที่ 1;

                        break;

case ค่าที่ 2:

                        คำสั่งที่ 2;

                        break;

// ใส่ case เท่าที่ต้องการ

            default :

                        คำสั่งที่ 3;

}

break เป็นสิ่งที่ลืมไม่ได้ในแต่ละ case เพราะเป็นคำสั่งหยุดการทำงานจากเงื่อนไขทันที จะได้ไม่ตรวจสอบ case ที่เหลืออีก (ถ้าเป็น ลูป(loop) คำสั่ง break จะเป็นการออกจากลูป)

default คล้ายกับ else ใน if else กล่าวคือ เป็นส่วนที่ถ้าสิ่งที่รับเข้ามาไม่ตรงกับ case ไหนเลย ก็ให้ กำหนดว่าจะทำคำสั่งอะไร

ตัวอย่าง

รูป 3-9

บรรทัดที่ 9-12 : เป็นการประกาศตัวแปรและรับตัวเลขจากแป้นพิมพ์มาใส่ในตัวแปร

บรรทัดที่ 14 : ใช้คำสั่งเงื่อนไขแบบ switch-case รับตัวแปร num มาตรวจสอบ case

บรรทัดที่ 16-18 : ถ้าเลขที่รับเข้ามาเป็น เลข 1 จะตรงกับ case 1 ก็จะทำคำสั่งแสดงผลออกทางหน้าจอว่า

THE SELFLESS และ case อืนๆก็จะออกตามคำสั่งที่อยู่ในปีกกา

บรรทัดที่ 32 : default หากผู้ใช้ใส่ตัวเลขเข้ามาเกินกว่า 1-5 ก็จะไม่อยู่ใน case ที่เขียนลงไปให้แสดงผลคำว่า

DIVERGENT

แผนผังการเรียนเขียนโปรแกรม

 

___________________

รับสอนเขียนJAVA , C# , VB.net

โทร 0853507540

___________________

 

4. คำสั่งลูป(Loop)หรือการทำงานซ้ำ

___________________

รับสอนเขียนJAVA , C# , VB.net

โทร 0853507540

___________________

4. คำสั่งลูป(Loop)หรือการทำงานซ้ำ

            คำสั่งควบคุมอีกประเภทที่ใช้งานบ่อยๆคือคำสั่งลูป หรือการให้โปรแกรมทำงานซ้ำวนๆกันจนกว่าจะถึงเงื่อนไขที่เราได้เขียนเอาไว้

ลูปแบบ while

            ลูป while จะทำงานโดยการตรวจสอบเงื่อนไข หากเงื่อนไขจะทำคำสั่งภายในลูป 1 รอบแล้วกลับมาตรวจสอบการทำงานของเงื่อนไขอีกครั้งหากเงื่อนไขยังเป็นจริงอยู่จะเข้าไปทำตามคำสั่งภายในเงื่อนไขอีกครั้งและทำซ้ำจนกว่าจะพบว่าเงื่อนไขเป็นเท็จก็จะออกไปทำงานนอกลูป

 

while(เงื่อนไข)

{

            คำสั่ง 1;

}

คำสั่ง 2;

 

 

รูป 4-1

 

 

ตัวอย่าง

 

รูป 4-2

 

โปรแกรมนี้เป็นโปรแกรมให้พิมพ์ตัวเลขระหว่าง 1 ถึง 100 ที่หาร3และ5ลงที่

บรรทัดที่ 6 :       ประกาศตัวแปร x  เป็นชนิด int

บรรทัดที่ 8 : กำหนดค่าเริ่มต้นให้กับตัวแปร x โดยให้มีค่าเป็น 1 หมายความว่าเมื่อลูปทำการตรวจสอบเงื่อนไข

      จะเริ่มตรวจสอบจาก 1 เป็นตัวแรก

บรรทัดที่ 10 : คำสั่งลูป while พร้อมกำหนดเงื่อนไข ในที่นี้เงื่อนไขคือ ให้ทำซ้ำเรื่อยๆจนกระทั้ง x มีค่าเท่ากับ

       100 จึงให้ออกจากลูปไปทำคำสั่งนอกลูปได้

บรรทัดที่ 12-16 : ภายในลูป while มีการตรวจสอบเงื่อนไขด้วย if ว่าหากหารด้วย 3 และ 5 แล้วเหลือเศษศูนย์

หรือ หารลงตัว ให้แสดงผลออกทางหน้าจอ

บรรทัดที่ 18 : เพิ่มค่า x ในการตรวจสอบ โดยเพิ่มทีละ 1 จนกว่าค่า i จะถึง 100  กล่าวคือรอบแรกลูปจะใช้ x ที่

        มีค่าเท่ากับ 1 เพราะ ค่าเริ่มต้นเท่ากับ 1 เมื่อเข้าสู่ลูปจนถึงช่วงเพิ่มค่า x จะเพิ่มเป็น 2 และเป็น 3

        4 5 …100

            จะเห็นได้ว่าความสำคัญที่ทำให้ลูป while ทำงานได้ จะต้องไม่ลืม 3 ขั้นตอนสำคัญ ได้แก่ กำหนดค่าเริ่มต้น กำหนดเงื่อนไข เพิ่มค่า/ลดค่า

 

ลูปแบบ do-while

            ลูป do-while แตกต่างจากลูป while ตรงที่จะมีการทำงานก่อนเข้าลูป 1 ครั้ง

 

do()

{

            คำสั่ง 1;

} while(เงื่อนไข);

คำสั่ง 2;

 

รูป4-3

 

 

ตัวอย่าง

 

รูป4-4

            โปรแกรมนี้ต้องการแสดงตัวเลข 1-10

บรรทัดที่ 6 : ประกาศตัวแปร count เป็นตัวแปรชนิด int ให้ค่าเริ่มเป็น 1

บรรทัดที่ 8 : คำสั่ง do มีคำสั่งภายในคือ คำสั่งแสดงผล หลังจากแสดงผลเสร็จให้ทำการเพิ่มค่าตัวแปร count

     อีก 1

บรรทัดที่ 11 : ทำการวนลูปหาก count มีค่าเท่ากับ 11 หรือมากกว่า ให้ออกจากลูป

ผลลัพธ์ที่ได้

 

รูป4-5

ลูป for

            เป็นคำสั่งสำหรับการวนลูปเช่นเดียวกัน แต่สำหรับลูป for นั้น จะเป็นการเอาค่าเริ่มต้น เงื่อนไขและการเพิ่มค่า/ลดค่ามาไว้ในบรรทัดเดียวกัน

 

 

 

for(ค่าเริ่มต้น;เงื่อนไข;เพิ่มค่า/ลดค่า)

{

            คำสั่ง 1;

}

คำสั่ง 2;

ลูป for จะคล้ายกับ if คือถ้ามีคำสั่งเดียวไม่ต้องมี

{ } ได้

 

รูป 4-6

 

 

 

ตัวอย่าง

 

รูป 4-7

โปรแกรมต้องการให้แสดงตัวอักษร x สิบตัว

บรรทัดที่ 6 : ใช้ลูป for(ค่าเริ่มต้น;เงื่อนไข;เพิ่มค่า/ลดค่า) โดยให้ค่าเริ่มต้นเป็น 1 และกำหนดเงื่อนไขให้พิมพ์ค่าออกตราบเท่าที่ i น้อยกว่าหรือเท่ากับ 10

บรรทัดที่ 8 : คำสั่งแสดงค่า

ได้ผลลัพธ์เป็นตัวอักษร x สิบตัว

 

รูป 4-8

 

 

 

 

 

 

 

 

ลูป Nested for

 

เป็นการใช้ลูป for ซ้อน ลูป for

 

for(ค่าเริ่มต้น;เงื่อนไข;เพิ่ม/ลดค่า)

{

for(ค่าเริ่มต้น;เงื่อนไข;เพิ่ม/ลดค่า)

{

for(ค่าเริ่มต้น;เงื่อนไข;เพิ่ม/ลดค่า)

{

                                    คำสั่ง 1;

}

}

}

 

 

รูป4-9

 

 

คำสั่ง 2;

 

ตัวอย่างการใช้ Nested for loop

 

รูป 4-10

ต้องการให้โปรแกรมแสดงรูปปีรามิดที่มีเงาอยู่ทางซ้ายออกทางหน้าต่าง console.

บรรทัดที่ 7 : เป็นการใช้คำสั่ง for ตัวแรกเพื่อวนลูปสร้างแถวแนวนอน โดยให้สร้างทั้งหมด 11 แถว

บรรทัดที่ 9 : ให้โปรแกรมแสดง เครื่องหมาย – แทนเงาของปีรามิดโดยกำหนดค่าเริ่มต้นที่แถวที่ 1 ให้มีเงื่อนไข

      ว่าต้องแสดงเครื่องหมาย – เป็นจำนวนทั้งหมด 10-i  ครั้งแรก i =1 จะแสดงเครื่องหมาย – 9 ครั้ง

บรรทัดที่ 14 : ให้โปรแกรมแสดง เครื่องหมาย x แทนตัวของปีรามิดโดยให้แสดง x ออกมาครั้งละ (i*2)+1 ครั้ง

      แรก i เป็น 1 จะแสดง x ออกมาหนึ่งครั้ง อย่าลืมเครื่องหมาย “” ใน ( )

ผลลัพธ์ของโปรแกรมเป็นดังนี้

 

รูป 4-11

ลูป while(true) และ for(;;)

            คือนอกจากคำสั่ง while และ for ที่ต้องกำหนดเงื่อนไขให้ลูปทำงานแล้วบางครั้งเราก็ต้องการการทำงานจำพวกที่ให้ผู้ใช้ป้อนข้อมูลได้เรื่อยๆ ไม่จำกัดจนกว่าผู้ป้อนข้อมูลจะพอ สามารถใช้ลูปอีกแบบได้คือ ลูป while(true) หรือ for(;;) สองอย่างนี้มีค่าเท่ากัน คือกำหนดให้ลูปเป็นจริงเสมอก็จะทำการวนลูปไปเรื่อยๆจนกว่าจะพอใจ หรือใช้คำสั่ง break; ในการการออกจากลูป

 

 

คำสั่ง break; และ continue;

 

 

คำสั่ง break; เป็นคำสั่งให้โปรแกรมออกจากลูป

              ทันทีที่เจอคำสั่งนี้ มักใช้กับ while(true)

 

 

 

while ( true )

{

   คำสั่ง;

   break ;

   คำสั่ง;

}

 

 

 

 

 

คำสั่ง continue; เป็นคำสั่งให้โปรแกรมวนกลับขึ้น

ไปตรวจสอบเงื่อนไขลูปใหม่โดยข้ามการ

ทำงานรอบนั้นไปเลย

 

while ( true )

{

   คำสั่ง;

   continue ;

   คำสั่ง;

}

 

การใช้คำสั่ง break; และ continue;

 

รูป 4-12

            โปรแกรมนี้จะแสดงให้เห็นรอบของจำนวนการทำงานของลูป for ที่ให้วนลูปตั้งแต่ 1 ถึง 10 แต่เมื่อ i มีค่าเท่ากับ 3 จะไม่แสดงผลของรอบที่  i = 3 ออกทางหน้าจอเพราะให้ข้าม 3 ด้วยคำสั่ง continue; และเมื่อ i=5 จะทำการ break; ออกจากลูปคือลูปจะไม่วนจนถึง 10 รอบตามที่ได้ตั้งเงื่อนไขไว้

ผลลัพธ์จึงเป็นดังนี้

 

รูป 4-13

 

สิ่งที่ต้องหลีกเลี่ยง infinite loop

            Infinite loop คือลูปไม่รู้จบ เกิดจากความผิดพลาดเวลาที่เรากำหนดเงื่อนไข ทำให้ลูปทำงานวนซ้ำออกจากลูปไม่ได้เครื่องก็จะเริ่มช้าเพราะรันโปรแกรมติดๆกัน

 

รูป 4-14

จากโปรแกรมนี้เมื่อกำหนดให้ค่า i เป็น 1 ยังกำหนดให้เงื่อนไขเป็น เมื่อ i = 1  จะพิมพ์ค่า i ออกมา แต่ i มีค่าเท่ากับ 1 อยู่แล้วมันก็จะพิมพ์ค่า i ออกมาไม่รู้จบ

 

รูป 4-15

เมื่อเกิดการรันโปรแกรมไม่รู้จบให้ทำการกดเครื่องหมายสีเหลี่ยมสีแดงที่มุมขวาบนของหน้าต่าง console เพื่อปิดการันโปรแกรมตามด้วยเครื่องกากบาทข้างๆ

แผนผังการเรียนเขียนโปรแกรม

 

___________________

รับสอนเขียนJAVA , C# , VB.net

โทร 0853507540

___________________

 

5. อาร์เรย์(Array)

___________________

รับสอนเขียนJAVA , C# , VB.net

โทร 0853507540

___________________

5. อาร์เรย์(Array)

            อาร์เรย์ (หนังสือบางเล่นใช้คำว่าแถวลำดับ ตัวแปรชุด) ช่วยในการเก็บข้อมูลจำนวนมากโดยไม่ต้องประกาศตัวแปรเยอะๆ เช่น ต้องการเก็บข้อมูล 100 ข้อมูลก็ไม่ต้องประกาศตัวแปร 50 ตัวเพราะมันเสียเวลา ประกาศอาร์เรย์เดียวขนาด 100 ช่อง การใช้อาร์เรย์ยังไปได้ด้วยดีกับการใช้ลูป เพราะอาร์เรย์จะเก็บข้อมูลประเภทเดียวกัน เช่น เก็บ int ก็จะเก็บ int ทั้งอาร์เรย์ทำให้ใช้ลูปมาเก็บใส่ได้ดี การใช้งานอาร์เรย์ได้แก่ การเก็บข้อมูล การหาข้อมูลและการเรียงลำดับเป็นสำคัญ

อาร์เรย์

อาร์เรย์จะถูกแบ่งออกเป็นหลายๆช่อง โดยมีสิ่งที่เรียกว่า index เป็นตัวระบุว่าข้อมูลนั้นๆอยู่ช่องไหน โดยในภาษาจาวา อาร์เรย์ช่องแรกจะเริ่มต้นที่ index[0] หมายความว่า ถ้าประกาศอาร์เรย์ 100 ช่อง indexหรือช่องสุดท้ายจะเป็น 99

 

 

จากในรูปจะเห็นว่าเราเก็บข้อมูลเป็นจำนวนเต็ม เลข 1 เก็บไว้ใน อาร์เรย์ช่องแรก index[0] และ 16 เก็บไว้ที่ index[4]

 

 

รูป 5-1

 

 

 

จะเห็นว่าว่าอาร์เรย์ข้างบนมี 5 ช่อง แต่มี index[0-4] ถ้าเผลอเก็บข้อมูลไว้ที่ index[5] จะ error

 

รูป 5-2

เป็นการประกาศอาร์เรย์ 3 ช่อง ดังนั้น index จะมีเพียงแค่ index[0]  index[1]  index[2] พอไปเก็บไว้ที่index[3] ก็จะ เกิด error ต้องระวังไว้ว่าช่องแรกเริ่มที่ 0 เสมอ

 

รูป 5-3

วิธีการประกาศตัวแปรชนิดอาร์เรย์ 1 มิติ

ชนิดตัวแปร [ ] ชื่อตัวแปร;

ชนิดตัวแปร ชื่อตัวแปร[ ];

เช่น int a [ ];                  หรือ      int [ ]a;

 

            อาร์เรย์เป็นอ็อปเจ็ค เวลาสร้างอาร์เรย์ใช้จริงๆต้องใช้คีย์เวิร์ด new คือข้างบนแค่ประกาศเหมือนประกาศตัวแปรทั่วไป แต่การ new คือจะเราอาร์เรย์มาใช้ก็เหมือนการจะให้ค่ากับตัวแปร

 

ชื่อตัวแปร = new ชนิดตัวแปร[ ขนาดของอาร์เรย์ที่อยากได้];

a = new int [5];

แต่จริงๆคือประกาศตัวแปรและเรียกใช้อาร์เรย์ในบรรทัดเดียวกันก็ได้

int a[ ] = new int [5];

อันนี้เท่ากับว่าประกาศตัวแปร x เก็บข้อมูลชนิด int ใส่ อาร์เรย์ 1 มิติ

 

รูป 5-4

 

 

            เมื่อเรา ประกาศตัวแปรa[ ] เราก็ได้กล่อง a ขึ้นมาแต่พอเรา new ก็จะได้บล็อกแถวข้างๆออกมา ต้องมีทั้งกล่องและบล็อกที่จะเอากล่องไปใส่ถึงจะสามารถใช้อาร์เรย์ได้สมบูรณ์

การอ้างอิงอาร์เรย์เดียวกัน

            ในอาร์เรย์ตัวแปรอาร์เรย์สามารถชี้ไปที่อาร์เรย์เดียวกันได้ โดยใช้เครื่องหมาย = กล่าวคือเครื่องหมาย = ในจาวามีได้ 2 ความหมาย คือ

1.ตัวแปรธรรมดา = คือเอาค่าทางขวาไปใส่ทางซ้าย เช่น x = 3; คือเอา 3 ไปใส่ x

2.ตัวแปรอาร์เรย์  = คือตัวทางซ้ายกับตัวทางขวา ชี้ไปที่ อาร์เรย์เดียวกัน เช่น

 

int [ ]d = new int [5];

int [ ]a = d;

 

รูป 5-5

 

            สร้างอาร์เรย์ d ขึ้นมา 5 ช่อง d ก็จะชี้ไปที่อาร์เรย์ 5ช่อง พอสร้าง a ขึ้นมาก็ให้ชี้ไปที่เดียวกับที่ d ชี้อยู่ โดยใช้ เครื่องหมาย =

กำจัดขยะด้วย Garbage collector

            ในจาวาอาร์เรย์ที่ไม่มีตัวแปรอ้างอิงจะถูกกำจัดเพื่อให้ประหยัดหน่วยความจำ

 

int a = new int[6];

a = new int[2];

 

รูป 5-6

 

ตัวอย่างการสร้าง เพิ่ม และใช้งานอาร์เรย์

ให้รับข้อมูลใส่อาร์เรย์10ตัวถามว่าในอาร์เรย์มีเลขคู่หรือไม่มี

 

รูป 5-7

 

บรรทัดที่ 8 : ใช้ Scanner เพื่อรับข้อมูลจากทางแป้นพิมพ์(Scanner ก็ใช้วิธีการ new เช่นเดียวกับ array)

บรรทัดที่ 9 : ประกาศตัวแปร x เป็นอาร์เรย์ โดยกำหนดขนาดอาร์เรย์เป็น 10 ช่อง

บรรทัดที่ 10 : จากนั้นวนลูป for โดยมีเงื่อนไขคือ i<x.length โดย .length หมายความว่า ขนาดของ กล่าวคือ

        ตราบเท่าที่ i ยังไม่เกินขนาดของอาร์เรย์ x ให้ทำการรับข้อมูลต่อ

บรรทัดที่ 13 : ให้x[ ] เก็บข้อมูลจากการวนลูปของ i

บรรทัดที่ 15 : ประกาศตัวแปร count สำหรับใช้นับว่ามีจำนวนที่เป็นเลขคู่หรือไม่

บรรทัดที่ 16 : ใช้ลูปวน for วนลูปเท่าขนาดอาร์เรย์อีกครั้ง

 

บรรทัดที่ 18 : ใช้เงื่อนไขเพื่อตรวจสอบว่าในอาร์เรย์มีจำนวนที่หารด้วย 2 ลงตัวหรือไม่

บรรทัดที่ 20-21 : หากมีตัวที่เป็นไปตามเงื่อนไขของบรรทัดที่ 18 ให้ทำ count นับ 1 และทำการ break; ออก

จากลูปเลยเพราะมีอย่างน้อย 1 ตัวเป็นเลขคู่ก็หมายความว่า อาร์เรย์นี้มีเลขคู่

บรรทัดที่ 24 – 31 : สร้างเงื่อนไขอีก ถ้า count มากกว่า 0 ให้ แสดงผลว่ามีเลขคู่ แต่ถ้าไม่มีให้บอกไม่มี

ได้ผลลัพธ์ดังนี้

 

รูป 5-8

การหาค่ามากสุด

 

รูป 5-9

            โปรแกรมนี้ต้องการทำให้โปรแกรมเรียงลำดับของอาร์เรย์จากน้อยไปมากและแสดงผลออกทางหน้าจอ

บรรทัดที่ 9 : ประกาศอาร์เรย์ x ขนาด 10 ช่อง

บรรทัดที่ 11-15: ทำการวนลูปโดยให้ลูปมีขนาดเท่ากับอาร์เรย์ จากนั้นทำการ random ตัวเลข0-50 มาใส่ใน

อาร์เรย์ จากนั้นแสดงผลออกทางหน้าจอ

บรรทัดที่ 17-19 : จากนั้นจะทำการเปรียบเทียบค่าในอาร์เรย์ทีละสองตัวเพื่อเรียงลำดับโดยให้ลูปแรกมีขนาด

เท่ากับอาร์เรย์ที่เราประกาศ ส่วนลูปที่ 2 ลดขนาดลง 1 เพราะไม่ต้องทำการเปรียบเทียบกับตัวเอง

บรรทัดที่ 21 :สร้างเงื่อนไง ถ้า ตัวก่อนหน้า x[i] มากกว่า ตัวข้างหลัง x[i+1]

บรรทัดที่ 23 : สร้างตัวแปร temp มาเก็บค่า x[i]

บรรทัดที่ 24 : เอาค่า x[i+1] มาใส่ x[i]

บรรทัดที่ 25 : จากนั้นเอา temp ที่เก็บค่าเดิมของ x[i] มาใส่ที่ x[i+1]

            พูดง่ายๆก็คือถ้าอาร์เรย์มันเป็นแถวบล็อกยาวๆ แล้ว x[i] มันมากกว่า x[i+1] ก็ให้สลับค่ากัน ค่าที่มากกว่าจะได้มาอยู่ฝั่งขวาแล้วพอวนลูปรอบต่อไปค่ามากกว่าก็จะดูว่าตัวเองมากกว่าตัวถัดไปหรือเปล่าถ้าใช่ก็สลับอีก สลับจนตัวมากกว่าสุดไปอยู่ขวาสุด

บรรทัดที่ 31 : ให้แสดงผลออกทางหน้าจอ

บรรทัดที่ 31 : ใช้เมท็อด Arrays.toString(int []) เพื่อช่วยพิมพ์ข้อความออกมาเป็นรูปแบบอาร์เรย์สวยๆ

ผลลัพธ์ที่ได้หลังจากสลับกันจนเรียบร้อยแล้ว

 

รูป 5-10

อาร์เรย์ 2 มิติ

            เนื่องจากอาร์เรย์มีลักษณะเป็นแถวๆจึงสามารถสร้างแถวได้มากกว่า 1 กล่าวคือสร้าง 2แถวติดกันก็ได้

วิธีการสร้างอาร์เรย์ 2มิติ ก็เพิ่ม [ ] มาอีก 1 อัน

int a[ ][ ]= new int [5][5];

            แบบนี้ก็จะได้ตารางอาร์เรย์แบบ 5×5 ช่อง

 

แผนผังการเรียนเขียนโปรแกรม

 

___________________

รับสอนเขียนJAVA , C# , VB.net

โทร 0853507540

___________________

 

5.1 อาร์เรย์(ต่อ)

___________________

รับสอนเขียนJAVA , C# , VB.net

โทร 0853507540

___________________

5.1 อาร์เรย์(ต่อ)

          อาร์เรย์ก่อนหน้านี้จะเป็นอาร์เรย์ที่มีแถวเดียว คือเมื่อมีข้อมูล อาร์เรย์จะจัดเก็บในลักษณะเป็นแถวเรียงกันเป็นแถวยาว แต่แถวยาวก็บล็อกใส่ของที่สามารถนำมาเรียงต่อกันหลายแถวเป็นอาร์เรย์ที่เรียกว่า อาร์เรย์สองมิติและสามมิติ

อาร์เรย์ 2 มิติ

            อาร์เรย์ธรรมดาก็คล้ายกับบล็อกสำหรับเก็บของ บล็อกนั้นแบ่งออกเป็นช่องสำหรับเก็บของ ส่วนอาร์เรย์ 2 มิติ ก็เปรียบเสมือนตู้ล็อกเกอร์ที่ใช้ในมหาวิทยาลัยหรือตามสนามกีฬาที่มีหลายแถวแต่ละแถวมีหลายช่อง

            การสร้างอาร์เรย์สองมิติ หากประกาศให้ตัวแปรอาร์เรย์เก็บข้อมูลประเภทใดทั้งอาร์เรย์ก็จะเก็บแต่ข้อมูลที่เป็นตัวแปรประเภทนั้น เช่น การสร้างอาร์เรย์ xx ขนาด 2×4(2แถวแนวตั้ง 4แถวแนวนอน) ให้เป็น int ก็ประกาศว่า

int [][]xx = new int[2][4];

หรือจะประกาศอาร์เรย์แบบกำหนดค่าเริ่มต้นก็ทำดังนี้

int [][]xx = {{7, 8, 4, 9},

       {9, 2, 3, 6}};

 

รูป 5-1-1

สำหรับดัชนีของอาร์เรย์สองมิติต้องระบุแถวแนวนอนคู่กับแถวแนวตั้ง เช่น เลข 7 ถูกเก็บอยู่ที่ช่อง xx[0][0] แถวที่ 0 ช่องที่ 0 ส่วน ช่องที่xx[1][2] เก็บค่า 3 เอาไว้ การตรวจสอบดัชนีมีความสำคัญเพราะถ้าเรียกผิดหรือเกินจำนวนช่องจำทำให้เกิด error ในจาวาสามารถใช้ .length เพราะใช้แทนขนาดอาร์เรย์ เช่น xx.length จะเป็นจำนวนของแถวแนวตั้ง ส่วนxx[0].length จะเป็นแถวแนวนอน และเวลาที่เขียนลูปเพื่อรับค่าเข้าหรือแสดงค่าออกของอาร์เรย์สองมิติจะต้องใช้ลูปวน 2 ชั้น

 

รูป 5-1-2

บรรทัดที่ 6 : ประกาศตัวแปร x เป็นอาร์เรย์สองมิติมี 4 แถวแนวตั้ง 5 แถวแนวนอน

บรรทัดที่ 8 : วนลูปชั้นแรกใช้เปลี่ยนแปลงตามแถวแนวตั้ง โดยมีค่าเริ่มต้นที่ 0 วนเท่าขนาดของ x โดยใช้

x.length

บรรทัดที่ 10 : วนลูปชั้นที่สองใช้เปลี่ยนแปลงตามแถวแนวนอน โดยมีค่าเริ่มต้นที่ 0 วนเท่าขนาดของ x[0] โดยใช้x[0].length

บรรทัดที่ 12 : เอาตัวแปรของลูป i และ j มาใส่ในช่องอาร์เรย์ของ x จากนั้นทำการแรนดอมเลขมาใส่

บรรทัดที่ 13 : แสดงค่าอาร์เรย์ออกทางหน้าจอ “\t” เพื่อทำการ tab เลขที่อยู่ติกันให้ห่างกันจะได้เหมือนกับรูป

ของอาร์เรย์

บรรทัดที่ 15 : เมื่อออกจากลูปของแถวแนวนอนในขึ้นบรรทัดใหม่ อาร์เรย์จะได้ไม่เรียงต่อกันเป็นแถวเดียว

ผลลัพธ์ที่ได้

 

รูป 5-1-3

 

คลาสสำหรับอาร์เรย์จาวา

            สิ่งที่ทำกับอาร์เรย์บ่อยๆก็จะมี การค้นหา การเรียงลำดับ การเปลี่ยนอาร์เรย์เป็นสตริง ซึ่งในจาวาก็มีคลาสที่ทำให้ไม่ต้องเขียนโค๊ดพวกนี้เอง ซึ่งอยู่ในคลาส java.util.Arrays ต้อง import มา

            binarySearch(a,x) จะเป็นหารค้นหาว่า x คือคีย์(key)หรือเลขที่เราต้องรู้ว่าอยู่ตรงไหน อยู่ดัชนีไหนในอาร์เรย์ คลาสที่จะค้นด้วยวิธี binary search

 

รูป 5-1-4

บรรทัดที่ 9 : ประกาศอาร์เรย์ที่เรียงลำดับแล้ว

บรรทัดที่ 10 : ใช้ binarySearch เพื่อหาตำแหน่ง ซึ่งจากตัวอย่างจะได้ 2 แต่ถ้าไม่มีลขนั้นอยู่ในอาร์เรย์จะคืนค่าเป็นลบ

            equals(a,b) ใช้ในการตรวจสอบอาร์เรย์แต่ละอาร์เรย์เหมือนกันหรือไม่ ซึ่งข้อมูลจะต้องเหมือนกันทั้งหมดถึงจะได้ค่า true ถ้าไม่เหมือนกันจะได้ค่า false

 

1.     

รูป 5-1-5

            sort(a) เอาสำหรับเรียงรำดับข้อมูลในอาร์เรย์ ส่วน toString(a) ช่วยเปลี่ยนอาร์เรย์ให้แสดงออกในรูปแบบของสตริงหรือข้อความ

 

รูป 5-1-6

ผลลัพธ์ที่ได้

 

รูป 5-1-7

แผนผังการเรียนเขียนโปรแกรม

 

___________________

รับสอนเขียนJAVA , C# , VB.net

โทร 0853507540

___________________

 

6. ฟังก์ชัน(Function)

___________________

รับสอนเขียนJAVA , C# , VB.net

โทร 0853507540

___________________

6. ฟังก์ชัน(Function)

            ฟังก์ชันหรือเรียกอีกชื่อหนึ่งว่าเมท็อด(method) มีความสำคัญต่อการเขียนโปรแกรมมากเพราะช่วยในการนำส่วนของโปรแกรมที่มีการทำงานซ้ำๆแยกออกมาเป็นส่วนย่อยๆ ช่วยลดความซ้ำซ้อนของโค๊ดภายในโปรแกรมและทำให้อ่านง่ายด้วย

เรื่องทั่วไปของเมท็อด

            จริงๆก่อนหน้าที่จะสังเกตเห็นว่าเราได้มีการใช้งานเมท็อดอยู่แล้วนั่นก็คือเมท็อด main ซึ่งมีความสำคัญคือการเป็นจุดเริ่มต้นการทำงานของโปรแกรม เพราะเป็นสิ่งที่จาวากำหนดมา โดยในตอนแรกๆที่เริ่มเขียนโปรแกรมเราจะเขียนทุกอย่างลงไปใน main แต่ถ้าเขียนไปเรื่อยๆจะพบว่าการเขียนใน main อย่างเดียวนั้น โปรแกรมจะยาวมากๆและเมื่อเกิด error ขึ้น ก็อาจจะทำให้การแก้ไขเกิดความลำบาก ดังนั้นการนำเมท็อดเข้ามาช่วยจะทำให้เป็นการลดความซับซ้อนในตรงนี้ลงไป เพราะเมท็อดจะนำสิ่งที่ใช้บ่อยๆแยกออกมาเขียนต่างหาก สำหรับการตั้งชื่อของเมท็อดนิยมตั้งชื่อที่เป็นคำกริยาที่สื่อความหมายเพราะว่าเมท็อดก็คือฟังก์ชัน ฟังก์ชันก็คือการทำงานพอเป็นเรื่องเกี่ยวกับการทำๆจึงตั้งชื่อคำกริยา เช่น getName, setName, random, paint เป็นต้น

ตัวอย่างของฟังก์ชัน

            โปรแกรมต่อไปนี้จะเป็นโปรแกรมเพื่อหาผลบวกและผลลบของเลขสองจำนวน โดยให้รับตัวเลขเข้าจากทางแป้นพิมพ์จากนั้นให้คำนวณหาเลขผลบวกและผลลบของจำนวนที่ให้มา

 

รูป 6-1

บรรทัดที่ 6-11 : การเขียนฟังก์ชันจะวางไว้บนหรือล่างของเมท็อด main ก็ได้ ที่หัวเมท็อด readInt

ในบรรทัดที่ 6 จะ มีปุ่มที่เป็นเครื่องหมายขีดลบอยู่ข้างๆ เมื่อกดจะเป็นการหุบเมท็อดนั้นเอาไว้เพื่อให้อ่านโค๊ดได้ง่ายๆเราอาจหุบเมท็อดที่เขียนเสร็จแล้วเอาไว้จะได้ใส่ใจกับเมท็อดที่เหลือได้เลย โดนเมท็อด readInt จะ ทำหน้าที่ในการแสดงข้อความออกทางหน้าจอเพื่อให้ผู้ใช้ใส่ข้อมูลและการรับข้อมูลจากแป้นพิมพ์ มาใส่ตัวแปล value จากนั้นก็ส่งค่า (return) value กลับไปที่ที่เรียกเมท็อดนี้

บรรทัดที่ 12-17 : เมท็อด add จะทำหน้าที่ในการบวกข้อมูล จากนั้นจึงส่งค่าผลรวมกลับไปยังที่ที่

เรียกเมท็อดนี้

บรรทัดที่ 18-24 : เช่นเดียวกับ add แต่จะทำหน้าที่ลบ

บรรทัดที่ 25 : ภายในเมท็อด main จะมีการทำงานดังนี้

บรรทัดที่ 27 : ประกาศตัวแปร sc เป็น Scanner โดยที่บรรทัดที่ 28 ประกาศอีกตัวแปรนึงเป็น int และเรียกใช้

เมท็อด readInt เพื่อเก็บค่าจากทางแป้นพิมพ์ การทำงานของโปรแกรมก็จะกระโดดไปทำบรรทัดที่ 8-

10 จากนั้นจึงกลับมาที่ บรรทัดที่ 28 อีกครั้งเพื่อทำบรรทัดต่อไป

บรรทัดที่ 29 : ประกาศอีกตัวแปรเพื่อรับเลขจำนวนที่สองที่ใช้สำหรับการคำนวณ และจะทำแบบเดียวกับ

บรรทัดที่ 27

บรรทัดที่ 31 : เรียกใช้เมท็อด add

บรรทัดที่ 32 :  เรียกใช้เมท็อด minus

ผลลัพธ์ที่ได้

 

รูป6-2

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

รายละเอียดเมท็อด

            รายละเอียดของเมท็อดที่สำคัญๆมีอยู่ 3 เรื่อง คือการเขียนหัวของเมท็อด ตัวของเมท็อดและการเรียกใช้งานเมท็อดให้ถูกวิธี

หัวเมท็อด

            สิ่งที่สำคัญในส่วนหัวของเมท็อดก็คือ ประเภทของผลลัพธ์ที่จะส่งออกไป ชื่อเมท็อดแล้วก็พารามิเตอร์ที่จะรับเข้ามาสู่เมท็อด มีรูปแบบดังนี้

            Public static ประเภทของลัพธ์ ชื่อเมท็อด (พารามิเตอร์ที่เข้าเมท็อด)

–          ชื่อของเมท็อดก็คือชื่อที่ใช้ระบุว่าเมท็อดนี้ทำงานอะไร การตั้งชื่อเหมือนกับการตั้งชื่อตัวแปรแต่นิยมใช้คำกริยาสำหรับบอกว่าเมท็อดจะทำอะไร บางทีก็ตั้งเป็นคำนาม แต่การตั้งเป็นคำนามจะนิยมใช้สำหรับการคืนค่าของนามนั้นออกไปเช่น x, width แต่บางคนก็พยายามตั้งเป็นคำกริยาเช่น getWidth, getX

–          ประเภทองผลลัพธ์คือเมื่อเมท็อดทำงานเสร็จจำให้คืนค่าอะไรออกไปก็ให้ตั้งให้ตรงกับที่จะสิ่งออกไป เช่นในเมท็อด add ของบน ต้องคืนผลลัพธ์ที่ได้จากการบวกตัวเลขจำนวนเต็มสองจำนวนดังนั้นก็ต้องคืนค่าผลลัพธ์ที่เป็นจำนวนเต็ม จึงมีคำว่า int หน้าชื่อเมท็อด add

–          พารามิเตอร์(parameter) คือตัวแปรที่รับเข้ามาจากที่ๆเรียกเมท็อดเพื่อให้มาประมวลผลภายในเมท็อด ดังนั้นถ้ามีหลายๆเมท็อดที่ชื่อเหมือนกันโปรแกรมจะเลือกเมท็อดที่พารามิเตอร์ตรงกับเมท็อดนั้นๆ เรียกว่า overloading

 

รูป 6-3

จากในรูปมีเมท็อด add สองอันแต่รับพารามิเตอร์คนละตัวดังนั้นถ้ามีการเรียกใช้โปรแกรมๆจะดูว่าเมท็อดไหนรับพารามิเตอร์แบบไหนแล้วจะส่งการทำงานไปที่เมท็อดนั้นๆ ดังนั้นในบรรทัดที่ 23 จะส่งการทำงานไปที่บรรทัดที่ 11 ส่วนบรรทัดที่ 28 จะส่งการทำงานไปที่บรรทัดที่ 6

ตัวเมท็อด

            ตัวเมท็อดคือส่วนที่เขียนอยู่ระหว่าง { และ } ภายใต้หัวของเมท็อด หลังจากการทำงานของเมท็อดเสร็จเรียบร้อยก็จะกลับไปทำงานคำสั่งต่อไปใน main ต่อ

–          ภายในตัวเมท็อดหากเราทำการประกาศตัวแปร ตัวแปรนั้นจะเป็นของเมท็อดๆนั้นเท่านั้น ไม่สามารถนำไปใช้ที่อื่นได้ เรียกว่า ตัวแปรเฉพาะที่(local variable) ซึ่งตัวแปรเฉพาะที่ชื่อเหมือนกันแต่อยู่กันคนละเมท็อดก็ถือว่าเป็นคนละตัวแปรเลยไม่เกี่ยวข้องกัน

–          ถ้าเมท็อดมีผลลัพธ์ที่ต้องคืนค่าออกไป จะต้องมีคำสั่ง return x; ซึ่งตัวแปร x จะต้องเป็นตัวแปรประเภทเดียวกันกับประเภทของตัวแปรที่จะคืนค่าออกไป แต่ถ้าไม่มีการคืนค่าออกไปเมท็อดจะสิ้นสุดการทำงานที่เครื่องปิดของ } พอดี

 

รูป 6-4

บรรทัดที่ 17 : ใช้เมท็อด f โดยให้ประเภทตัวแปรที่คืนค่าออกไปเป็น double แต่เมื่อ บรรทัดที่ 19 คืนค่าของไป

เป็น int จะเปลี่ยนเป็น double ให้อัตโนมัติ

บรรทัดที่ 23 : ใช้เมท็อด f โดยให้ประเภทตัวแปรที่คืนค่าออกไปเป็น int แต่เมื่อต้องการคืนค่าคืนเป็น

double(0.0) โปรแกรมจะ error เพราะไม่สามารถเปลี่ยนค่าจาก double  เป็น int ได้

ดังนั้นการต้องคืนค่าประเภทเดียวกันกับประเภทของตัวแปรที่จะคืนค่าออกไป

แผนผังการเรียนเขียนโปรแกรม

 

___________________

รับสอนเขียนJAVA , C# , VB.net

โทร 0853507540

___________________

 

6.1 ฟังก์ชัน(ต่อ)

___________________

รับสอนเขียนJAVA , C# , VB.net

โทร 0853507540

___________________

6.1 ฟังก์ชัน(ต่อ)

ต่อไปนี้จะเป็นการพูดถึงในส่วนที่เหลือที่เกี่ยวข้องกับฟังก์ชัน ได้แก่ การเรียกใช้ฟังก์ชันทั้งจากภายในคลาสเดียวกันและจากต่างคลาสกัน อีกเรื่องได้ฟังก์ชันเรียกซ้ำ(recursive function)

Pass-by-value และ Pass-by-reference

            เนื่องจากการเรียกใช้ฟังก์ชันจะมีวิธีการที่ต้องเรียกเมท็อดแบบสร้าง reference ดังนั้นจะขออธิบายเรื่อง pass-by-value และ pass-by-reference ก่อน

Pass-by-value เป็นเรื่องของการส่งค่าระหว่างตัวแปรของประเภทข้อมูลชนิดต่างๆ ซึ่งจริงๆก็เป็นการส่งค่าตัวแปรแบบธรรมดาอย่างที่ได้ทำกันมาแล้ว เช่น a = 1; b = 6; a = b;    ผลลัพธ์ a =6; เป็นต้น เพราะฉะนั้นเครื่องหมาย = จึงมีความหมายว่าเอาค่าทางขวาไปใส่ทางซ้าย

ส่วน pass-by-reference มีความพิเศษกว่าแบบบนตรงที่เป็นเรื่องเกี่ยวกับอ็อปเจ็คด้วย เป็นเรื่องเกี่ยวกับการชี้[1](ด้วยเครื่องหมาย = ) กล่าวคือ เครื่องหมาย = จะมีความหมายว่าค่าทางซ้ายและค่าทางขวาชี้ไปที่อ็อปเจ็คเดียวกัน ค่าก็จะเหมือนกันด้วย

ตัวอย่างของ pass-by-reference

 

รูป 6-1

บรรทัดที่ 11 : สร้างตัวแปร x1 เป็นอ็อปเจ็คของคลาส StudyReference โดยกำหนดตัวแปรใน () เป็น 1

บรรทัดที่ 12 : สร้างตัวแปร x2 เป็นอ็อปเจ็คของคลาส StudyReference โดยกำหนดตัวแปร เป็น null หรือว่าง

เปล่า ถ้าสั่งแสดงผลของ x2 เลยันที จะเกิด java.lang.NullPointerException

บรรทัดที่ 14 : สั่งแสดงผลค่าของ x1

บรรทัดที่ 16 : ให้ x2 ชี้ไปยังอ็อปเจ็คที่ x1 ชี้อยู่

บรรทัดที่ 17 : ให้ x1 ชี้ไปยังอ็อปเจ็คใหม่คือเลข 25

บรรทัดที่ 19 : ให้แสดงค่าของ x1 ที่ชี้ไปที่อ็อปเจ็คใหม่ออกมา

บรรทัดที่ 20 : เนื่องจาก x2 ชี้ไปสิ่งเดียวกันกับที่ x1 ชี้อยู่ ดังนั้นเมื่อ x1 ชี้ไปสิ่งใหม่ x2 ก็จะต้องเปลี่ยนสิ่งที่ชี้ไป

ตาม x1 ด้วย ดังนั้น x2 จะต้องได้แสดงค่า 25

ผลลัพธ์ที่ได้

 

รูป 6-2

การเรียกใช้เมท็อด

            การเรียกใช้งานฟังก์ชัน จะต้องทำการพิมพ์ชื่อฟังก์ชันและใส่พารามิเตอร์ที่ถูกต้องกันกับฟังก์ชันนั้นไว้ใน ( ) ดังนี้

ชื่อเมท็อดที่ต้องการเรียกใช้(พารามิเตอร์);

สิ่งที่ต้องต้องรู้คือ

–          เวลาที่เราส่งค่าพารามิเตอร์ไปให้เมท็อด ค่านั้นจะเป็นค่าเริ่มต้นของเมท็อดทันทีโดยแม้เมท็อดจะกำหนดค่าใหม่ก็ไม่ได้มีผลอะไร

 

รูป 6-1-1

บรรทัดที่ 6-7 : ตั้งค่าเริ่มต้นให้กับตัวแปร a และ b

บรรทัดที่ 9-10 : เรียกใช้เมท็อด set ที่รับพารามิเตอร์เป็นตัวแปรจำนวนเต็ม ใส่พารามิเตอร์เป็นตัว

แปร a และ b ลงไป

บรรทัดที่ 18 : ภายในเมท็อด set รับพารามิเตอร์เป็นตัวแปร b และตั้งค่า b เป็น 0

ผลลัพธ์ที่ได้

 

รูป 6-1-2

            จะเห็นได้ว่าผลลัพธ์ที่ได้ยังเป็นเลขที่ส่งออกไปตั้งแต่แรกคือ a = 25 และ b = 60 การที่ทั้ง aและ b ไม่เกิดการเปลี่ยนแปลงก็เพราะว่าเมท็อดจะรับค่าตั้งต้นเป็นพารามิเตอร์จากจุดที่มีการเรียกใช้เมท็อด การเปลี่ยนแปลงที่เกิดขึ้นจากการตั้งค่าใหม่ในเมท็อดก็จะไม่เปลี่ยนค่าของตัวแปรไป และอีกประการคือตัวแปร b ที่กำหนดที่เมท็อด set ก็ถือว่าเป็นคนละตัวกับตัวแปร b  ที่อยู่ในmain ด้วย

การเรียกใช้เมท็อดในคลาสอีกแบบคือการเรียกเมท็อดแบบสร้าง reference แบบที่ได้พูดถึงข้างบน

 

รูป6-1-3

บรรทัดที่ 8 : ประกาศตัวแปร x เป็นตัวแปรไม่ธรรมดา

บรรทัดที่ 9 : ให้ x เรียกเมท็อด print มาใส่ตัวเอง จากนั้นนำค่าไปเก็บใส่ a

การเรียกใช้เมท็อดต่างคลาสกัน

            ในกรณีที่เราเขียนโปรแกรมที่มีขนาดใหญ่ๆซึ่งประกอบไปหลายๆคลาส บางครั้งเราก็ต้องการทำงานที่เหมือนๆกัน เช่น ในคลาส a เราเขียนเมท็อดสำหรับการบวก แต่เมื่อเราเขียนคลาส b เราก็ต้องการใช้งานเมท็อดสำหรับการบวกอีก ในจาวาสามารถที่จะเรียกใช้งานเมท็อดการบวกในคลาส a มาใช้ในคลาส b ได้เลยโดยไม่ต้องเขียนเมท็อดสำหรับการบวกใหม่ หรือก็คือของต่างคลาสกันสามารถใช้งานกันได้เพื่อจะได้ไม่ต้องเขียนเมท็อดเดิมเพิ่มขึ้นมาอีกครั้งหนึ่ง

แบบที่ 1 สร้างตัวแปรไม่ธรรมดา

class xx

{

               public static void main(String args[]) {

               ชื่อคลาสที่เมท็อดนั้นอยู่  a = new ชื่อคลาสที่เมท็อดนั้นอยู่();

  }

}

 

หรืออาจเรียกใช้งานได้โดย การ new ขึ้นมาเลย

class xx
{
                public static void main(String args[]) {
                new ชื่อคลาสที่เมท็อดนั้นอยู่  ();
  }
}

 

 เมื่อสร้างตัวแปรของคลาสนั้นมาแล้วทำให้เครื่องหมาย “.”  เพื่อ

class xx
{
               public static void main(String args[]) {
                ชื่อคลาสที่เมท็อดนั้นอยู่    a = new ชื่อคลาสที่เมท็อดนั้นอยู่  ();
               a.เมท็อดที่ต้องการเรียกใช้();
  }

ฟังก์ชันเรียกซ้ำ(Recursive function)

            การเขียนฟังก์ชันมากๆ บางครั้งก็มีการเรียกใช้งานกันไปมาเช่น ฟังก์ชัน a เรียก ฟังก์ชัน b แต่ในฟังชัน b ก็มีการเรียกใช้งาน a และก็เป็นไปได้ที่ฟังก์ชันจะมีการเรียกตัวเองให้ทำงาน

 

ตัวอย่างการหาจำนวนฟิโบนัคชี(Fibonacci number) ด้วยการเขียนฟังก์ชันแบบเรียกซ้ำ

 

รูป 6-1-4

ในเมท็อด main ทำการวนลูปจาก 0-10 และเรียกใช้ฟังก์ชัน fibo เพื่อคำนวณหาเลขฟิโบนัคชี การเรียกซ้ำอยู่ตรงที่ บรรทัดที่ 19 จะให้หาค่าจนกว่าจะได้ตามที่เขียน ถ้าเขียนเมท็อดนี้ด้วย ลูปก็ได้แต่จะยาวและดูยากมาก

ผลลัพธ์จำนวนฟิโบนัคชี 10 ตัวแรก

 

รูป 6-1-5

 


[1] การชี้หมายถึงชี้ยัง memory ที่ตัวแปรจองตำแหน่งไว้ใน heap memory

 

แผนผังการเรียนเขียนโปรแกรม

 

___________________

รับสอนเขียนJAVA , C# , VB.net

โทร 0853507540

___________________

 

7. อ็อปเจ็ค(Objects)

___________________

รับสอนเขียนJAVA , C# , VB.net

โทร 0853507540

___________________

7. อ็อปเจ็ค(Objects)

            เรื่องอ็อปเจ็คเป็นเรื่องต่อเนื่องกับเรื่องฟังก์ชัน ต่อไปนี้จะพูดถึงเรื่องคลาสกับอ็อปเจ็คซึ่งเป็นเรื่องสำคัญสำหรับภาษาจาวา

คลาส(Class)

            เป็นเหมือนแบบร่างของวัตถุ เป็นเหมือนแปลนหรือแบบของบ้านเวลาจะสร้างบ้าน แต่แบบบ้านไม่ใช่บ้านจริงๆถ้าอยากอยู่ในบ้านได้จริงๆก็ต้องสร้างบ้านตามแบบแปลนขึ้นมาก่อน คลาสก็เช่นเดียวกันเป็นแบบแปลนที่เก็บข้อมูล เมท็อดว่าจะทำงานอะไรบ้าง สำหรับรอการสร้างเป็นอ็อปเจ็คที่สามารถใช้งานได้จริง

รูปแบบของคลาส

(modifier) class ชื่อคลาส[1] {

ประกาศตัวแปรคลาส

เมท็อดต่างๆของคลาส

}

ตัวแปรคลาส

            ตัวแปรจะเป็นตัวกำหนดลักษณะ ต้องประกาศภายในวงเล็บของคลาส

modifier ชนิดข้อมูล ชื่อตัวแปรคลาส;

เช่น

                public class Student  {

                        public int Stu_Id

public String name

private String phone

}

อ็อปเจ็ค(Object)

เป็นสิ่งที่สร้างขึ้นมาจากแบบแปลที่วางไว้ก็คือการทำให้แบบแปลนสามารถใช้งานได้จริงๆ ซึ่งอ็อปเจ็คจะมีสมบัติอยู่ 2 อย่าง อย่างแรกก็คือ ลักษณะ(attribute หรือ data) ก็คือรูปร่าง ลักษณะของวัตถุ และ สิ่งที่ทำได้(behavior หรือ method) ก็คือความสามารถของวัตถุ

ตัวอย่างเช่น หากเราจะสร้างหุ่นยนต์ขึ้นมา ก็ต้องมีการกำหนดรูปร่างหน้าตาขอหุ่นยนต์ หุ่นยนต์กู้ซากปรักหักพังก็จะมีหน้าตาต่างกับหุ่นยนต์ที่เป็นโอเปอเรเตอร์ต้อนรับคนหน้าโรงแรม ซึ่งเราก็ต้องกำหนดว่าจะมีสี มีรูปร่าง อย่างไร ส่วนการทำงานก็เช่น จะเก็บของอะไรบ้าง จะกระโดข้ามสิ่งกีดขวางหรือบุกไปเลย

หรืออีกตัวอย่างก็เช่นเวลาต้องการสร้างอ็อปเจ็คของพนักงานบริษัท พนักงานบริษัทก็ต้องประกอบไปด้วยคุณลักษณะคือมีรหัสพนักงาน ชื่อ นามสกุล ตำแหน่ง เงินเดือน และเมท็อดหรือสิ่งที่ทำก็เช่นการรับเงินเดือน เป็นต้น

การประกาศตัวแปรอ็อปเจ็ค

ชื่อคลาส ตัวแปรอ็อปเจ็ค ;

Student student;

การสร้างอ็อปเจ็ค

new ชื่อคลาส(พารามิเตอร์);

new Student();

หรือจะประกาศไว้ในบรรทัดเดียวกันก็ได้

Student student = new Student();

            เมื่อทำการประกาศตัวแปรอ็อปเจ็คถึงตรงนี้ก็จะทำให้มีอ็อปเจ็คที่สร้างขึ้นมามีคุณลักษณะและการทำงานแบบเดียวกับที่ตัวแปรคลาสและเมท็อดได้กำหนดเอาไว้ โดยที่มี student เป็นตัวอ้างอิงอ็อปเจ็คประเภท Student (เวลาเราสร้างคลาสก็จะถือว่าคลาสนั้นเป้นตัวแปรแบบพิเศษเหมือนพวก Array ก็เลยสร้างด้วยการ new ขึ้นมาได้)

การใช้ตัวแปรและเมท็อดประจำอ็อปเจ็ค

            เวลาที่สร้างตัวแปรแปรอ้างอิงอ็อปเจ็คขึ้นมาแล้ว ก็ต้องมีการเรียกใช้ตัวแปรและเมท็อด กล่าวคือ ตัวแปรอ็อปที่สร้างอ็อปเจ็คขึ้นมาจะทำให้อ็อปเจ็คมีรูปร่างหน้าตาและทำงานได้แบบในคลาส เช่น คลาส Student นักเรียน กำหนดว่านักเรียนมีรูปร่างเป็นน้ำหนักกับความสูง มีเมท็อดคือการรับเวลาเข้า-ออกโรงเรียน  พอสร้างตัวชี้อ็อปเจ็ค student ขึ้นมา student ก็จะมีน้ำหนักและส่วนสูงได้ แต่ยังไม่ได้บอกว่าเท่าไหร่ ทีนี้ถ้าจะกำหนดค่าน้ำหนักและส่วนสูงให้ student ก็ต้องกำหนดว่าให้น้ำหนักของ student เป็นเท่าๆไหร่  โดยการใช้เครื่องหมาย . (dot operator)ต่อด้วยตัวแปรประจำอ็อปเจ็ค

ตัวแปรอ้างอิงอ็อปเจ็ค. ชื่อตัวแปรประจำอ็อปเจ็ค

เช่น สมมติจะให้ h เก็บความสูง ก็เขียน student. h (อ่าน . ว่าของ ในที่นี้อ่านว่า h ของ student) student. h = 165 เป็นต้น

ในทำนองเดียวกนหากจะให้ตัวแปรอ็อปเจ็คเรียกเมท็อดก็ให้ใช้ เครื่องหมาย .

ตัวแปรอ้างอิงอ็อปเจ็ค. ชื่อเมท็อด();

 

รูป7-1

สร้างคลาสใหม่ขึ้นมาหนึ่งคลาสประกอบด้วยตัวแปรคลาส 3 ตัวคือ width, height, depth ให้เป็น double พร้อมด้วยเมท็อด volume ที่ทำหน้าที่คำนวณและคืนค่าออกไป สังเกตว่าตัวแปรเป็น double เมื่อเอาคำนวณก็ต้องคืนค่า double ออกไป

 

รูป 7-2

            หลังจากนั้นสร้างขึ้นมาอีก 1 คลาส

บรรทัดที่ 6 : สร้างตัวแปรอ้างอิงอ็อปเจ็ค box1 อ้างอิงตัวแปรประเภท Box

บรรทัดที่ 7 : สร้างตัวแปรอ้างอิงอ็อปเจ็ค box2 อ้างอิงตัวแปรประเภท Box

บรรทัดที่ 9-11 : กำหนดค่าตัวแปรคลาสของอ็อปเจ็ค box1 ด้วย . (dot operator)กลายเป็น width ของ box1

คือ 9

บรรทัดที่ 13-15 : กำหนดค่าตัวแปรคลาสของอ็อปเจ็ค box2 ด้วย . (dot operator) กลายเป็น depth ของ

box2 คือ 12

บรรทัดที่ 17 : ให้แสดงผลออกทางหน้าจอ โดยให้เอาค่าจากการคำนวณของเมท็อด volume มาแสดง ก็ใช้วิธี

เดียวกับตัวแปรคือใช้เครื่องหมาย . เรียกเมท็อด เมื่อทำการ .volume ขึ้นมา width, height, depth ของ box1 จะถูกนำไปคำนวณ

บรรทัดที่ 19 : ให้แสดงผลออกทางหน้าจอ โดยให้เอาค่าจากการคำนวณของเมท็อด volume ของ box 2 มา

แสดง

จะเห็นได้ว่าตอนที่เรียกเมท็อด volume เรียกจากอ็อปเจ็คคนละตัวคือ box1 และ box2 ดังนั้นแม้ในเมท็อด volme จะเขียนว่า width * height * depth แต่ก็จะเป็นค่า width, height, depthที่มาจากคนละค่ากัน ผลลัพธ์ก็จะไม่เหมือนกัน

ผลลัพธ์ที่ได้

 

รูป7-3

            นี่ก็คือตัวอย่างของคลาสและอ็อปเจ็ค คลาส Box ประกอบไปด้วยตัวแปรและมีเมท็อดที่ทำหน้าที่คำนวณ เมื่อสร้างคลาส BoxTest ขึ้นมา ก็สร้างอ็อปเจ็คขึ้นมาโดยที่อ็อปเจ็คนั้นจะใช้ตัวแปรและมีการทำงานแบบที่คลาสกำหนดไว้เลย

Modifier

            มี 2 แบบคือ access modifier กับ non- access modifier แต่จะพูดแค่ access modifier ก็คือสิ่งที่ประกาศไว้เพื่อระบุถึงการถูกเข้าถึง จะประกาศหน้าคลาส เมท็อดหรือตัวแปรคลาส ซึ่งได้แก่ public, protected, private และ package (แต่ protected และ private ใช้หน้าคลาสไม่ได้) ที่ได้เห็นกันมาตั้งแต่ในเมท็อด main ตรงด้านหน้า public static void main(String [] args)

            เป็นส่วนหนึ่งของเรื่อง OOP เรื่อง encapsulation ทำหน้าที่ในห่อหุ้มข้อมูลไม่ให้ถูกเห็นหรือเรียกใช้งานได้จากภายนอก ดังนั้นข้อมูลก็จะไม่ถูกแก้ไข

 

รูป 7-4

อธิบายรูป

public – ถ้าประกาศ public หน้าคลาส เมท็อด ตัวแปรคลาสใด คือคลาสอื่นๆจะสามารถนำไปใช้ได้อย่าง

อิสระ

protected – สามารถใช้ได้กับคลาสเดียวกัน package เดียวกัน และ คลาสที่เป็นแม่ลูกกัน แต่กับ package

อื่นๆจะไม่สามารถเรียกใช้ได้

private – จะปิดการเข้าถึงจากภายนอกทั้งหมด (ใช้กับ recursive ฟังก์ชัน)

 

เกี่ยวกับเมท็อดเพิ่มเติม

            เวลาที่กำหนด modifier เป็น private ให้กับตัวแปรคลาส คลาสอื่นเวลาเรียกตัวแปรนี้เอาไปใช้ก็เปลี่ยนแปลงอะไรไม่ได้ แต่ผู้เขียนโปรแกรมก็ต้องใช้วิธีอื่นสำหรับให้ผู้อื่นเปลี่ยนแปลงค่าของตัวแปรเหล่านั้น โดยใช้วิธี Accessor Method กับ Mutator Method

            Accessor Method ใช้ดึงค่าจากตัวแปรคลาสแล้วส่งออกไปนอกเมท็อด ใช้คำว่า getตามด้วยตัวแปรที่ถูกตั้งเป็น private

Mutator Method เมท็อดสำหรับการเปลี่ยนแปลงแก้ไข ใช้คำว่า set ตามด้วยตัวแปรที่ถูกตั้งเป็น private

 

รูป 7-5

สร้างคลาสหนึ่งขึ้นมา สร้างตัวแปรที่เป็น private คือไม่สามารถเปลี่ยนแปลงค่าที่ให้ได้ แต่ก็ให้เมท็อดสำหรับการเปลี่ยนค่าด้วย

บรรทัดที่ 6 : เมท็อด setNumber สำหรับรับเลขที่เป็น int เข้ามาแล้วไปเก็บไว้ในตัวแปร number

บรรทัดที่ 7 : เมท็อด getNumber สำหรับการส่งค่าของเมท็อดที่แก้ไขแล้วออกไป

 

รูป7-6

บรรทัดที่ 6 : สร้างอ็อปเจ็คเพื่อเรียกใช้สิ่งต่างๆจากคลาส Number

บรรทัดที่ 11 : ให้แสดงค่าของ x ซึ่งเป็นค่าเดียวกับ number ที่ getNumber มา ต้องเป็น 5

บรรทัดที่ 13 : ใช้ เมท็อด setNumber เพื่อเปลี่ยนแปลงค่าให้ให้เป็น 26

บรรทัดที่ 14 : ใช้เมท็อด getNumber อีกครั้งเพื่อแสดงค่าที่เปลี่ยนแปลงแล้วออกมา

ผลลัพธ์

 

 

___________________

รับสอนเขียนJAVA , C# , VB.net

โทร 0853507540

___________________

 

8. สตริง(String)

___________________

รับสอนเขียนJAVA , C# , VB.net

โทร 0853507540

___________________

8. สตริง(String)

            สตริงใช้สำหรับเก็บตัวอักษร ตัวเลข ทำให้เข้าใจได้ง่ายมากขึ้นเพราะปกติคอมพิวเตอร์จะทำงานด้วยตัวเลข แต่มนุษย์สื่อสารด้วยตัวหนังสือ สตริงจะมีเครื่องหมายเปิด ปิดคือ “ และ ” เช่น “Hello World” สตริงจะทำการเรียงตัวอักษรต่อกันในหน่วยความจำ อย่างเช่น “Hello World” จะถือว่ามีสตริงอยู่ 11 ตัว โดยดัชนี(index)เริ่มต้นที่ 0

เมท็อดในสตริง

            นอกเหนือจากเมท็อดที่สตริงมีให้ยังมีเรื่องเครื่องหมาย + ที่ได้เขียนกันมาแล้ว เครื่องหมาย + ในจาวานอกจากจะหมายถึง บวก ในตัวดำเนินการ ยังหมายถึงการต่อสตริงด้วย  เช่น System.out.println(“สวัสดีคุณ ”+name)  หมายถึงเอาสตริงของตัวแปร name ไปต่อกับสตริงที่อยู่ใน ( )

นอกจากนี้ในสตริงยังมีเมท็อดสำหรับการใช้งานซึ่งเมท็อดที่สำคัญๆและใช้งานบ่อยๆมีดังนี้

String s;

s.length( ) คือขนาดของสตริง จำนวนตัวอักษรทั้งหมด เช่น Hello มี length 5 ตัวอักษร

s.trim( ) ใช้สำหรับตัดช่องว่างด้านหน้าและด้านหลังสตริง คือเวลาที่ทำกล่องให้กรอกข้อมูลบางครั้งผู้กรอกข้อมูลอาจใส่ช่องว่างโดยที่ไม่ได้ตั้งใจ การตัดช่องว่างออกจะทำให้การประมวลผลเข้าใจได้ง่าย เช่น เวลานับตัวอักษรบนสตริงก็จะไม่งง

s.substring( i, j ) เอาสับสตริงตัวที่ i ถึง j-1 ออกมาจากสตริง เช่น Hello substring(2, 5) จะได้สับสตริง ell คือ e เป็นตัวที่ 2 ส่วน l เป็นตัวที่ 3 และ l อีกตัวเป็นตัวที่ j-1 คือ 5-1 = 4 ของสตริง

s.indexOf( t, i ) หาตัวอีกษรหรือข้อความ t โดยเริ่มหาจากตัวที่ i ใช้ในกรณีที่ต้องการหาคำบางคำและอาจจะตัดคำๆนั้นด้วย substring เอาไปใช้งานต่อ

s.equals( t ) ถ้า s เหมือนกับ t ทุกประการให้คืนค่าจริง

s.equalsIgnoreCase( t ) ถ้า s เหมือนกับ t ทุกประการให้คืนค่าจริงโดยไม่สนว่าจะตัวใหญ่เล็กไม่เหมือนกัน ถ้าข้างบนคือตัว T t ถือว่าเป็นคนละตัวเลย

s.toUpperCase( ) เปลี่ยนทุกตัวในสตริงให้เป็นตัวอักษรใหญ่(capital letter)

s.toLowerCase( ) เปลี่ยนทุกตัวในสตริงให้เป็นตัวอักษรเล็ก(small letter)

ข้อมูลประเภท char

char จะเป็นการเก็บข้อมูลแค่ 1 ตัวอักษร โดยจะเขียนเครื่องหมาย ‘ และ ’ เพื่อเปิดปิดตัวอักษรนั้น เช่น char c = ‘a’; เนื่องจากในจาวา char จะถูกมองเป็นตัวเลขเหมือน 1 2 จึงสามารถใช้เครื่องหมาย ==   >=   <=   !=  ในการตรวจสอบ char ได้ รวมถึง operation ต่างๆ เช่น + – * / % ได้ด้วย อย่าง ‘ก’+1 จะได้ ข

เมท็อดที่เกี่ยวข้องกับ char ได้แก่ s.charAt(i) คืนค่า char ตำแหน่งที่ i ของสตริง s

การใช้

 

รูป 8-1

โปรแกรมนี้ต้องการตรวจสอบว่าถ้ามีสตริง 2 สตริง จะมีสตริง2 เป็นสับสตริงของสตริงแรกหรือไม่

บรรทัดที่ 8 : ประกาศตัวแปรสตริง s1 และ s2 จากนั้นให้รับข้อมูลจากแป้นพิมพ์มาใส่สตริง

บรรทัดที่ 11,13: รับข้อมูลจากแป้นพิมพ์มาใส่สตริง โดยใช้ nextLine()

บรรทัดที่ 15 : ใช้เงื่อนไขตรวจสอบ ถ้าตรวจข้อความในสตริง s2 เทียบกับ s1 แล้วคืนค่า -1 ก็คือไม่

มี s2 อยู่ใน s1 ให้แสดงผลทางหน้าจอว่าไม่มี

บรรทัดที่ 20 : วนลูปโดยให้ตัวแปร i มีค่ามากกว่า 0 แต่ไม่เกินขนาดของสตริงs1 ให้วนลูป

ตรวจสอบคำสั่งในลูป

บรรทัดที่ 22 : ให้หาว่ามี s2 อยู่ใน s1 หรือไม่ โดยตรวจสอบจากดัชนีที่เริ่มและสิ้นสุดตามการวน

ลูปของตัวแปร i

บรรทัดที่ 23 : ตรวจสอบเพื่อความมั่นใจว่าถ้ามีค่าเป็น -1 ให้ break หรือหยุดทำงานเลย

บรรทัดที่ 24 : แต่ถ้าเจอให้แสดงผลออกทางหน้าจอว่าเจอ s2 ทีดัชนีที่เท่าไหร่ของ s1

ผลลัพธ์

            ใส่คำว่า Study Java ลงไป และให้หาคำว่า Jav ซึ่งพบที่ดัชนีที่ 6 (ช่องก็นับด้วย)

 

รูป 8-2

พาลินโดรม

            พาลินโดรมคือคำ ตัวเลข สัญลักษณ์ที่มีสมมาตร เช่น dad Anna 123454321หรือประโยคก็ได้ เช่น  Eva, can I stab bats in a cave? ภาษาไทยก็เช่น ทายาท หรือประโยค ดีใจคุณแม่คุณใจดี

            โปรแกรมต่อไปนี้จะตรวจสอบว่าสตริงที่รับเข้ามาเป็นพาลินโดรมหรือไม่

 

รูป 8-3

บรรทัดที่ 9-12 : ประกาศตัวแปรสตริงและรับข้อมูลจากแป้นพิมพ์เข้ามาใส่สตริง

บรรทัดที่ 14-15 : ให้ x เก็บความยาวของสตริงและ y เก็บดัชนีตัวหลังสุดของครึ่งซ้ายของสตริง(เวลาดูพาลินโด

รมก็ตรวจดูที่ละครึ่งว่าครึ่งหน้าเหมือนครึ่งหลังไหม)

บรรทัดที่ 16 : ประกาศตัวแปร isPalindrome ให้มีค่าเป็นจริง

บรรทัดที่ 19 : ตรวจว่าเท่ากันไหมระหว่างครึ่งแรกเท่ากับครึ่งหลังคือตัวที่ความยาวทั้งหมดลบ1 โดยใช้ == ได้

เพราะ char จะเก็บข้อมูลแบบหนึ่งตัวอักษร (ถ้าเทียบสตริงต้องใช้ .equals)

บรรทัดที่ 22 : ถ้าไม่ใช่พาลินโดรมให้ออกจากลูป

บรรทัดที่ 28 : ประกาศตัวแปร result เก็บค่าจากการตรวจสอบโดยใช้ if ถ้าจริงให้แสดงว่าเป็น ถ้าไม่ให้แสดง

ว่าไม่เป็น

ผลลัพธ์

 

รูป 8-4

 

แผนผังการเรียนเขียนโปรแกรม

 

___________________

รับสอนเขียนJAVA , C# , VB.net

โทร 0853507540

___________________