Professional Documents
Culture Documents
Java Tutor1
Java Tutor1
3) คําสั่ง (Statement)
1 2 3 4 ขอบเขตของคําสัง่ จะอยูซ่ ้ อนเข้ าไปภายในขอบเขตของเมท็อดอีกชันหนึ
้ ง่
1 public class HelloJava {
2 public static void main(String[] args) {
3 System.out.println("Hello Java");
4 } คําสัง่ แต่ละคําสัง่ จะจบด้ วยเครื่ อง
5 } เมื่อจบ 1 คําสัง่ ควรขึ ้นบรรทัดใหม่ หมายอัฒภาค (Semicolon)
© สงวนลิขสิทธิ์ พฤศจิกายน 2553 (ปรับปร ุงครัง้ ที่ 7 ฉบับใช้ติวภาค 2/2553) เรียบเรียงโดย วงศ์ยศ เกิดศรี (แบงค์)
2 Computer Programming using Java 01 - Introduction to Java Programming
3. องค์ ประกอบเพิ่มเติมของโปรแกรมภาษาจาวา
ภายในโปรแกรมนอกจากจะมี 3 องค์ประกอบหลักแล้ ว ก็ยงั มีสว่ นที่เรี ยกว่า “หมายเหตุ (Comment)” ซึง่ เป็ น
ข้ อความหรื อคําบรรยายสันๆ
้ ที่ใช้ สําหรับจดทันทึกรายละเอียดบางอย่างภายในโปรแกรมที่เขียนขึ ้น ดังตัวอย่าง
1 public class HelloJava { หมายเหตุสามารถอยูบ่ ริเวณใด
2 public static void main(String[] args) {
3 System.out.println("Hello Java"); หรื อบรรทัดใดของโปรแกรมก็ได้
4 } // End of method
5 } /* End of class */ หมายเหตุจะมีปรากฏในโปรแกรมหรื อตัดออกไปก็ได้
โดยไม่มีผลต่อการทํางานของโปรแกรมแต่อย่างใด
หมายเหตุในภาษาจาวามี 3 รูปแบบดังนี ้
1. หมายเหตุแบบบรรทัดเดี่ยว (Single Line Comment) เช่น // Text ซึง่ มีความหมายว่าสิ่งใดก็ตามที่
อยูห่ ลังเครื่ องหมาย // ภายในบรรทัดเดียวกันนันจะเป็
้ นหมายเหตุทงหมด
ั้
2. หมายเหตุแบบหลายบรรทัด (Multiple Line Comment) เช่น /* Text */ ซึง่ มีความหมายว่าสิง่ ใดก็
ตามที่อยูร่ ะหว่างเครื่ องหมาย /* กับ */ จะกี่บรรทัดก็ได้ จะเป็ นหมายเหตุทงหมด
ั้
3. หมายเหตุสาํ หรั บสร้ างแฟ้มเอกสารจาวา (Java Documentation Comment) เช่น /** Text */ มี
ความหมายเหมือนกับหมายเหตุแบบที่สอง แต่ใช้ สําหรับการสร้ าง Java Document เท่านัน้
โจทย์ ข้อที่ 1 [ระดับง่ าย] จงพิจารณาโปรแกรมภาษาจาวาต่ อไปนี ้ เขียนถูก (;) หรื อผิด (:) ตามหลัก
ไวยากรณ์ ของภาษา และเขียนได้ สวยงาม (;) หรื อไม่ สวยงาม (:) (8 คะแนน)
1) public class TestTestTestTestTest {
ไวยากรณ์ สวยงาม public static void main (String [] args) {
System. out . println ("Test Java Programming") ;
}
}
2) Public class Test {
ไวยากรณ์ สวยงาม Public static void main(String[] args) {
System.out.print("Test Java\n")
}
}
3) public class Test { public static void main(String args[]) {
System.out.println("Test Java"); } //End of main
ไวยากรณ์ สวยงาม
} //End of class
4) public class Test {
ไวยากรณ์ สวยงาม public static viod main(String[] args) {
System.out.println("Test Java");
}
}
5) public class Test Java {
public static void main(String[] args) {
ไวยากรณ์ สวยงาม
System.err.println("Test Java");
}
}
6) public class test {
public static void main(String[] bank) {
ไวยากรณ์ สวยงาม
System.out.print("Test Java");
}
}
© สงวนลิขสิทธิ์ พฤศจิกายน 2553 (ปรับปร ุงครัง้ ที่ 7 ฉบับใช้ติวภาค 2/2553) เรียบเรียงโดย วงศ์ยศ เกิดศรี (แบงค์)
Introduction to Java Programming - 01 Computer Programming using Java 3
7) public class Test
ไวยากรณ์ สวยงาม { //Start Class
public static void main(String args[])
{ //Start Mathod
System.out.println("Test Java");
} //End of Class
} //End of Method
8) public class Test {
ไวยากรณ์ สวยงาม public static void main(String[] arg) {
/* System.out.println("Test Java"); */
}
}
โจทย์ ข้อที่ 2 [ระดับง่ าย] จงปิ ดบังโปรแกรมจากโจทย์ ข้อที่ 1 ให้ มิดชิดแล้ วจงเขียนโปรแกรมภาษาจาวา
อย่ างง่ ายให้ ถูกต้ องสมบรณ์ ู และสวยงาม โดยมีคลาสชื่อ MyFirstJavaProgram เมท็อดชื่อ main และมี
คําสั่ง 4 คําสั่ง ได้ แก่ คาํ สั่ง int x = 5 คําสั่ง double y = 3.10000001 คําสั่ง y = y + x และคําสั่ง
System.out.print("y = " + y + "\n") (6 คะแนน)
1 2 3 4
© สงวนลิขสิทธิ์ พฤศจิกายน 2553 (ปรับปร ุงครัง้ ที่ 7 ฉบับใช้ติวภาค 2/2553) เรียบเรียงโดย วงศ์ยศ เกิดศรี (แบงค์)
4 Computer Programming using Java 01 - Introduction to Java Programming
4) คําสั่งมีมากมายหลายรปแบบ
ู เช่น (ให้สงั เกตุเพียงแค่วิธีการเขี ยนและขอบเขตของคําสัง่ )
1. คําสั่งกําหนดค่ า
1 2 3 4
1 public class HelloJava {
2 public static void main(String[] args) {
3 int x = 5;
4 double y = 3.14;
5 } จบคําสัง่ ด้ วยเครื่ องหมาย Semicolon
6 }
2. คําสั่งคํานวณ
1 2 3 4
1 public class HelloJava {
2 public static void main(String[] args) {
3 x = n++ / 2;
4 y = y + x;
5 }
จบคําสัง่ ด้ วยเครื่ องหมาย Semicolon
6 }
© สงวนลิขสิทธิ์ พฤศจิกายน 2553 (ปรับปร ุงครัง้ ที่ 7 ฉบับใช้ติวภาค 2/2553) เรียบเรียงโดย วงศ์ยศ เกิดศรี (แบงค์)
Introduction to Java Programming - 01 Computer Programming using Java 5
3. คําสั่งรั บค่ า การ import เป็ นส่วนที่เพิ่มเข้ ามานอกเหนือจาก
1 2 3 4 3 องค์ประกอบหลักที่กล่าวไปแล้ ว เพื่อเรี ยกใช้ งาน
1 import java.util.Scanner; Class Library เมื่อต้ องการใช้ คําสัง่ พิเศษ
2 public class HelloJava {
3 public static void main(String[] args) {
4 Scanner kb = new Scanner(System.in);
5 int n = kb.nextInt();
6 } จบคําสัง่ ด้ วยเครื่ องหมาย Semicolon
7 }
คําสัง่ รับค่า (ซึง่ ในที่นี ้ใช้ คลาส Scanner) เป็ นคําสัง่ พิเศษดังนันจึ
้ งต้ อง import
4. คําสั่งแสดงผล
1 2 3 4
1 public class HelloJava { จบคําสัง่ ด้ วยเครื่ องหมาย
2 public static void main(String[] args) {
3 System.out.println("result : " + n);
Semicolon
4 }
5 }
5. คําสั่งตัดสินใจ คําสัง่ ตัดสินใจเป็ นกลุม่ หรื อชุดคําสัง่ จึงต้ องใช้ เครื่ องหมาย
1 2 3 4
ปี กกาในการบอกขอบเขตของคําสัง่
1 public class HelloJava {
2 public static void main(String[] args) {
3 if (x > 10) {
4 y = y + x;
5 } else { คําสัง่ ตัดสินใจประกอบด้ วย 2 ส่วนคือ ส่วน if และ else
6 y = y – x;
7 } และทังสองส่
้ วนต้ องอยูใ่ นระดับเดียวกัน
8 }
9 } ภายในแต่ละส่วนสามารถมีคําสัง่ อื่นๆ ซ้ อนเข้ าไปได้ อีก
6. คําสั่งวนซํา้
1 2 3 4
1 public class HelloJava {
2 public static void main(String[] args) {
3 while (i <= 5) {
4 ... คําสัง่ วนซํ ้า เป็ นกลุม่ หรื อชุดคําสัง่ จึงต้ องใช้ เครื่ องหมายปี กกาใน
5 }
6 }
การบอกขอบเขตของคําสัง่
7 }
ภายในคําสัง่ สามารถมีคําสัง่ อื่นๆ ซ้ อนเข้ าไปได้ อีก
1 2 3 4
1 public class HelloJava {
2 public static void main(String[] args) {
3 for (int i = 1; i <= 5; i++) {
4 ...
5 } คําสัง่ วนซํ ้า มี 2 รูปแบบคือ คําสัง่ while และคําสัง่ for ซึง่ ทังสอง
้
6 }
7 } แบบทํางานเหมือนกันแต่เขียนต่างกัน
© สงวนลิขสิทธิ์ พฤศจิกายน 2553 (ปรับปร ุงครัง้ ที่ 7 ฉบับใช้ติวภาค 2/2553) เรียบเรียงโดย วงศ์ยศ เกิดศรี (แบงค์)
6 Computer Programming using Java 01 - Introduction to Java Programming
© สงวนลิขสิทธิ์ พฤศจิกายน 2553 (ปรับปร ุงครัง้ ที่ 7 ฉบับใช้ติวภาค 2/2553) เรียบเรียงโดย วงศ์ยศ เกิดศรี (แบงค์)
8 Computer Programming using Java 01 - Introduction to Java Programming
System.out.print(...);
เช่น System.out.print("Hello Java");
Hello Java
2) การแสดงผลลัพธ์ออกทางจอภาพแบบขึ ้นบรรทัดใหม่ จะใช้ คําสัง่ .
System.out.println(...);
เช่น System.out.println("Hello Java");
3) รูปแบบการแสดงผลลัพธ์มีดงั นี ้ ผลลัพธ์
System.out.println("Hi" + "V"); ข้ อความ + ข้ อความ = ข้ อความ HiV
เอามาต่
เอามา อกัน ผลลัพธ์
System.out.println("Hi" + 5); ข้ อความ + ตัวเลข = ข้ อความ Hi5
ผลลัพธ์
System.out.println(8 + 5); ตัวเลข + ตัวเลข = ตัวเลข 13
เอามาบวกกัน
4) อักขระพิเศษ (Escape Characters)
(1) อักขระ \n คือ การขึ ้นบรรทัดใหม่ (New Line) แต่ใน JLab นัน้ 1 Tab = 6 Spaces
© สงวนลิขสิทธิ์ พฤศจิกายน 2553 (ปรับปร ุงครัง้ ที่ 7 ฉบับใช้ติวภาค 2/2553) เรียบเรียงโดย วงศ์ยศ เกิดศรี (แบงค์)
Introduction to Java Programming - 01 Computer Programming using Java 9
ข้ อ ส่ วนของโปรแกรม คําตอบ
6. System.out.println(0 + "3" + 2);
7. System.out.println("0" + (3 + 2));
8. System.out.println(032);
9. System.out.println("0"32);
10. System.out.println("Hello\tJava");
11. System.out.print("\\\t\\\xxx\n");
12. System.out.println("\"\\\\\'//\"");
โจทย์ ข้อที่ 7 [ระดับง่ าย] จงเขียนโปรแกรมภาษาจาวาเบือ้ งต้ นให้ ถูกต้ องและสวยงาม เพื่อสร้ างคลาสชื่อ
MyProfile โดยให้ โปรแกรมแสดงชื่อ นามสกุล ชื่อเล่ น และเบอร์ โทรศัพท์ ของตัวเองขึน้ บนจอภาพทีละ
บรรทัด (10 คะแนน)
1 2 3 4 5
โจทย์ ข้อที่ 8 [ระดับง่ าย] จงเขียนโปรแกรมภาษาจาวาเบือ้ งต้ นให้ ถูกต้ องและสวยงาม เพื่อสร้ างคลาสชื่อ
Shape โดยให้ โปรแกรมแสดงรปสามเหลี ู ่ ยมตามที่กาํ หนดให้ ขึน้ บนจอภาพ และใช้ คาํ สั่งเพียงคําสั่งเดียว
เท่ านัน้ ในการแสดงผล (10 คะแนน) *
1 2 3 4 5 **
***
****
*****
****
***
**
*
© สงวนลิขสิทธิ์ พฤศจิกายน 2553 (ปรับปร ุงครัง้ ที่ 7 ฉบับใช้ติวภาค 2/2553) เรียบเรียงโดย วงศ์ยศ เกิดศรี (แบงค์)
10 Computer Programming using Java 01 - Introduction to Java Programming
โจทย์ ข้อที่ 9 [ระดับง่ าย] จงเขียนโปรแกรมภาษาจาวาเบือ้ งต้ นให้ ถูกต้ องและสวยงาม เพื่อสร้ างคลาสชื่อ
Test โดยโปรแกรมนีจ้ ะแสดงข้ อความว่ า “My first JAVA program” ออกทางจอภาพพร้ อมทัง้ ขึน้ บรรทัด
ใหม่ และแสดงข้ อความว่ า My JAVA tutor web site is “http://www.javachula.co.cc” ออกทางจอภาพ (ยัง
ไม่ ขึน้ บรรทัดใหม่ ) แล้ วให้ โปรแกรมเลื่อนเคอร์ เซอร์ ไป 18 ช่ องว่ าง และแสดงคําว่ า Click บทจอภาพ
พร้ อมทัง้ ขึน้ บรรทัดใหม่ และในขณะที่เขียนเครื่ องหมายปิ ดขอบเขตของคลาสและเมท็อด ให้ เขี ยน
หมายเหตุว่า End of class และ End of method ต่ อท้ ายบรรทัดนัน้ ๆ ด้ วย โดยกําหนดให้ ใช้ คาํ สั่งเพียง
คําสั่งเดียวเท่ านัน้ ในการแสดงผล (10 คะแนน)
1 2 3 4 5
Demo.java Demo.class
public class Demo { 1001101010111101
public static void …{ 1010101110101010
System.out … 1010010101010100 Hello!
} javac Demo.java 001011101111 java Demo
}
Demo.java
7
Debugging
โจทย์ ข้อที่ 10 [ระดับง่ าย] โปรแกรมที่กาํ หนดให้ ต่อไปนีแ้ ปลโปรแกรมผ่ าน (;) หรื อไม่ ผ่าน (:) สั่งงาน
ผ่ าน (;) หรือไม่ ผ่าน (:) และเขียนได้ สวยงาม (;) หรื อไม่ สวยงาม (:) (15 คะแนน)
1) public class Test {
แปล สวยงาม public static void main(String[] args) {
สั่งงาน
System. out.
println("xxxxx")
;
}
}
© สงวนลิขสิทธิ์ พฤศจิกายน 2553 (ปรับปร ุงครัง้ ที่ 7 ฉบับใช้ติวภาค 2/2553) เรียบเรียงโดย วงศ์ยศ เกิดศรี (แบงค์)
Introduction to Java Programming - 01 Computer Programming using Java 11
2) public class Test {
แปล สวยงาม public static void main(String[] args) {
สั่งงาน
System.out.println("xxxxx
xxxxx
xxxxx");
}
}
3) public class Test {
public static void main(String[] args) {
แปล สั่งงาน สวยงาม
System.out.println("xxxxx" +
"xxxxx" +
"xxxxx");
}
}
4) public class Test {
void main(String[] args) {
แปล สั่งงาน สวยงาม
System.out.println("xxxxx");
}
}
5) public class Test {
public static void noob(String[] args) {
แปล สั่งงาน สวยงาม
System.out.println("xxxxx");
}
}
6) public class main {
แปล public static void main(String[] args) {
สั่งงาน สวยงาม
System.out.println("xxxxx");
}
}
7) public class void {
แปล public static void main(String[] args) {
สั่งงาน สวยงาม
System.out.println("xxxxx");
}
}
8) public class เกรียน {
public static void main(String[] args) {
แปล สั่งงาน สวยงาม
System.out.println("xxxxx");
}
}
9) public class Strings }
public static void main(String[] args) {
แปล สั่งงาน สวยงาม
System.err.println("xxxxx");
}
}
10) public class Public {
// System.out.println("xxxxx");
แปล สั่งงาน สวยงาม
}
11) public class 3Girl_And_1Man {
แปล public static void main(String[] args) {
สั่งงาน สวยงาม
// Love you "Java"
}
}
12) public class Swinging {
public static void main(String[] args) {
แปล สั่งงาน สวยงาม
System.out.println("xxxxx");;;;;;;;;;;;;
}
}
© สงวนลิขสิทธิ์ พฤศจิกายน 2553 (ปรับปร ุงครัง้ ที่ 7 ฉบับใช้ติวภาค 2/2553) เรียบเรียงโดย วงศ์ยศ เกิดศรี (แบงค์)
12 Computer Programming using Java 01 - Introduction to Java Programming
3. การเขียนผังงาน (Flowchart)
1. การเขียนผังงานก่ อนการเขียนโปรแกรม
โดยปกติแล้ วก่อนการเขียนโปรแกรมนักออกแบบโปรแกรมและโปรแกรมเมอร์ จะต้ องสร้ างผังงาน (Flowchart)
หรื อ รหัสเทียม (Psudocode) เพื่อใช้ สําหรับระบุกระบวนการทํางานของโปรแกรมนันอย่
้ างคร่าวๆ ก่อนเสมอ
2. สัญลักษณ์ ท่ ใี ช้ ในการเขียนผังงาน
ลําดับ สัญลักษณ์ ชื่อสัญลักษณ์ ความหมาย
1. Terminator การเริ่ มต้ นและการสิ ้นสุด
2. Data ข้ อมูลและการรับเข้ าข้ อมูล (ทุกรูปแบบ)
3. Manual Input การรับเข้ าข้ อมูลด้ วยมือ (กด, สัมผัส)
4. Process การกําหนดค่าและการคํานวน
5. Decision การตัดสินใจและการเปรี ยบเทียบ
6. Display การแสดงผลทางจอภาพ
7. Document การแสดงผลในรูปเอกสาร (การพิมพ์)
8. Predefined Process การเรี ยกไปยังโปรแกรมย่อย
9. On-page Connector จุดเชื่อมต่อภายในหน้ าเดียวกัน
10. Off-page Connector จุดเชื่อมต่อต่างหน้ ากัน
11. Arrow Line เส้ นลูกศรแสดงทิศทาง
© สงวนลิขสิทธิ์ พฤศจิกายน 2553 (ปรับปร ุงครัง้ ที่ 7 ฉบับใช้ติวภาค 2/2553) เรียบเรียงโดย วงศ์ยศ เกิดศรี (แบงค์)
Introduction to Java Programming - 01 Computer Programming using Java 13
โจทย์ ข้อที่ 11 [ระดับง่ าย] จงเติมเต็มผังงานที่กาํ หนดให้ ต่อไปนีใ้ ห้ สมบรณ์
ู (18 คะแนน)
1) เขียนผังงานเพื่อหาคําตอบของสมการ z = x + yโดยรั บค่ าตัวเลขจํานวนเต็ม (Integer) สองตัวจาก
แป้นพิมพ์ เข้ ามาเก็บไว้ ในตัวแปร x และ y ตามลําดับ จากนัน้ หาผลบวกของตัวแปร x และ y แล้ ว
เก็บไว้ ในตัวแปร z พร้ อมทัง้ แสดงผลลัพธ์ ท่ ไี ด้ ออกทางจอภาพ (4 คะแนน)
2) เขียนผังงานเพื่อรั บตัวเลขจํานวนจริง (Real) จากแป้นพิมพ์ สองค่ าเข้ ามาเก็บไว้ ในตัวแปร n1 และ n2
ตามลําดับ แล้ วทําการเปรี ยบเทียบค่ าระหว่ าง n1 และ n2 โดยถ้ าค่ าของ n1 มากกว่ า n2 ให้ พิมพ์ ค่า
n1 ลงบนเอกสาร แต่ ถ้าไม่ เช่ นนัน้ ให้ พมิ พ์ ค่า n2 ลงบนเอกสาร (6 คะแนน)
3) เขียนผังงานเพื่อรับค่ าตัวเลขจํานวนเต็มจากแหล่ งให้ กาํ เนิดข้ อมลเข้ ู ามาเก็บไว้ ในตัวแปร n พร้ อมทัง้
กําหนดค่ าเริ่มต้ นของตัวแปร i ให้ เท่ ากับ 0 แล้ วตรวจสอบว่ าตัวแปร i น้ อยกว่ าตัวแปร n หรื อไม่ ถ้ า
เป็ นจริงให้ แสดงคําว่ า “Java” ขึน้ บนจอภาพ แล้ วเพิ่มค่ า i ขึน้ ทีละ 1 (โดยใช้ คาํ สั่ง i++) ซึ่งจะวนรอบ
ทํางานแบบนีไ้ ปเรื่อยๆ จนกว่ าตัวแปร i ไม่ ได้ น้อยกว่ าตัวแปร n จึงจะจบการทํางาน (8 คะแนน)
ผังงานข้ อย่ อยที่ 1 ผังงานข้ อย่ อยที่ 2 ผังงานข้ อย่ อยที่ 3
โจทย์ ข้อที่ 13 [ระดับง่ าย] จงพิจารณาผังงานต่ อไปนี ้ พร้ อมทัง้ หาคําตอบของตัวแปร B1, B2 และ C เมื่อ
กําหนดให้ ค่า A มีค่าต่ างๆ ดังตาราง (5 คะแนน)
Start A B1 B2 C
1
C=1
2
A 3
B1 = A + 2
4
B2 = A + C 5
No B1 = A + 2
C<6 B2 = A + C
Yes
C=A+2 End
© สงวนลิขสิทธิ์ พฤศจิกายน 2553 (ปรับปร ุงครัง้ ที่ 7 ฉบับใช้ติวภาค 2/2553) เรียบเรียงโดย วงศ์ยศ เกิดศรี (แบงค์)
Data Operations and Processing - 02 Computer Programming using Java 15
CHAPTER การดําเนินการและประมวลผลข้อมูล
02 (Data Operations and Processing)
1. ประเภทข้ อมลูและตัวแปร (Data Types and Variables)
1. ประเภทข้ อมลหรื
ู อชนิดตัวแปร (Data Types)
้ ม (Primitive Data Types) แบ่งออกเป็ น 4 กลุม่ ได้ แก่
1.1 ประเภทข้ อมูลแบบดังเดิ
1) ตัวเลขจํานวนเต็ม (Integer) Æ คือ จํานวนเต็มบวก จํานวนเต็มลบ จํานวนเต็มศูนย์
ชนิดตัวแปร ขนาดตัวแปร ช่ วงของข้ อมลู ค่ าเริ่มต้ น
byte 8 bits -128 ถึง 127 0
-9,223,372,036,854,775,808 ถึง
long 64 bits 0L
9,223,372,036,854,775,807
-1.79769313486231570E+308 ถึง
double 64 bits 0.0D
1.79769313486231570E+308
3) ตัวอักขระ (Character) Æ คือ ตัวอักษร (Letter) หรื อตัวเลข (Digit) หรื อสัญลักษณ์ (Symbol) เพียง 1 ตัว
ชนิดตัวแปร ขนาดตัวแปร ช่ วงของข้ อมลู ค่ าเริ่มต้ น
char 16 bits '\u0000' ถึง '\uFFFF' (0 - 65535) '\u0000'
เช่น 'A' หรื อ 'a' (คล่อมด้ วยเครื่ องหมาย '…')
4) ตัวตรรกะ (Boolean) Æ คือ ค่าความจริง ซึง่ มีเพียงสองค่าคือ จริง (True) หรื อ เท็จ (False)
ชนิดตัวแปร ขนาดตัวแปร ช่ วงของข้ อมลู ค่ าเริ่มต้ น
boolean ไม่ระบุ true หรื อ false false
1.2 ประเภทข้ อมูลแบบอ้ างอิง (Reference Data Types) แบ่งออกเป็ น 1 กลุม่ (ยังมีมากกว่านี ้) ได้ แก่
1) สตริง (String) หรื อข้ อความ Æ คือ กลุม่ ของอักขระหรือสายอักขระตังแต่ ้ 0 ตัวขึ ้นไปมาเรี ยงต่อกัน
ชนิดตัวแปร ขนาดตัวแปร ช่ วงของข้ อมลู ค่ าเริ่มต้ น
String ไม่ระบุ เช่น "Java Chula" หรื อ "1" หรื อ "F50" หรื อ null
© สงวนลิขสิทธิ์ พฤศจิกายน 2553 (ปรับปร ุงครัง้ ที่ 7 ฉบับใช้ติวภาค 2/2553) เรียบเรียงโดย วงศ์ยศ เกิดศรี (แบงค์)
16 Computer Programming using Java 02 - Data Operations and Processing
เล็ก ใหญ่
2. การตัง้ ชื่อตัวแปร
1) กฎการตัง้ ชื่อตัวแปร (บังคับและต้ องทําตาม)
(1) ชื่อตัวแปรสามารถประกอบไปด้ วย ตัวอักษร ตัวเลข สัญลักษณ์ '$' (Dollar Sign) และสัญลักษณ์
'_' (Underscore) เช่น num, $_$, _hey, $1, xxx3, test1_$ เป็ นต้ น
(2) ชื่อตัวแปรห้ามขึ ้นต้ นชื่อด้ วยตัวเลข เช่น 3girl1man, 2you, 5hundredMile เป็ นต้ น
(3) ชื่อตัวแปรห้ามมีช่องว่างและสัญลักษณ์พิเศษอื่นๆ นอกเหนือจากที่กล่าวไว้ ในข้ อที่ 1
(4) ชื่อตัวแปรห้ามตังชื
้ ่อซํ ้ากับคําสงวน (Reserved Words / Keywords) ซึง่ มี 53 คําดังต่อไปนี ้
abstract assert boolean break byte case
catch char class const * continue default
do double else enum extends false
final finally float for goto * if
implements import instanceof int interface long
native new null package private protected
public return short static strictfp super
switch synchronized this throw throws transient
true try void volatile while
(5) ชื่อตัวแปรห้ามตังชื
้ ่อซํ ้ากันภายในเมท็อดเดียวกัน (แต่ตา่ งเมท็อดกันอาจตังชื
้ ่อซํ ้ากันได้ )
(6) ชื่อตัวแปรมีความยาวได้ ไม่จํากัด (จะยาวกี่กิโลเมตรก็ได้ แต่ควรให้ มีความยาวเหมาะสม)
(7) ตัวอักษรพิมพ์ใหญ่และพิมพ์เล็กมีความหมายต่างกันเสมอ (Case-Sensitive) เช่น var ต่างกับ Var
2) ธรรมเนียมการตัง้ ชื่อตัวแปร (ไม่ บังคับแต่ ควรทําตาม)
(1) ชื่อตัวแปร (และชื่อเมท็อด) นิ ยมขึ ้นต้ นด้ วยอักษรพิมพ์เล็ก / ชื่อคลาสนิ ยมขึ ้นต้ นด้ วยอักษรพิมพ์ใหญ่
(2) ชื่อตัวแปรนิ ยมใช้ เป็ นภาษาอังกฤษ (แต่อาจใช้ เป็ นภาษาใดก็ได้ ขึ ้นกับการรองรับของ Editor ที่เขียน)
(3) ชื่อตัวแปรควรตังชื้ ่อให้ สื่อความหมายกับค่าของตัวแปรนัน้ เช่น stdID, firstName, birthDate เป็ นต้ น
(4) ชื่อตัวแปรถ้ าประกอบด้ วยคําหลายคําให้ เขียนคําแรกขึ ้นต้ นด้ วยอักษรพิมพ์เล็ก ส่วนคําถัดๆ ไปขึ ้นต้ น
ด้ วยอักษรพิมพ์ใหญ่ เช่น hostName, numberOfCourse, currentTime, firstDayOfMonth เป็ นต้ น
(5) ชื่อตัวแปรถ้ าเป็ นค่าคงที่นิยมตังชื
้ ่อด้ วยอักษรพิมพ์ใหญ่ทงหมด
ั้ เช่น PI, MONTH_OF_YEAR เป็ นต้ น
(6) พยายามหลีกเลี่ยงการใช้ สญ ั ลักษณ์ '$' และ สัญลักษณ์ '_'
3. การประกาศและกําหนดค่ าตัวแปร
1) การประกาศตัวแปร
<ประเภทข้ อมูล> <ชื่อตัวแปร>;
© สงวนลิขสิทธิ์ พฤศจิกายน 2553 (ปรับปร ุงครัง้ ที่ 7 ฉบับใช้ติวภาค 2/2553) เรียบเรียงโดย วงศ์ยศ เกิดศรี (แบงค์)
Data Operations and Processing - 02 Computer Programming using Java 17
2) การกําหนดค่ าตัวแปร อาจเป็ นค่าคงที่ (Constant) หรื อค่าจากตัวแปรอื่นก็ได้
<ชื่อตัวแปรที่ประกาศไว้ แล้ ว> = <ค่าของตัวแปร>;
ซ้ ายต้ องใหญ่หรื อพอดีกบั ขวา
ตัวอย่าง x = 5; num = 4.01; lastName = "Rukchula"; check = true; a = b;
4. ค่ าของตัวแปรตามประเภทข้ อมลู
1) ค่ าของจํานวนเต็ม
ประเภทข้ อมลู รปแบบการเขี
ู ยน / ตัวอย่ างค่ าที่จัดเก็บ
byte และ short เขียนเลขจํานวนเต็มทัว่ ไป เช่น byte x = 12; short y = 199;
int (ฐานสิบ) เขียนเลขจํานวนเต็มทัว่ ไป เช่น int dec = 26;
int (ฐานแปด) เขียน 0 (ศูนย์) นําหน้ าเลขจํานวนเต็ม เช่น int oct = 032;
int (ฐานสิบหก) เขียน 0x หรื อ 0X นําหน้ าเลขจํานวนเต็ม เช่น int hex = 0x1A;
long เขียนเลขจํานวนเต็มแล้ วมีอกั ษร l หรื อ L ต่อท้ าย เช่น long n = 26L;
2) ค่ าของจํานวนจริง
ประเภทข้ อมลู รปแบบการเขี
ู ยน / ตัวอย่ างค่ าที่จัดเก็บ
float เขียนเลขจํานวนจริงแล้ วมีอกั ษร f หรื อ F ต่อท้ าย เช่น float f = 1.3F;
double (รูปทัว่ ไป) เขียนเลขจํานวนจริงทัว่ ไป เช่น double d = 1.3;
double (รูปเต็ม) เขียนเลขจํานวนจริงแล้ วมีอกั ษร d หรื อ D ต่อท้ าย เช่น double d = 1.3D;
double (รูป a x 10b) เขียนค่า a ในรูปของเลขจํานวนเต็มหรื อเลขจํานวนจริงทัว่ ไป ตามด้ วยอักษร e
หรื อ E และตามด้ วยค่า b ในรูปของเลขจํานวนเต็ม (เท่านัน) ้ เช่น
8
double s = 93.478e8; มีคา่ เท่ากับ 93.478 x 10
–5
double t = 631E-5; มีคา่ เท่ากับ 631 x 10
200
double u = 2.0e+200; มีคา่ เท่ากับ 2.0 x 10
3) ค่ าของตัวอักขระและสตริง
ประเภทข้ อมลู รปแบบการเขี
ู ยน / ตัวอย่ างค่ าที่จัดเก็บ
char (รู ปทัว
่ ไป) เขียนอักขระทัว่ ไปคล่อมด้ วย Single Quote เช่น char c = 'a';
© สงวนลิขสิทธิ์ พฤศจิกายน 2553 (ปรับปร ุงครัง้ ที่ 7 ฉบับใช้ติวภาค 2/2553) เรียบเรียงโดย วงศ์ยศ เกิดศรี (แบงค์)
18 Computer Programming using Java 02 - Data Operations and Processing
char (รู ปพิเศษ) เขียนรหัสพิเศษคล่อมด้ วย Single Quote เช่น char tab = '\t';
String (รู ปทัว่ ไป) เขียนสายอักขระคล่อมด้ วย Double Quote เช่น String s = "Bank";
String (รู ปอ๊ อบเจ็ค) สร้ างอ๊ อบเจ็คจากคลาส String เช่น String t = new String("CU");
โจทย์ ข้อที่ 1 [ระดับง่ าย] จงพิจารณาคําสั่งต่ อไปนีผ้ ิด (:) หรื อถูก (;) พร้ อมบอกเหตุผล (15 คะแนน)
1) integer x; .
2) int x = 1.5; .
3) byte x = 1000; .
4) int null = 5; .
5) Int y = 1; .
7) String id = "1"; .
8) char c = 'Tuksin'; .
9) String s1 = 'Apisit'; .
2. var2 = 014f;
© สงวนลิขสิทธิ์ พฤศจิกายน 2553 (ปรับปร ุงครัง้ ที่ 7 ฉบับใช้ติวภาค 2/2553) เรียบเรียงโดย วงศ์ยศ เกิดศรี (แบงค์)
Data Operations and Processing - 02 Computer Programming using Java 19
ข้ อ ประเภทตัวแปร การประกาศและกําหนดค่ าตัวแปร ค่ าที่เก็บในตัวแปร
4. var4 = 0E-0;
6. var6 = 1.0e2.0;
7. var7 = .1000;
8. var8 = 08;
9. var9 = null;
2. การรั บเข้ าและส่ งออกข้ อมลู (Input and Output the Data)
1. การรับเข้ าข้ อมลู (Input the Data)
การรับเข้ าข้ อมูลในภาษาจาวามีอยู่หลายวิธีด้วยกัน แต่ในเอกสารชุดนี ้จะนําเสนอการรับเข้ าข้ อมูลที่นิยมใช้ กนั
มากในปั จจุบนั นัน่ คือการรับเข้ าข้ อมูลด้ วยคลาส Scanner ซึง่ มีขนตอนการใช้
ั้ งานดังต่อไปนี ้
1) การนําเข้ าคลาส Scanner ก่อนเรี ยกใช้ งานคลาส Scanner จะต้ องนําเข้ าคลาส Scanner ก่อนเสมอ โดย
ใช้ คําสัง่ import java.util.Scanner; ซึง่ ระบุไว้ ก่อนเขียนหัวคลาส ดังตัวอย่าง
1 import java.util.Scanner;
2 public class Test {
3 ...
4 }
1 import java.util.Scanner;
2 public class Test {
System.in หมายถึง
3 public static void main(String[] args) {
4 Scanner kb = new Scanner(System.in); แป้นพิมพ์ (keyboard)
5 ...
6 } ตัวอ่านชื่อว่า kb
7 }
© สงวนลิขสิทธิ์ พฤศจิกายน 2553 (ปรับปร ุงครัง้ ที่ 7 ฉบับใช้ติวภาค 2/2553) เรียบเรียงโดย วงศ์ยศ เกิดศรี (แบงค์)
20 Computer Programming using Java 02 - Data Operations and Processing
เช่น String s1 = kb.nextLine(); (รับค่า String ทังบรรทั ้ ดจากตัวอ่าน kb มาเก็บไว้ ที่ตวั แปร s1)
6) คําสัง่ รับค่าข้ อมูลประเภท String ทีละคําหรื อทีละช่วง (แต่ละช่วงคัน่ ด้ วยช่องว่างหรื อ \t หรื อ \n)
โดยใช้ เมท็อด next()
String <ชื่อตัวแปร> = <ชื่อตัวอ่าน>.next();
เช่น String s2 = kb.next(); (รับค่า String คําแรกจากตัวอ่าน kb มาเก็บไว้ ที่ตวั แปร s2)
โจทย์ ข้อที่ 3 [ระดับง่ าย] จงเติมเต็มคําสั่งการรั บค่ าของตัวแปรในแต่ ละข้ อต่ อไปนีใ้ ห้ สมบรณ์
ู พร้ อมทัง้
ระบุค่าที่เก็บอย่ ูในตัวแปรแต่ ละข้ อ (15 คะแนน)
Scanner kb = new Scanner(System.in);
2. var2 = kb.nextLong(); -0
© สงวนลิขสิทธิ์ พฤศจิกายน 2553 (ปรับปร ุงครัง้ ที่ 7 ฉบับใช้ติวภาค 2/2553) เรียบเรียงโดย วงศ์ยศ เกิดศรี (แบงค์)
Data Operations and Processing - 02 Computer Programming using Java 21
ประเภท การรั บค่ าจากแป้นพิมพ์ เพื่อ ค่ าที่ป้อนเข้ ามา ค่ าที่เก็บใน
ข้ อ
ตัวแปร เก็บยังตัวแปรที่กาํ หนด ทางแป้นพิมพ์ ตัวแปร
3. int 7.0
5. long 46L
6. float 7.2F
7. double -0.1
8. double -13
สิง่ ที่สามารถระบุและแสดงผลภายในวงเล็บของเมท็อดทังสองได้
้ นนมี
ั ้ ดงั นี ้
1) ตัวแปร เช่น System.out.print(num);
2) ตัวเลข เช่น System.out.print(13);
3) นิพจน์ เช่น System.out.print(x * y + (10 – z));
4) ข้ อความหรื อสตริง เช่น System.out.print("Hello Java");
5) ข้ อ 1-4 ปะปนกัน เช่น System.out.print("Money = " + (x * y + 92.4) + " Baht");
© สงวนลิขสิทธิ์ พฤศจิกายน 2553 (ปรับปร ุงครัง้ ที่ 7 ฉบับใช้ติวภาค 2/2553) เรียบเรียงโดย วงศ์ยศ เกิดศรี (แบงค์)
22 Computer Programming using Java 02 - Data Operations and Processing
3. รปแบบการเขี
ู ู ่ ต้ องปฏิบตั ติ าม มีรายละเอียดดังตัวอย่างต่อไปนี ้
ยนโปรแกรมรับเข้ าและส่ งออกข้ อมลที
1 import java.util.Scanner; ต้ องนําเข้ าคลาส Scanner
2 public class Test {
3 public static void main(String[] args) {
4 Scanner kb = new Scanner(System.in); ต้ องสร้ างตัวอ่าน
5 System.out.print("Please enter number: ");
6 int num = kb.nextInt(); ต้ องแสดงข้ อความว่าต้ อง
7
8 ... หลังชื่อเมท็อดอย่าลืมใส่วงเล็บ การรับเข้ าข้ อมูลอะไร โดย
9
10
ใช้ เมท็อด print()
System.out.println("Result is " + num);
11 }
12 } ต้ องแสดงผลลัพธ์ โดยใช้ เมท็อด println()
© สงวนลิขสิทธิ์ พฤศจิกายน 2553 (ปรับปร ุงครัง้ ที่ 7 ฉบับใช้ติวภาค 2/2553) เรียบเรียงโดย วงศ์ยศ เกิดศรี (แบงค์)
Data Operations and Processing - 02 Computer Programming using Java 23
โจทย์ ข้อที่ 5 [ระดับปานกลาง] จงเขียนโปรแกรมภาษาจาวาที่สมบรณ์ ู เพื่อรั บตัวเลขจํานวนเต็ม สอง
จํานวนเข้ ามาทางแป้นพิมพ์ เก็บไว้ ในตัวแปร a และ b ตามลําดับ แล้ วทําการสลับค่ าของสองตัวแปรนัน้
โดยที่ค่าของตัวแปร a หลังการสลับจะเท่ ากับค่ าเก่ าของตัวแปร b และค่ าของตัวแปร b หลังการสลับจะ
เก็บค่ าเก่ าของตัวแปร a พร้ อมทัง้ แสดงผลลัพธ์ ออกทางจอภาพตามตัวอย่ างต่ อไปนี ้ (10 คะแนน)
1 2 3 4 Enter a: 13
Enter b: 21
Value of a: 21
Value of b: 13
© สงวนลิขสิทธิ์ พฤศจิกายน 2553 (ปรับปร ุงครัง้ ที่ 7 ฉบับใช้ติวภาค 2/2553) เรียบเรียงโดย วงศ์ยศ เกิดศรี (แบงค์)
24 Computer Programming using Java 02 - Data Operations and Processing
4. int x = 6;
System.out.println(x-- + ++x - --x - x-- + x++ + x);
6. การเปรี ยบเทียบค่า : น้ อยกว่า (<), น้ อยกว่าเท่ากัน (<=), มากกว่า (>), มากกว่าเท่ากัน (>=)
7. การเปรี ยบเทียบค่า : เท่ากัน (==), ไม่เท่ากัน (!=)
8. และ (Logical AND) && a || b && c จะทํา && ก่อน ||
1) a * (b + -(c / d) / e) + (f – g % h)
3) a * b + (-c) / d / e * f - g % h
4) cal = (1 – x % 2.5 + y * z) + 3 * k – -7 / w
3. ประเภทข้ อมลที
ู ่ เป็ นผลลัพธ์ สุดท้ ายจากการดําเนินการ
สามารถสรุปความสัมพันธ์ของประเภทข้ อมูล ตัวเลข ตัวอักขระ ตัวตรรกะ และ สตริ ง ได้ 20 รูปแบบ ดังนี ้
รปแบบ
ู ข้ อมลที
ู ่1 กลุ่มของตัวดําเนินการ ข้ อมลที
ู ่ 2 ประเภทข้ อมลสุ ู ดท้ าย
1. ตัวเลข + - * / % ตัวเลข ตัวเลข (ที่มีศักดิ์ศรีสูงสุด)
2. ตัวเลข = += -= *= /= ตัวเลข[1] ตัวเลข (ของข้ อมลทีู ่ 1)
3. ตัวเลข == != < > <= >= ตัวเลข boolean
4. ตัวเลข + - * / % = += -= *= /= char ตัวเลข
© สงวนลิขสิทธิ์ พฤศจิกายน 2553 (ปรับปร ุงครัง้ ที่ 7 ฉบับใช้ติวภาค 2/2553) เรียบเรียงโดย วงศ์ยศ เกิดศรี (แบงค์)
26 Computer Programming using Java 02 - Data Operations and Processing
รปแบบ
ู ข้ อมลที
ู ่1 กลุ่มของตัวดําเนินการ ข้ อมลที
ู ่ 2 ประเภทข้ อมลสุ ู ดท้ าย
5. ตัวเลข ++ -- - ตัวเลข
6. - ++ -- ตัวเลข ตัวเลข
7. char + - * / % char ตัวเลข (โดยทัว่ ไปคือ int)
8. char = += -= *= /= char char
9. char == != < > <= >= char boolean
โจทย์ ข้อที่ 8 [ระดับง่ าย] จงระบุประเภทข้ อมลูที่เป็ นผลลัพธ์ สุดท้ ายและค่ าคําตอบจากการดําเนินการ
ของนิพจน์ ต่อไปนี ้ (10 คะแนน)
ข้ อ นิพจน์ ประเภทข้ อมลสุู ดท้ าย คําตอบ
1. (5 + 4) + ((3 + 2L) – 1)
2. (5 – 2 / 1) + 0.000 + '\u0000'
3. 5.0F * 6 – ('D' - 'A')
*4. 2 % (0.4 + 0.3F)
*5. !("Java" == "Jaba");
6. (13 / 5) + (2 / 3)
7. '0' - '1' + "5" + false
8. 4E1 / 2
9. !false || true && false || !true
10. 0.0 / (10 + 'q' – 'Y') != 0L
© สงวนลิขสิทธิ์ พฤศจิกายน 2553 (ปรับปร ุงครัง้ ที่ 7 ฉบับใช้ติวภาค 2/2553) เรียบเรียงโดย วงศ์ยศ เกิดศรี (แบงค์)
Data Operations and Processing - 02 Computer Programming using Java 27
4. การเปลี่ยนประเภทข้ อมลู (Type Conversions)
1) เปลี่ยนแบบอัตโนมัติ โดยทัว่ ไปคอมไพเลอร์ ของภาษาจาวาจะปรับเปลี่ยนประเภทข้ อมูลให้ อตั โนมัติตาม
ความเหมาะสม ซึง่ เป็ นไปตามความสัมพันธ์ทงั ้ 19 รูปแบบที่ได้ กล่าวไปในหัวข้ อที่แล้ ว ดังตัวอย่างต่อไปนี ้
double a = 34 + 1.0F; //a = 35.0 int c = 'A'; //c = 65
float b = 4L / 3; //b = 1.0F char d = 65; //d = 'A'
ลําดับ รปแบบคํ
ู าสั่ง ประเภทข้ อมลรั
ู บเข้ า หน้ าที่
5. Math.sqrt(x) double คํานวณค่ารากที่สอง
6. Math.pow(x, y) double, double คํานวณค่าเลขยกกําลัง xy
7. Math.abs(x) double คํานวณค่าสัมบูรณ์ (Absolute)
8. Math.max(x, y) double, double คํานวณค่ามากระหว่าง x กับ y
9. Math.min(x, y) double, double คํานวณค่าน้ อยระหว่าง x กับ y
10. Math.log10(x) double คํานวณค่าล๊ อกาลิทมึ ฐานสิบ
11. Math.PI ค่าคงที่ PI ซึง่ เท่ากับ 3.141592653589793…
Math.random() ไม่มีข้อมูลรับเข้ า สร้ างตัวเลขสุม่ ในช่วง [0.0, 1.0)
12.
(int)(Math.random() * (b – a + 1) + a) สร้ างตัวเลขสุม ่ จํ านวนเต็มในช่วง a ถึง b
หมายเหตุ ผลลัพธ์ที่ได้ ทกุ ข้ อจะเป็ นประเภท double (ยกเว้ นข้ อที่ 12 ส่วนล่าง ผลลัพธ์จะเป็ นประเภท int)
โจทย์ ข้อที่ 10 [ระดับง่ าย] จงเขียนคําสั่งคํานวณ (Assignment Statement) จากนิพจน์ ต่อไปนีใ้ ห้ ถูกต้ อง
ตามหลักไวยากรณ์ ของภาษาจาวา พร้ อมทัง้ ประกาศประเภทตัวแปรที่ใช้ ให้ ครบสมบรณ์ ู (6 คะแนน)
ข้ อ นิพจน์ คําสั่ง
2πr 2
1.
b 2 − 4ac
m−n p2 − q2
2. −
2mn p+q
3x 3 + 4 y 4
3. + πxy
( x + y)( x − y)
© สงวนลิขสิทธิ์ พฤศจิกายน 2553 (ปรับปร ุงครัง้ ที่ 7 ฉบับใช้ติวภาค 2/2553) เรียบเรียงโดย วงศ์ยศ เกิดศรี (แบงค์)
Data Operations and Processing - 02 Computer Programming using Java 29
โจทย์ ข้อที่ 12 [ระดับปานกลาง] จงเขียนโปรแกรมภาษาจาวาที่สมบรณ์ ู เพื่อรั บตัวเลขจํานวนเต็มที่มี
ความยาว 4 หลักหนึ่งค่ าเข้ ามาทางแป้นพิมพ์ แล้ วทําการสลับหลักของตัวเลขนัน้ ดังตัวอย่ างการแสดงผล
ต่ อไปนี ้ (10 คะแนน) Enter number: 1234
1 2 3 4 Reversed number: 4321
© สงวนลิขสิทธิ์ พฤศจิกายน 2553 (ปรับปร ุงครัง้ ที่ 7 ฉบับใช้ติวภาค 2/2553) เรียบเรียงโดย วงศ์ยศ เกิดศรี (แบงค์)
30 Computer Programming using Java 02 - Data Operations and Processing
โจทย์ ข้อที่ 14 [ระดับยาก] ธนาคารลานเกียร์ แห่ งประเทศไทยได้ ว่าจ้ างให้ นิสิตชัน้ ปี ที่ 1 ของคณะวิศว-
กรรมศาสตร์ จุฬาลงกรณ์ มหาวิทยาลัย ซึ่งกําลังเรี ยนวิชาการเขียนโปรแกรมด้ วยภาษาจาวาเบือ้ งต้ น
เพื่อสร้ างเครื่ องคํานวณจํานวนเงิน (Money Machine) โดยเมื่อผ้ ูใช้ ระบุจาํ นวนเงินเข้ ามา โปรแกรมจะทํา
การคํานวณดวู่ าจะต้ องใช้ ธนบัตรใบละ 1000 บาท 500 บาท 100 บาท 50 บาท และ 20 บาท อย่ างละกี่
ใบ และเหรี ยญ 10 บาท 5 บาท 2 บาท และ 1 บาท อย่ างละกี่เหรี ยญ โดยมีตัวอย่ างของผลการทํางาน
ดังต่ อไปนี ้ (15 คะแนน) Money : 2897
1 2 3 4 1000 Baht : 2
500 Baht : 1
100 Baht : 3
50 Baht : 1
20 Baht : 2
10 Baht : 0
5 Baht : 1
2 Baht : 1
1 Baht : 0
Do you know?
1 / 0 = Error
1.0 / 0.0 = Infinity
-1.0 / 0.0 = -Infinity
1.0 / (1.0 / 0) = 0.0
0.0 / 0.0 = NaN
© สงวนลิขสิทธิ์ พฤศจิกายน 2553 (ปรับปร ุงครัง้ ที่ 7 ฉบับใช้ติวภาค 2/2553) เรียบเรียงโดย วงศ์ยศ เกิดศรี (แบงค์)
Decision Statements - 03 Computer Programming using Java 31
CHAPTER คําสัง่ ตัดสินใจ
03 (Decision Statements)
1. คําสั่งตัดสินใจแบบเบือ้ งต้ น (Basic Decision Statements)
1. นิยามและข้ อกําหนดของคําสั่งตัดสินใจ
1) คําสัง่ ตัดสินใจ คือ คําสัง่ ที่ใช้ สําหรับเลือกทํางานหรื อตัดสินใจทํางานตามเงื่อนไข (Condition) อย่างใด
อย่างหนึง่ ที่กําหนดขึ ้น เมื่อเงื่อนไขนันเป็
้ นจริง
2) คําสัง่ ตัดสินใจในภาษาจาวา ประกอบไปด้ วย 2 ชุดคําสัง่ ได้ แก่ [1] if-else และ [2] switch-case
โดยในเอกสารบทนี ้จะกล่าวถึงเพียงแค่คําสัง่ if-else เท่านัน้
3) ชุดคําสัง่ ตัดสินใจ ถ้ ามีหลายเงื่อนไขจะทํางานเพียงแค่กรณีใดกรณีหนึง่ ที่เป็ นจริ งเพียงกรณีเดียวเท่านัน้
2. คําสั่งตัดสินใจแบบ 1 เงื่อนไข
คําสัง่ ตัดสินใจแบบ 1 เงื่อนไขนี ้จะใช้ คําสัง่ if เพียงอย่างเดียวในการทํางาน โดยมีรูปแบบดังนี ้
1 if(Condition) { เงื่อนไข (Condition) จะเป็ นนิพจน์ตรรกะ (Boolean Expression)
2 Statement;
3 } ที่แสดงถึงค่าความจริงว่าเมื่อไรจะทําในคําสัง่ if หรื อเมื่อไรไม่ทํา
False Statement
พิจารณาเงื่อนไขของคําสัง่ if ว่าเป็ นจริงหรื อไม่ ถ้ าเป็ นจริงจะเข้ า
ทําคําสัง่ ภายในคําสัง่ if ทุกๆ คําสัง่ ถ้ าเป็ นเท็จจะไม่เข้ าทํา
ตัวอย่ าง
1 if(score >= 100) { ถ้ า score = 120 จะแสดงผล ABC
2 System.out.print("A");
3 } ถ้ า score = 100 จะแสดงผล ABC
4 System.out.print("B");
5 System.out.print("C"); ถ้ า score = 60 จะแสดงผล BC
โจทย์ ข้อที่ 1 [ระดับง่ าย] จงแสดงผลลัพธ์ จากส่ วนของโปรแกรมตามค่ า n ที่กาํ หนดให้ ต่อไปนี ้ (5 คะแนน)
1 if(n < 50) n = 49 n = 75 n = 60 n = 100 n = 123
2 System.out.println("1"+n);
3 System.out.println(n++);
4 if(n <= 75)
5 System.out.println("3");
6 if(n >= 100) {
7 System.out.println(n--);
8 System.out.println(--n);
9 }
10 System.out.println(n++);
© สงวนลิขสิทธิ์ พฤศจิกายน 2553 (ปรับปร ุงครัง้ ที่ 7 ฉบับใช้ติวภาค 2/2553) เรียบเรียงโดย วงศ์ยศ เกิดศรี (แบงค์)
32 Computer Programming using Java 03 - Decision Statements
โจทย์ ข้อที่ 2 [ระดับง่ าย] จงเขียนเฉพาะคําสั่ง if ตามเงื่อนไขที่กาํ หนดให้ ต่อไปนี ้ (15 คะแนน)
1) ถ้ าตัวแปร x มีค่ามากกว่ า 0 ให้ แสดงค่ ารากที่สองของตัวแปร x ขึน้ บนจอภาพ (5 คะแนน)
2) ถ้ าตัวแปร i มีค่าน้ อยกว่ าหรื อเท่ ากับ 10 ให้ เพิ่มค่ าตัวแปร i นัน้ ขึน้ อีก 1 (5 คะแนน)
3) ถ้ าตัวแปร gpa มีค่ามากกว่ าหรื อเท่ ากับ 2.00 ให้ แสดงข้ อความว่ า "Pass" ขึน้ บนจอภาพ ถ้ าไม่ เช่ นนัน้
ให้ แสดงข้ อความว่ า "Retire" ขึน้ บนจอภาพ (5 คะแนน)
3. คําสั่งตัดสินใจแบบ 2 เงื่อนไข
คําสัง่ ตัดสินใจแบบ 2 เงื่อนไขนี ้จะใช้ คําสัง่ if-else ในการทํางาน โดยมีรูปแบบดังนี ้
if(Condition) {
1
2
ถึงแม้ วา่ จะมี 2 เงื่อนไข ก็ตาม แต่ให้ ระบุเงื่อนไขไว้ ที่คําสัง่ if
Statement1;
3 } else { เท่านัน้ โดยไม่ต้องระบุเงื่อนไขที่คําสัง่ else (หลังคําสัง่ else
4 Statement2;
5 } ห้ามใส่เงือ่ นไข (Condition) โดยเด็ดขาด)
ภายในคําสัง่ if และ else สามารถมีคําสัง่ ได้ มากกว่า 1 คําสัง่
ผังงาน
แต่ถ้ามีเพียง 1 คําสัง่ ไม่ต้องมีเครื่ องหมายปี กกาเปิ ดปิ ดก็ได้
False True คําสัง่ if-else ไม่สามารถเข้ าทําคําสัง่ ภายในพร้ อมกันได้ โดย
Condition
จะเข้ าทําเพียงกรณี if หรื อ else กรณีใดกรณีหนึง่ เท่านัน้
Statement2 Statement1
พิจารณาเงื่อนไขของคําสัง่ if ว่าเป็ นจริงหรื อไม่ ถ้ าเป็ นจริงจะเข้ า
ทําคําสัง่ ภายใน if ทุกๆ คําสัง่ แต่ถ้าเป็ นเท็จจะเข้ าทําคําสัง่
ภายใน else ทุกๆ คําสัง่
1 if(score >= 100) {
2 System.out.print("A"); ถ้ า score = 120 จะแสดงผล AC
3 } else {
4 System.out.print("B"); ถ้ า score = 100 จะแสดงผล AC
5 }
6 System.out.print("C"); ถ้ า score = 60 จะแสดงผล BC
© สงวนลิขสิทธิ์ พฤศจิกายน 2553 (ปรับปร ุงครัง้ ที่ 7 ฉบับใช้ติวภาค 2/2553) เรียบเรียงโดย วงศ์ยศ เกิดศรี (แบงค์)
Decision Statements - 03 Computer Programming using Java 33
โจทย์ ข้อที่ 3 [ระดับง่ าย] จงแสดงผลลัพธ์ จากส่ วนของโปรแกรมตามค่ า s ที่กาํ หนดให้ ต่อไปนี ้ (5 คะแนน)
1 if(s >= 40) s = 39 s = 40 s = 89 s = 100 s = 0
2 System.out.println("1"+s);
3 else {
4 System.out.println("0");
5 System.out.println(++s);
6 }
7 if(s >= 90)
8 System.out.println(s++);
9 else
10 System.out.println(++s);
11 System.out.println(--s);
ผังงาน
พิจารณาเงื่อนไขของคําสัง่ if ว่าเป็ นจริงหรื อไม่ ถ้ าเป็ น
False True
จริ งจะเข้ าทําคําสัง่ ภายในคําสัง่ if ทุกๆ คําสัง่ ถ้ าเป็ น
Condition1
เท็จจะพิจารณาเงื่อนไขของคําสัง่ else if ว่าเป็ นจริง
False
Condition2
True
Statement1 หรื อไม่ ถ้ าเป็ นจริงจะเข้ าทําคําสัง่ ภายในคําสัง่ else
if ทุกๆ คําสัง่ ซึง่ จะทําแบบนี ้ไปเรื่ อยๆ จนถึงคําสัง่
Statement2
สุดท้ าย ถ้ าไม่มีเงื่อนไขใดเลยเป็ นจริงจะเข้ าทําภายใน
คําสัง่ else ทุกๆ คําสัง่ (เลือกทําเพียงกรณีเดียวเท่านัน) ้
© สงวนลิขสิทธิ์ พฤศจิกายน 2553 (ปรับปร ุงครัง้ ที่ 7 ฉบับใช้ติวภาค 2/2553) เรียบเรียงโดย วงศ์ยศ เกิดศรี (แบงค์)
34 Computer Programming using Java 03 - Decision Statements
โจทย์ ข้อที่ 5 [ระดับง่ าย] จงแสดงผลลัพธ์ จากส่ วนของโปรแกรมตามค่ า score ต่ อไปนี ้ (11 คะแนน)
1 if(score > 100) { ข้ อ ค่ า score ผลลัพธ์ ท่ แี สดง
2 System.out.println("Error 1");
3 } else if(score < 0) { 1. 90
4 System.out.println("Error 2");
5 } else if(score == 0) { 2. -3
6 System.out.println("Error 3");
7 } else if(score >= 80) { 3. 47
8 System.out.println("A");
9 } else if(score >= 75) { 4. 55
10 System.out.println("B+");
11 } else if(score >= 70) { 5. 64
12 System.out.println("B");
13 } else if(score >= 65) { 6. 79
14 System.out.println("C+");
15 } else if(score >= 60) { 7. 0
16 System.out.println("C");
17 } else if(score >= 55) { 8. 101
18 System.out.println("D+");
19 } else if(score >= 50) { 9. 71
20 System.out.println("D");
21 } else { 10. 50
22 System.out.println("F");
23 } 11. 66
โจทย์ ข้อที่ 7 [ระดับง่ าย] จงหาคําตอบจากนิพจน์ ตรรกะต่ อไปนีว้ ่ าเป็ นจริง (T) หรื อเท็จ (F) (15 คะแนน)
ข้ อ นิพจน์ ตรรกะ คําตอบ (T/F) หมายเหตุ
1. (2 < 5) && (6 != 7) || (3 > 4) -
2. (x > 13) || (x <= 13) && x != 13 x = 13
3. (a++ != 2) a = 1
4. (--a == 2) a = 2
7. a += 2 == 6 a = 4
© สงวนลิขสิทธิ์ พฤศจิกายน 2553 (ปรับปร ุงครัง้ ที่ 7 ฉบับใช้ติวภาค 2/2553) เรียบเรียงโดย วงศ์ยศ เกิดศรี (แบงค์)
36 Computer Programming using Java 03 - Decision Statements
2) ขอบเขตของตัวแปรภายในและภายนอกคําสั่ง if-else
(1) ตัวแปรประกาศภายในคําสัง่ if หรื อ else จะสามารถเรี ยกใช้ งานได้ ภายในคําสัง่ if หรื อ else
เท่านัน้ เมื่อจบคําสัง่ if หรื อ else จะไม่สามารถเรียกใช้ ตวั แปรนันได้
้ อีก
(2) ตัวแปรประกาศภายนอกและอยูเ่ หนือคําสัง่ if หรื อ else จะสามารถเรี ยกใช้ งานได้ ภายในคําสัง่ if
หรื อ else และเมื่อจบคําสัง่ if หรื อ else ก็ยงั สามารถเรี ยกใช้ ตวั แปรนันได้
้ เช่นเดิม
1 int x = 5;
2 if (x < 10) { ตัวแปร y ถูกประกาศภายในคําสัง่ if สามารถ
3
4 }
int y = x;
เรี ยกใช้ งานได้ ภายในคําสัง่ if เท่านัน้ เมื่อจบ
5 System.out.println(x); คําสัง่ if แล้ ว จะไม่สามารถเรี ยกใช้ งานได้ อีก
6 System.out.println(y); //Error
โจทย์ ข้อที่ 8 [ระดับง่ าย] จงพิจารณาส่ วนของโปรแกรมภาษาจาวาต่ อไปนี ้ เขียนถูก (;) หรือผิด (:)
ตามหลักขอบเขตของตัวแปร พร้ อมอธิบายเหตุผล (6 คะแนน)
1) int y = 25;
if (y > 30) {
System.out.println(y);
}
2) int y;
if (y <= 10) {
System.out.println(y);
}
3) int x = 1;
int y = 1;
if (x == y) {
int z = x + y;
}
System.out.println(z);
4) int x = 100;
if (x < 50) {
int y = ++x;
System.out.println(y);
} else {
int y = --x;
System.out.println(y);
}
5) int x = 100, y;
if (x < 50) {
int y = ++x;
} else {
int y = --x;
}
System.out.println(y);
6) int x = 100, y;
if (x > 50) {
y = ++x;
}
if (x < 50) {
y = --x;
}
System.out.println(y);
© สงวนลิขสิทธิ์ พฤศจิกายน 2553 (ปรับปร ุงครัง้ ที่ 7 ฉบับใช้ติวภาค 2/2553) เรียบเรียงโดย วงศ์ยศ เกิดศรี (แบงค์)
Decision Statements - 03 Computer Programming using Java 37
โจทย์ ข้อที่ 9 [ระดับง่ าย] จงเขียนโปรแกรมภาษาจาวาที่สมบรณ์
ู เพื่อรั บค่ าตัวเลขจํานวนเต็มหนึ่งค่ าเข้ ามา
ทางแป้นพิมพ์ เก็บไว้ ในตัวแปร n แล้ วหาค่ าสัมบรณ์
ู (Absolute) ของตัวแปร n นัน้ พร้ อมทัง้ แสดงผลลัพธ์
ขึน้ บนจอภาพ โดยห้ ามใช้ คาํ สั่งจากคลาส Math และห้ ามประกาศตัวแปรใดๆ เพิ่มเติม (10 คะแนน)
1 2 3 4
© สงวนลิขสิทธิ์ พฤศจิกายน 2553 (ปรับปร ุงครัง้ ที่ 7 ฉบับใช้ติวภาค 2/2553) เรียบเรียงโดย วงศ์ยศ เกิดศรี (แบงค์)
38 Computer Programming using Java 03 - Decision Statements
(กําหนดให้ ใช้ คาํ สั่ง if เท่ านั้นในการเขียนโปรแกรม ห้ ามใช้ คาํ สั่ง else if หรื อ else อย่ างเด็ดขาด)
1 2 3 4
3. ตรวจสอบว่ าเป็ นนิสิตชัน้ ปี ใด โดย 2 หลักแรกจะแสดงปี การศึกษาแรกที่นิสิตเข้ าเรียน ให้ คาํ นวนและ
แสดงชัน้ ปี ปั จจุบันของนิสิต และถ้ าเป็ นนิสิตระดับปริ ญญาบัณฑิตให้ แสดงข้ อความเพิ่มเติมต่ อท้ าย
ดังนี ้ นิสิตปี 1 แสดงคําว่ า "Freshmen" นิสิตปี 2 แสดงคําว่ า "Sophomore" นิสิตปี 3 แสดงคําว่ า
"Junior" นิสิตปี 4 แสดงคําว่ า "Senior" ส่ วนนิสิตปี อื่นๆ ไม่ ต้องแสดงข้ อความใดเพิ่มเติม
ผลลัพธ์ การทํางานของโปรแกรมแสดงดังตัวอย่ างต่ อไปนี ้ (15 คะแนน) Student ID : 5330123421
Engineering Student
1 2 3 4 5 6 Undergraduate
1 (Freshmen)
Student ID : 5271822821
Engineering Student
Graduate
2
© สงวนลิขสิทธิ์ พฤศจิกายน 2553 (ปรับปร ุงครัง้ ที่ 7 ฉบับใช้ติวภาค 2/2553) เรียบเรียงโดย วงศ์ยศ เกิดศรี (แบงค์)
Iteration Statements - 04 Computer Programming using Java 41
CHAPTER คําสัง่ วนซํ้า
04 (Iteration Statements)
1. คําสั่งวนซํา้ แบบเบือ้ งต้ นด้ วยคําสั่ง while
1. นิยามและข้ อกําหนดของคําสั่งวนซํา้ หรื อทําซํา้
1) คําสัง่ วนซํ ้าหรื อทําซํ ้า (Iteration/Repetition) คือ คําสัง่ ที่ใช้ สําหรับวนรอบเพื่อทํางานอย่างใดอย่างหนึ่ง
ตามเงื่อนไข (Condition) ที่กําหนดขึ ้น และจะวนทํางานแบบนันไปเรื ้ ่ อยๆ ตราบใดที่เงื่อนไขยังเป็ นจริง
2) คําสัง่ วนซํ ้าในภาษาจาวา ประกอบไปด้ วย 3 ชุดคําสัง่ ได้ แก่ [1] while, [2] do-while และ [3] for
ตัวอย่ าง กําหนดค่าเริ่ มต้ นให้ ตวั แปร i เท่ากับ 1 แล้ วทําการวนซํ ้าเพื่อ
int i = 1;
1
2 while(i <= 5) {
แสดงค่า i ตังแต่้ 1 ถึง 5 โดยในแต่ละรอบการวนซํ ้าจะเพิ่มจํา
3 System.out.print(i); นวนรอบ (เพิ่มค่า i) ขึ ้นทีละ 1 (โดยใช้ คําสัง่ i++) ดังนัน้
4 i++;
5 } ผลลัพธ์ที่ได้ คือ 12345
โจทย์ ข้อที่ 1 [ระดับง่ าย] จงแสดงผลลัพธ์ จากส่ วนของโปรแกรมตามค่ า n ที่กาํ หนดให้ ต่อไปนี ้ (5 คะแนน)
1 int i = 0, j = 5; n = 1 n = 0 n = -1 n = 3 n = -2
2 while (i <= n) {
3 System.out.println(n++);
4 i = i + 2; }
5 while (j > n) {
6 System.out.println(--j);
7 j--;
8 }
© สงวนลิขสิทธิ์ พฤศจิกายน 2553 (ปรับปร ุงครัง้ ที่ 7 ฉบับใช้ติวภาค 2/2553) เรียบเรียงโดย วงศ์ยศ เกิดศรี (แบงค์)
42 Computer Programming using Java 04 - Iteration Statements
โจทย์ ข้อที่ 2 [ระดับง่ าย] จงเขียนเฉพาะคําสั่ง while ตามเงื่อนไขต่ อไปนี ้ (10 คะแนน)
1) แสดงคําว่ า "Java" ขึน้ บนจอภาพ 100 ครัง้ (5 คะแนน)
True
เข้ าทําคําสัง่ ทุกๆ คําสัง่ ภายในคําสัง่ while ทันทีเพราะว่าเงื่อนไข
Statement เป็ นจริงตลอดกาล และจะวนทํางานแบบนี ้ไปเรื่ อยๆ จนกว่าเงื่อนไข
True False
ของคําสัง่ if ซึง่ อยูภ่ ายในคําสัง่ while เป็ นจริง ก็จะ break
Condition การทํางาน และสิ ้นสุดการวนซํ ้า
© สงวนลิขสิทธิ์ พฤศจิกายน 2553 (ปรับปร ุงครัง้ ที่ 7 ฉบับใช้ติวภาค 2/2553) เรียบเรียงโดย วงศ์ยศ เกิดศรี (แบงค์)
Iteration Statements - 04 Computer Programming using Java 43
โจทย์ ข้อที่ 3 [ระดับง่ าย] จงเขียนเฉพาะคําสั่ง while(true) ตามเงื่อนไขต่ อไปนี ้ (10 คะแนน)
1) แสดงคําว่ า “เกรียน” ขึน้ บนจอภาพ 1000 ครัง้ (5 คะแนน)
© สงวนลิขสิทธิ์ พฤศจิกายน 2553 (ปรับปร ุงครัง้ ที่ 7 ฉบับใช้ติวภาค 2/2553) เรียบเรียงโดย วงศ์ยศ เกิดศรี (แบงค์)
44 Computer Programming using Java 04 - Iteration Statements
Enter number: 4
4 ****
Enter number: 6
6 ******
© สงวนลิขสิทธิ์ พฤศจิกายน 2553 (ปรับปร ุงครัง้ ที่ 7 ฉบับใช้ติวภาค 2/2553) เรียบเรียงโดย วงศ์ยศ เกิดศรี (แบงค์)
Iteration Statements - 04 Computer Programming using Java 45
โจทย์ ข้อที่ 7 [ระดับปานกลาง] จงเขียนโปรแกรมภาษาจาวาที่สมบรณ์ ู เพื่อรั บตัวเลขจํานวนเต็มหนึ่งจํา
นวนเข้ ามาเก็บไว้ ในตัวแปร n และหาค่ าแฟคทอเรี ยล (Factorial) ของจํานวนนัน้ (ผลคณของตั ู วเลข 1
จนถึง n) เช่ น 4! = 1 x 2 x 3 x 4 = 24 เป็ นต้ น พร้ อมทัง้ แสดงผลลัพธ์ ออกทางจอภาพ (10 คะแนน)
1 2 3 4
© สงวนลิขสิทธิ์ พฤศจิกายน 2553 (ปรับปร ุงครัง้ ที่ 7 ฉบับใช้ติวภาค 2/2553) เรียบเรียงโดย วงศ์ยศ เกิดศรี (แบงค์)
46 Computer Programming using Java 04 - Iteration Statements
© สงวนลิขสิทธิ์ พฤศจิกายน 2553 (ปรับปร ุงครัง้ ที่ 7 ฉบับใช้ติวภาค 2/2553) เรียบเรียงโดย วงศ์ยศ เกิดศรี (แบงค์)
Iteration Statements - 04 Computer Programming using Java 47
โจทย์ ข้อที่ 11 [ระดับยาก] จงเขียนโปรแกรมภาษาจาวาที่สมบรณ์ ู เพื่อรั บตัวเลขจํานวนเต็มบวกหนึ่งจํา-
นวนเข้ ามาทางแป้นพิมพ์ แล้ วแสดงผลลัพธ์ ท่ ีได้ เป็ นเลขฐานสองที่มีค่าเท่ ากับจํานวนนั น้ ดังตัวอย่ าง
ต่ อไปนี ้ (10 คะแนน) Decimal Number: 14
Binary Number: 1110
1 2 3 4 5
Decimal Number: 345
Binary Number: 101011001
© สงวนลิขสิทธิ์ พฤศจิกายน 2553 (ปรับปร ุงครัง้ ที่ 7 ฉบับใช้ติวภาค 2/2553) เรียบเรียงโดย วงศ์ยศ เกิดศรี (แบงค์)
48 Computer Programming using Java 04 - Iteration Statements
โจทย์ ข้อที่ 12 [ระดับง่ าย] จงแสดงผลลัพธ์ จากส่ วนของโปรแกรมตามค่ า n ที่กาํ หนดให้ ต่อไปนี ้ (4 คะแนน)
1 double c = 3.0; n = 3 n = 0 n = 1 n = 4
2 for(c = 1.0; c <= n; c += 0.1)
3 System.out.println(c++);
4 c++;
5 for(int i = 6; i > n; i--) {
6 System.out.print(i);
7 System.out.print(n++);
8 }
โจทย์ ข้อที่ 13 [ระดับง่ าย] จงเขียนเฉพาะคําสั่ง for ตามเงื่อนไขต่ อไปนี ้ (10 คะแนน)
1) แสดงคําว่ า "Get A" ขึน้ บนจอภาพ 1000 ครัง้ (5 คะแนน)
© สงวนลิขสิทธิ์ พฤศจิกายน 2553 (ปรับปร ุงครัง้ ที่ 7 ฉบับใช้ติวภาค 2/2553) เรียบเรียงโดย วงศ์ยศ เกิดศรี (แบงค์)
Iteration Statements - 04 Computer Programming using Java 49
โจทย์ ข้อที่ 14 [ระดับง่ าย] จงเขียนส่ วนของโปรแกรมภาษาจาวาเพื่อเปลี่ยนคําสั่ง while ในโจทย์ ข้อที่ 6
ถึง 9 ให้ เป็ นคําสั่ง for โดยไม่ ต้องเขียนโปรแกรมในส่ วนของการรั บค่ าและแสดงผล และสามารถเรี ยก
ใช้ ตวั แปรเดิมของการรั บค่ าได้ เลย แต่ ตวั แปรอื่นๆ จะต้ องประกาศใหม่ ทงั ้ หมด (20 คะแนน)
1) แปลงเฉพาะคําสั่ง while ในโจทย์ ข้อที่ 6 ให้ เป็ นคําสั่ง for (5 คะแนน)
© สงวนลิขสิทธิ์ พฤศจิกายน 2553 (ปรับปร ุงครัง้ ที่ 7 ฉบับใช้ติวภาค 2/2553) เรียบเรียงโดย วงศ์ยศ เกิดศรี (แบงค์)
50 Computer Programming using Java 04 - Iteration Statements
1 1 1 1 1
4) [ระดับปานกลาง] 1 + − + − + ... + (5 คะแนน)
2 3 4 5 30
© สงวนลิขสิทธิ์ พฤศจิกายน 2553 (ปรับปร ุงครัง้ ที่ 7 ฉบับใช้ติวภาค 2/2553) เรียบเรียงโดย วงศ์ยศ เกิดศรี (แบงค์)
Iteration Statements - 04 Computer Programming using Java 51
23 25 27 29 211 219
5) [ระดับยาก] 2 − + − + − + ... − (10 คะแนน)
3! 5! 7! 9! 11! 19!
© สงวนลิขสิทธิ์ พฤศจิกายน 2553 (ปรับปร ุงครัง้ ที่ 7 ฉบับใช้ติวภาค 2/2553) เรียบเรียงโดย วงศ์ยศ เกิดศรี (แบงค์)
52 Computer Programming using Java 04 - Iteration Statements
Number: 10
*
**
***
****
*****
******
*******
********
*********
**********
Number: 45
45 is not a prime number
© สงวนลิขสิทธิ์ พฤศจิกายน 2553 (ปรับปร ุงครัง้ ที่ 7 ฉบับใช้ติวภาค 2/2553) เรียบเรียงโดย วงศ์ยศ เกิดศรี (แบงค์)
One Dimensional Arrays - 07 Computer Programming using Java 77
CHAPTER อาเรย์หนึ่งมิติ
07 (One Dimensional Arrays)
1. ความร้ ูเบือ้ งต้ นเกี่ยวกับอาเรย์ (Introduction to Arrays)
1. นิยามของอาเรย์
1) อาเรย์ (Arrays) คือ โครงสร้ างข้ อมูลประเภทหนึ่งที่ใช้ เก็บรายการของข้ อมูลประเภทเดียวกัน โดยเก็บ
ข้ อมูลทังหมดเรี
้ ยงต่อกันไปในหน่วยความจํา เสมือนนําข้ อมูลเก็บไว้ ใน "ช่ อง" ที่วางเรี ยงกัน เช่น
6 1 7 9
'C' ไม่สนใจว่าช่องของอาเรย์จะวางเรี ยงกันในแนวตังหรื
้ อแนวนอน ซึง่
'U' จะเรี ยกว่าอาเรย์ทงหมด
ั้ โดยแต่ละช่องจะเก็บข้ อมูลได้ เพียง 1 ค่า
4) มิตขิ องอาเรย์ สามารถมีได้ ไม่จํากัด เช่นอาเรย์หนึ่งมิติ สองมิติ สามมิติ หรื อ n มิติ แต่โดยทัว่ ไปแล้ วเรา
นิยมใช้ อาเรย์หนึง่ มิตแิ ละอาเรย์สองมิติ ซึง่ ในบทนี ้จะนําเสนออาเรย์หนึง่ มิติ
6 1 2 1
เช่น int a[] = {34, 56, 52, 12, 90, 0, 75, 23, 45, 8}; ซึง่ จะได้ เป็ นโครงสร้ างดังนี ้
0 1 2 3 4 5 6 7 8 9
34 56 52 12 90 0 75 23 45 8 มีสมาชิก 10 ตัว แต่ตําแหน่งสูงสุดคือ 9
© สงวนลิขสิทธิ์ พฤศจิกายน 2553 (ปรับปร ุงครัง้ ที่ 7 ฉบับใช้ติวภาค 2/2553) เรียบเรียงโดย วงศ์ยศ เกิดศรี (แบงค์)
78 Computer Programming using Java 07 - One Dimensional Arrays
ค่าสมาชิกแต่ละตัวของอาเรย์สามารถอ้ างอิงหรื อเรี ยกชื่อได้ โดยใช้ คําสัง่ <ชื่ออาเรย์ >[<ตําแหน่ ง>] เช่น
0 1 2 3 4 5 6 7 8 9
a[0] a[1] a[2] a[3] a[4] a[5] a[6] a[7] a[8] a[9]
โจทย์ ข้อที่ 1 [ระดับง่ าย] จงหาผลลัพธ์ จากส่ วนของโปรแกรมต่ อไปนี ้ โดยกําหนดให้ โปรแกรมสามารถ
ทํางานจนจบได้ แม้ มี Error พร้ อมทัง้ แสดงผลลัพธ์ สุดท้ ายของสมาชิกในอาเรย์ แต่ ละช่ อง (8 คะแนน)
1 int i = 3;
2 int a[] = { 0, 2, 4, 6, 8, 1, 3, 5, 7, 9 };
3 System.out.println(a[0] + a[6]);
4 System.out.println(a[1] * --a[4]);
5 System.out.println(a[9]++);
6 System.out.println(a[10] + a[4]);
7 System.out.println(a[1]++ + a[0]);
8 System.out.println(a[5 + 3]);
9 System.out.println(--a[2*i] + a[1]++);
10 System.out.println(a[1] + a[4] + a[9]);
0 1 2 3 4 5 6 7 8 9
ค่าของสมาชิกแต่ละช่องคือ
เช่น
a
int a[];
© สงวนลิขสิทธิ์ พฤศจิกายน 2553 (ปรับปร ุงครัง้ ที่ 7 ฉบับใช้ติวภาค 2/2553) เรียบเรียงโดย วงศ์ยศ เกิดศรี (แบงค์)
One Dimensional Arrays - 07 Computer Programming using Java 79
5) ข้ อสังเกตในการประกาศและสร้ างอาเรย์หนึง่ มิติ
ขนาดของอาเรย์ถก ู ระบุตอนสร้ างอาเรย์ ถ้ าต้ องการให้ อาเรย์มีกี่ช่องก็ให้ ระบุจํานวนช่องลงไป ซึง่ ส่วนนี ้
ไม่ใช่ตําแหน่งของอาเรย์ (อย่าสับสน) Æ ลําดับของอาเรย์เริ่มนับที่ 1 แต่ตําแหน่งของอาเรย์เริ่มนับที่ 0
ขนาดของอาเรย์เป็ นค่าของนิพจน์ได้ เช่น int data[] = new int[3 * n + 1]; เป็ นต้ น
ระบบจะตังค่ ้ าเริ่ มต้ นของข้ อมูลให้ กบั อาเรย์ทกุ ช่องโดยอัตโนมัตเิ มื่อเริ่มสร้ างอาเรย์ตามชนิดของอาเรย์
เช่น double a[] = new double[5]; จะได้ อาเรย์ 5 ช่องโดยมีคา่ เริ่มต้ นของทุกช่องเป็ น 0.0
3. การหาขนาดและความยาวของอาเรย์ หนึ่งมิติ
การหาขนาดของอาเรย์จะใช้ คําสัง่ .length โดยระบุเข้ าไปหลังชื่ออาเรย์โดยไม่ต้องใส่วงเล็บ ดังรูปแบบต่อไปนี ้
<ชื่ออาเรย์>.length
© สงวนลิขสิทธิ์ พฤศจิกายน 2553 (ปรับปร ุงครัง้ ที่ 7 ฉบับใช้ติวภาค 2/2553) เรียบเรียงโดย วงศ์ยศ เกิดศรี (แบงค์)
80 Computer Programming using Java 07 - One Dimensional Arrays
© สงวนลิขสิทธิ์ พฤศจิกายน 2553 (ปรับปร ุงครัง้ ที่ 7 ฉบับใช้ติวภาค 2/2553) เรียบเรียงโดย วงศ์ยศ เกิดศรี (แบงค์)
One Dimensional Arrays - 07 Computer Programming using Java 81
โจทย์ ข้อที่ 4 [ระดับง่ าย–ปานกลาง] จงเขียนส่ วนของโปรแกรมภาษาจาวาตามคําสั่งต่ อไปนี ้ (55 คะแนน)
1) สร้ างอาเรย์ ช่ ือ n แบบ Initialed List เพื่อเก็บเลขคี่ท่ อี ย่ ูในช่ วง 1 ถึง 20 พร้ อมทัง้ แสดงค่ าของตัวเลข
ทุกตัวในอาเรย์ n ขึน้ บนจอภาพทีละบรรทัด (5 คะแนน)
2) สร้ างอาเรย์ ช่ ือ m ขนาด 1000 ช่ อง พร้ อมทัง้ กําหนดค่ าให้ กับสมาชิกทุกตัวในอาเรย์ m ให้ มีค่าเป็ น
ตัวเลขตัง้ แต่ 1-1000 เรียงลําดับจากสมาชิกตัวแรกจนถึงสมาชิกตัวสุดท้ ายของอาเรย์ m (5 คะแนน)
4) นับจํานวนเลขคี่และค่ ทู ่ เี ก็บอย่ ูในอาเรย์ x ว่ ามีอย่ างละกี่จาํ นวนแล้ วแสดงผลขึน้ บนจอภาพ (10 คะแนน)
int x[] = { 7, 9, -1, 4, 12, 9, 3, 2, -7, 2, 1, 9, -15, 24, 11, 13 };
© สงวนลิขสิทธิ์ พฤศจิกายน 2553 (ปรับปร ุงครัง้ ที่ 7 ฉบับใช้ติวภาค 2/2553) เรียบเรียงโดย วงศ์ยศ เกิดศรี (แบงค์)
82 Computer Programming using Java 07 - One Dimensional Arrays
} //End of main
} //End of class
© สงวนลิขสิทธิ์ พฤศจิกายน 2553 (ปรับปร ุงครัง้ ที่ 7 ฉบับใช้ติวภาค 2/2553) เรียบเรียงโดย วงศ์ยศ เกิดศรี (แบงค์)
One Dimensional Arrays - 07 Computer Programming using Java 83
int num[] = {95, 1, 6, 34, 5, 9, 123, -2, 57, 82, 12, 79, 45, 34, 1};
} //End of main
} //End of class
} //End of main
} //End of class
import java.util.Scanner;
public class EqualityOfArrays {
public static void main(String[] args) {
int a[] = { 1, 2, 3, 4, 5, 6, 7 }, b[] = { 1, 2, 3, 5, 5, 7, 7 };
} //End of main
} //End of class
} //End of main
} //End of class
© สงวนลิขสิทธิ์ พฤศจิกายน 2553 (ปรับปร ุงครัง้ ที่ 7 ฉบับใช้ติวภาค 2/2553) เรียบเรียงโดย วงศ์ยศ เกิดศรี (แบงค์)
One Dimensional Arrays - 07 Computer Programming using Java 85
3. การประยุกต์ ใช้ อาเรย์ (Applications of Array)
1. การเรียงลําดับแบบเลือก (Selection Sort) (ดูการสาธิตตัวอย่างการจัดเรี ยงในโจทย์ข้อที่ 10)
1 for (int i = data.length - 1; i >= 1; i--) { จํา
2 int maxIndex = 0;
3 for (int j = 0; j <= i; j++)
4 if (data[j] > data[maxIndex]) maxIndex = j; เรี ยงจากน้ อยไปหามาก
5 int temp = data[i];
6 data[i] = data[maxIndex]; เลือกค่าที่สนใจในแต่ละรอบ ซึง่ อาจจะเป็ นค่ามาก
7 data[maxIndex] = temp;
8 } ที่สดุ หรื อค่าน้ อยที่สดุ ในรอบนัน้ เพื่อจัดเรี ยง
การจัดเรียงแบบเลือก
รอบที่ 1
รอบที่ 2
© สงวนลิขสิทธิ์ พฤศจิกายน 2553 (ปรับปร ุงครัง้ ที่ 7 ฉบับใช้ติวภาค 2/2553) เรียบเรียงโดย วงศ์ยศ เกิดศรี (แบงค์)
86 Computer Programming using Java 07 - One Dimensional Arrays
รอบที่ 3
รอบที่ 4
รอบที่ 5
รอบที่ 6
รอบที่ 7
รอบที่ 8
การจัดเรียงแบบฟอง
รอบที่ 1
รอบที่ 2
© สงวนลิขสิทธิ์ พฤศจิกายน 2553 (ปรับปร ุงครัง้ ที่ 7 ฉบับใช้ติวภาค 2/2553) เรียบเรียงโดย วงศ์ยศ เกิดศรี (แบงค์)
One Dimensional Arrays - 07 Computer Programming using Java 87
© สงวนลิขสิทธิ์ พฤศจิกายน 2553 (ปรับปร ุงครัง้ ที่ 7 ฉบับใช้ติวภาค 2/2553) เรียบเรียงโดย วงศ์ยศ เกิดศรี (แบงค์)
88 Computer Programming using Java 07 - One Dimensional Arrays
import java.util.Scanner;
import java.io.*;
public class SortMonthByBirthDate {
public static void main(String[] args) throws IOException {
} //End of main
} //End of class
© สงวนลิขสิทธิ์ พฤศจิกายน 2553 (ปรับปร ุงครัง้ ที่ 7 ฉบับใช้ติวภาค 2/2553) เรียบเรียงโดย วงศ์ยศ เกิดศรี (แบงค์)
One Dimensional Arrays - 07 Computer Programming using Java 89
โจทย์ ข้อที่ 13 [ระดับเทพ] จงเขียนโปรแกรมภาษาจาวาให้ สมบรณ์ ู เพื่อใช้ สําหรั บประมวลผลคะแนนราย
วิชา “How To Be Noob” โดยโปรแกรมจะเริ่มอ่ านเลขประจําตัวนิสิตจากแฟ้มข้ อมลู student.txt แล้ ว
ทําการสร้ างคะแนนของนิสิตแต่ ละคนขึน้ มาโดยการสุ่ม ซึ่งประกอบไปด้ วย 5 ส่ วนได้ แก่ คะแนนสอบ
ย่ อย (5%) คะแนนการบ้ าน (10%) คะแนนปฏิบัติการ (10%) คะแนนสอบกลางภาค (30%) และคะแนน
สอบปลายภาค (45%) แล้ วนํากลับไปบันทึกไว้ ในแฟ้มข้ อมลู student.txt อีกครั ง้ จากนั น้ ให้ อ่านค่ า
คะแนนทัง้ 5 ส่ วนของนิสิตแต่ ละคนจากแฟ้มข้ อมลเดิ ู มเพื่อนํามาคํานวณหาค่ าคะแนนรวม (100%)
พร้ อมทัง้ ตัดเกรดรายวิชานัน้ แล้ วนําผลลัพธ์ ท่ ีได้ ไปบันทึกไว้ ในแฟ้มข้ อมลู totalscore.txt พร้ อมทัง้
บันทึกข้ อมลสรุ
ู ปต่ างๆ ไว้ ท้ายแฟ้ มข้ อมลนั
ู น้ ด้ วย โดยให้ เ ขียนโปรแกรมตามขัน้ ตอนต่ างๆ ที่โจทย์
กําหนดไว้ ดงั รายละเอียดต่ อไปนี ้ (85 คะแนน)
student.txt ก่ อนการประมวลผล student.txt หลังการประมวลผล
5131000121 5131000121 3 7 3 20 26
5331000221 5331000221 4 6 9 24 40
5231000321 5231000321 0 1 8 25 27
5031000421 5031000421 0 3 10 15 0
4931000521 4931000521 2 0 7 28 25
4931000621 4931000621 4 6 7 3 19
5231000721 5231000721 2 10 3 27 45
... ...
import java.io.*;
import java.util.Scanner;
public class ScoreCalculator {
public static void main(String[] args) throws IOException {
//สร้ างตัวอ่ านชื่อ in1 เพื่อเปิ ดอ่ านแฟ้มข้ อมลู student.txt สําหรับนับจํานวนนิสิตทัง้ หมดที่
ปรากฎในแฟ้มนัน้ แล้ วเก็บผลลัพธ์ ไว้ ในตัวแปร count (5 คะแนน)
© สงวนลิขสิทธิ์ พฤศจิกายน 2553 (ปรับปร ุงครัง้ ที่ 7 ฉบับใช้ติวภาค 2/2553) เรียบเรียงโดย วงศ์ยศ เกิดศรี (แบงค์)
90 Computer Programming using Java 07 - One Dimensional Arrays
//สร้ างตัวอ่ านชื่อ in2 เพื่อเปิ ดอ่ านแฟ้มข้ อมลู student.txt อีกครั ง้ และสร้ างอาเรย์ ช่ อื id แล้ ว
ทําการอ่ านค่ าเลขประจําตัวนิสิตแต่ ละคนเก็บไว้ ในอาเรย์ id ทีละช่ อง (5 คะแนน)
//สร้ างตัวอ่ านชื่อ in3 เพื่อเปิ ดอ่ านแฟ้มข้ อมลู student.txt อีกครั ง้ และสร้ างอาเรย์ ช่ อื sc แล้ ว
ทําการคํานวณคะแนนรวมของนิสิตแต่ ละคนเก็บไว้ ในอาเรย์ sc ทีละช่ อง (10 คะแนน)
© สงวนลิขสิทธิ์ พฤศจิกายน 2553 (ปรับปร ุงครัง้ ที่ 7 ฉบับใช้ติวภาค 2/2553) เรียบเรียงโดย วงศ์ยศ เกิดศรี (แบงค์)
One Dimensional Arrays - 07 Computer Programming using Java 91
//สร้ างตัวเขียนชื่อ out2 เพื่อเขียนแฟ้มข้ อมลู totalscore.txt โดยในแต่ ละบรรทัดจะประกอบ
ไปด้ วยเลขประจําตัวนิสิต คะแนนรวม และเกรดของนิสิตแต่ ละคน โดยเกรดมี 5 ระดับได้ แก่ A
(ช่ วงคะแนน 80-100) B (ช่ วงคะแนน 70-79) C (ช่ วงคะแนน 60-69) D (ช่ วงคะแนน 50-59) และ
F (ช่ วงคะแนน 0-49) (10 คะแนน)
© สงวนลิขสิทธิ์ พฤศจิกายน 2553 (ปรับปร ุงครัง้ ที่ 7 ฉบับใช้ติวภาค 2/2553) เรียบเรียงโดย วงศ์ยศ เกิดศรี (แบงค์)
92 Computer Programming using Java 07 - One Dimensional Arrays
} //End of main
} //End of class
© สงวนลิขสิทธิ์ พฤศจิกายน 2553 (ปรับปร ุงครัง้ ที่ 7 ฉบับใช้ติวภาค 2/2553) เรียบเรียงโดย วงศ์ยศ เกิดศรี (แบงค์)
Methods - 08 Computer Programming using Java 93
CHAPTER เมท็อด
08 (Methods)
1. ความร้ ูเบือ้ งต้ นเกี่ยวกับเมท็อด (Introduction to Methods)
1. นิยามของเมท็อด
1) เมท็อด (Methods) คือ โปรแกรมย่อยที่ทําหน้ าที่เฉพาะ ซึง่ มีลกั ษณะเดียวกับ Subroutine, Sub-program
และ Function โดยเมท็อดช่วยลดความซํ ้าซ้ อนของโปรแกรมที่ทํางานซํ ้าๆ ได้
2) เมท็อดทุกเมท็อดจะปรากฏอยูใ่ นคลาส (Class) ซึง่ คลาสจะรวบรวมเมท็อดเอาไว้ เป็ นกลุม่ ก้ อน
3) รู ปแบบของโปรแกรมในช่วงก่อนหน้ านี ้เป็ นโปรแกรมแบบ 1 คลาส 1 เมท็อด แต่รูปแบบของโปรแกรม
ในช่วงต่อจากนี ้เป็ นต้ นไปจะเป็ นโปรแกรมแบบ 1 คลาส หลายเมท็อด หรื อ หลายคลาสหลายเมท็อด
(1) โปรแกรมแบบ 1 คลาส 1 เมท็อด จะรวมส่วนของโปรแกรมทุกส่วนไว้ ในเมท็อด main และมีการประ-
มวลผลแบบตามลําดับจากบนลงล่าง
(2) โปรแกรมแบบ 1 คลาส หลายเมท็อด จะแบ่งส่วนของโปรแกรมแต่ละส่วนออกเป็ นเมท็อดแต่ละเมท็อด
โดยมีเมท็อด main เป็ นศูนย์กลาง และมีการประมวลผลแบบแยกส่วนย่อยกระโดดไปมาตามการเรี ยก
ใช้ งานของเมท็อดต่างๆ (การประมวลผลขึ ้นกับคําสัง่ ในเมท็อด main ถ้ าไม่มี main จะไม่ประมวลผล)
1 คลาส 1 เมท็อด (เมท็อด main) 1 1 คลาส หลายเมท็อด
7
class Operation {
2
เรี ยก class Operation {
© สงวนลิขสิทธิ์ พฤศจิกายน 2553 (ปรับปร ุงครัง้ ที่ 7 ฉบับใช้ติวภาค 2/2553) เรียบเรียงโดย วงศ์ยศ เกิดศรี (แบงค์)
94 Computer Programming using Java 08 - Methods
โจทย์ ข้อที่ 1 [ระดับง่ าย] จากตัวอย่ างโปรแกรมต่ อไปนี ้ จงพิจารณาคํากล่ าวแต่ ละข้ อว่ ากล่ าวผิด (:)
หรือถูก (;) (20 คะแนน)
1 import java.util.Scanner;
2 public class Test {
3 public static void main(String[] args) {
4 Scanner kb = new Scanner(System.in);
5
6
double a = kb.nextDouble(); ตังใจจะใส่
้ คา่ 5.0
int b = kb.nextInt();
7 double n = mul(a, b);
8 int m = mod(13); ตังใจจะใส่
้ คา่ 2
9 System.out.println(n + m);
10 }
11 private static double mul(double x, int y) {
12 double n = x * y;
13
14 }
return n;
บางเมท็อดอาจเขียนอยูใ่ นรูปแบบอื่นที่ไม่ใช่ public
15 protected static int mod(int x) { static ก็ได้ เช่น private static เป็ นต้ น ซึง่
16 return x % 3;
17 } จะได้ กล่าวรายละเอียดอีกครัง้ ในบทที่ 12
18 }
double cal = x + y;
ตัวเมท็อด ข้ อมูลจากทางเข้ าและข้ อมูลที่
return cal;
} ประมวลผล ทางออกไม่ได้ สมั พันธ์กนั
คืนค่า
จากตัวอย่างสามารถแจกแจงส่วนประกอบย่อยของเมท็อดออกเป็ น 6 ส่วนดังต่อไปนี ้
1 2 3 4
<ตัวบ่งคุณลักษณะ> <ประเภท> <ชื่อ> (<ตัวแปรรับเข้ า>) { ไม่วา่ ภายในเมท็อดจะมีกี่คําสัง่ ก็ตามจะ
ต้ องใส่เครื่ องหมายปี กกาเปิ ด-ปิ ดเสมอ
<คําสัง่ ประมวลผล> 5
...
ส่วนประกอบที่ 1-4 คือ หัวเมท็อด (Head)
<คําสัง่ ส่งกลับข้ อมูล> 6
ส่วนประกอบที่ 5-6 คือ ตัวเมท็อด (Body)
} .
2. หัวเมท็อด (Head)
เป็ นส่วนที่แสดงถึงรูปแบบ โครงสร้ างและข้ อกําหนดของเมท็อด ซึง่ มีสว่ นประกอบดังต่อไปนี ้
1) ตัวบ่ งคุณลักษณะ (Modifier) คือ ส่วนที่กําหนดคุณลักษณะและคุณสมบัติบางประการของเมท็อด ซึ่ง
ได้ แก่ public, private, protected, static ฯลฯ โดยจะอธิบายอีกครัง้ ในเรื่ องคลาสและอ๊ อบเจ็ค แต่
ในบทนี ้ให้ เขียนตัวบ่งคุณลักษณะของทุกเมท็อดเป็ นแบบ public static เท่านัน้ ดังตัวอย่าง
public static double power(double n) ส่วนนี ้มีก็ได้ ไม่มีก็ได้ ตัดออกได้
2) ประเภทเมท็อด (Method Type) หรื อประเภทข้ อมลที ู ่ ส่งกลับ (Return Type) คือ ประเภทข้ อมูลที่
เป็ นผลลัพธ์สดุ ท้ ายของเมท็อดที่จะคืนค่ากลับ ซึง่ ได้ แก่ประเภทข้ อมูล byte, short, int, long, float,
double ฯลฯ หากเมท็อดไม่มีการคืนค่ากลับให้ ระบุเป็ นประเภท void ดังตัวอย่าง
© สงวนลิขสิทธิ์ พฤศจิกายน 2553 (ปรับปร ุงครัง้ ที่ 7 ฉบับใช้ติวภาค 2/2553) เรียบเรียงโดย วงศ์ยศ เกิดศรี (แบงค์)
96 Computer Programming using Java 08 - Methods
3) ชื่อเมท็อด (Method Name) คือ ชื่อที่อ้างถึงหรื อชื่อเรี ยกเมท็อด ซึ่งควรขึ ้นต้ นด้ วยอักษรตัวพิมพ์เล็ก
้ ่อตัวแปร) และชื่อควรเป็ นคํากริ ยาหรื อคําที่แสดงการกระทํา เช่น getID(…),
(เป็ นไปตามกฎการตังชื
addNumber(…) เป็ นต้ น และหลังชื่อเมท็อดต้ องตามด้ วยเครื่ องหมายวงเล็บเปิ ด-ปิ ดเสมอ ดังตัวอย่าง
public static double add (int x, int y) ส่วนนี ้ต้ องมีเสมอ ตัดออกไม่ได้
2) เมท็อดชื่อ root มีข้อมูลรั บเข้ า 1 ค่ าที่เป็ นจํานวนเต็ม เพื่อใช้ คาํ นวณหาค่ ารากที่สองของจํานวนนัน้
พร้ อมทัง้ ส่ งค่ าคําตอบกลับ (2 คะแนน)
protected static ( )
© สงวนลิขสิทธิ์ พฤศจิกายน 2553 (ปรับปร ุงครัง้ ที่ 7 ฉบับใช้ติวภาค 2/2553) เรียบเรียงโดย วงศ์ยศ เกิดศรี (แบงค์)
Methods - 08 Computer Programming using Java 97
3. ตัวเมท็อด (Body)
เป็ นส่วนที่แสดงรายละเอียดของการประมวลผลและการส่งกลับข้ อมูลของเมท็อด ซึง่ มีดงั ต่อไปนี ้
1) การประมวลผล ซึง่ ได้ แก่การประกาศตัวแปรเพื่อใช้ ภายในเมท็อด และการใช้ คําสัง่ ต่างๆ เช่น if-else,
while, for, Scanner ในการประมวลผลภายในเมท็อด ซึง่ หลักการเหล่านี ้จะเหมือนกับเนื ้อหาก่อนหน้ า
นี ้ตังแต่
้ บทที่ 1-7 ที่ได้ เรี ยนมาแล้ วทุกประการ
2) การส่ งกลับข้ อมลู เป็ นการส่งค่าหรื อคืนค่าคําตอบที่ได้ จากการประมวลผลในเมท็อดกลับไปยังเมท็อดที่
เรี ยกใช้ ซึง่ ค่าที่สง่ กลับ (Return Value) จะต้ องตรงกับประเภทเมท็อด (Method Type) หรื อ ประเภทข้ อมูล
ที่สง่ กลับ (Return Type) ที่ประกาศไว้ ที่หวั เมท็อดเสมอ หรื อถ้ าไม่ตรงกันจะต้ องสามารถสอดใส่กนั ได้ ซึง่
การส่งกลับจะใช้ คําสัง่ return และสามารถทําได้ เพียงครัง้ เดียวเท่านัน้ ถ้ ามีคําสัง่ return หลายกรณีจะ
ทําเพียงกรณีแรกที่เป็ นจริ ง แต่ถ้าประเภทเมท็อดเป็ น void ไม่ต้องมีคําสัง่ return ดังตัวอย่าง
1 public static double div(int a, int b){ เมท็อดเป็ นประเภท double
2 double x = (double) a / (double) b;
3 return x;
4 }
ค่าที่จะส่งกลับ (ค่าของตัวแปร x) จะต้ องมีประเภทข้ อมูลเป็ น double
โจทย์ ข้อที่ 3 [ระดับง่ าย] จงพิจารณาเมท็อดต่ อไปนีเ้ ขียนผิด (:) หรื อถูก (;) ตามหลักไวยากรณ์ ของ
ภาษาจาวาพร้ อมทัง้ บอกเหตุผลกํากับ (10 คะแนน)
1) public static printError(String msg) {
System.err.println(msg);
}
2) protected static int flip(int n) {
if (n == 1) n = 0;
}
3) public static float max(long x, y) {
if (x > y) return x;
else return y;
}
4) private static void showChar() {
for(char i = '0'; i <= '9'; i++) {
System.out.println(i);
}
return;
}
© สงวนลิขสิทธิ์ พฤศจิกายน 2553 (ปรับปร ุงครัง้ ที่ 7 ฉบับใช้ติวภาค 2/2553) เรียบเรียงโดย วงศ์ยศ เกิดศรี (แบงค์)
98 Computer Programming using Java 08 - Methods
© สงวนลิขสิทธิ์ พฤศจิกายน 2553 (ปรับปร ุงครัง้ ที่ 7 ฉบับใช้ติวภาค 2/2553) เรียบเรียงโดย วงศ์ยศ เกิดศรี (แบงค์)
Methods - 08 Computer Programming using Java 99
4) เมท็อดชื่อ fullName ใช้ ในการรวมชื่อและนามสกุลที่รับเข้ ามาให้ เป็ นชื่อเต็ม (ระหว่ างชื่อและ
นามสกุลต้ องมีการเว้ นวรรคด้ วย) แล้ วคืนค่ ากลับ (4 คะแนน)
โจทย์ ข้อที่ 5 [ระดับง่ าย] จงเขียนเมท็อด fac(…) ที่สมบรณ์ู เพื่อใช้ ในการคํานวณหาค่ าแฟกทอเรี ยล
(Factorial) ของตัวเลขจํานวนเต็มที่ระบุ เช่ น fac(3) = 6, fac(5) = 120 เป็ นต้ น (10 คะแนน)
© สงวนลิขสิทธิ์ พฤศจิกายน 2553 (ปรับปร ุงครัง้ ที่ 7 ฉบับใช้ติวภาค 2/2553) เรียบเรียงโดย วงศ์ยศ เกิดศรี (แบงค์)
Methods - 08 Computer Programming using Java 101
โจทย์ ข้อที่ 10 [ระดับยาก] จงเขียนเมท็อด appendArray(…) เพื่อรั บพารามิเตอร์ สองค่ าที่เป็ นอาเรย์
ชนิ ด จํ า นวนเต็ ม ทั ง้ ค่ ู แ ล้ วคื น ค่ า เป็ นอาเรย์ ชนิ ด จํ า นวนเต็ ม ที่ เ กิ ด จากการเอาข้ อ มลในอาเรย์
ู ข อง
พารามิเตอร์ ตัวที่สองไปต่ อท้ ายตัวที่หนึ่ง เช่ น a[] = {1, 2, 3 } และ b[] = {5, 6} จะได้ ผลลัพธ์
ดังนี ้ appendArray(a, b) = {1, 2, 3, 5, 6} เป็ นต้ น (10 คะแนน)
โจทย์ ข้อที่ 11 [ระดับง่ าย] จงเขียนคําสั่งการเรี ยกใช้ งานเมท็อด จากหัวเมท็อดที่กาํ หนดให้ ต่อไปนี ้ โดย
สามารถกําหนดค่ าของพารามิเตอร์ ของเมท็อดที่เรียกใช้ ได้ อย่ างอิสระ (10 คะแนน)
ข้ อ หัวเมท็อด เขียนคําสั่งเพื่อเรียกใช้ งานเมท็อด
1. public static void set(int m, int n)
© สงวนลิขสิทธิ์ พฤศจิกายน 2553 (ปรับปร ุงครัง้ ที่ 7 ฉบับใช้ติวภาค 2/2553) เรียบเรียงโดย วงศ์ยศ เกิดศรี (แบงค์)
Methods - 08 Computer Programming using Java 103
ข้ อ หัวเมท็อด เขียนคําสั่งเพื่อเรียกใช้ งานเมท็อด
4. public static int[] get(int m, String s)
โจทย์ ข้อที่ 12 [ระดับง่ าย – ระดับยาก] จงเขียนเมท็อดต่ างๆ ในคลาส ArrayUtility ให้ สมบรณ์
ู เพื่อใช้
ประมวลผลกั บ อาเรย์ โดยมี ร ายละเอีย ดของเมท็อดดัง ต่ อไปนี ้ และกํา หนดให้ เ มท็อดแต่ ล ะเมท็อ ด
สามารถเรี ยกใช้ งานซึ่งกันและกันได้ อย่ างอิสระ (75 คะแนน)
import java.util.Scanner;
public class ArrayUtility {
//[ระดับง่ าย] เมท็อด main(…) เพื่อเรียกใช้ งานเมท็อดอื่นๆ ให้ ครบถ้ วนพร้ อมทัง้ แสดงผลลัพธ์ ขึน้ บน
จอภาพให้ สวยงาม โดยสามารถกําหนดค่ าพารามิเตอร์ ของแต่ ละเมท็อดได้ อย่ างอิสระ (5 คะแนน)
public static void main(String[] args) {
int a[] = { 5, 1, 6, 1, 4, 1, 2, 1, 4, 3, 1, 5, 7, 2, 1, 1 };
sort(a);
System.out.println(max(a)); ตัวอย่ างการเรียกใช้ เมท็อดพร้ อมทัง้ การแสดงผล
System.out.println(min(a));
ข้ อ เขียนคําสั่งเพื่อเรียกใช้ งานเมท็อด เมท็อดที่เรียก
1. count(…)
2. mode(…)
3. majority(…)
4. median(…)
5. range(…)
} //End of main
© สงวนลิขสิทธิ์ พฤศจิกายน 2553 (ปรับปร ุงครัง้ ที่ 7 ฉบับใช้ติวภาค 2/2553) เรียบเรียงโดย วงศ์ยศ เกิดศรี (แบงค์)
104 Computer Programming using Java 08 - Methods
© สงวนลิขสิทธิ์ พฤศจิกายน 2553 (ปรับปร ุงครัง้ ที่ 7 ฉบับใช้ติวภาค 2/2553) เรียบเรียงโดย วงศ์ยศ เกิดศรี (แบงค์)
Methods - 08 Computer Programming using Java 105
//[ระดับยาก] เมท็อด mode(…) ใช้ หาค่ าฐานนิยม โดยจะคืนค่ าสมาชิกในอาเรย์ ท่ ีมีค่าความถี่สูงสุด
หรือปรากฎจํานวนครัง้ มากที่สุด ถ้ ามีหลายค่ าให้ คืนค่ าใดก็ได้ เพียงค่ าเดียว (10 คะแนน)
//[ระดับยาก] เมท็อด majority(…) ใช้ หาค่ าหม่ ูมาก โดยจะคืนค่ าสมาชิกในอาเรย์ ท่ มี ีค่าความถี่มาก
กว่ าครึ่งหนึ่งของจํานวนสมาชิกทัง้ หมด ถ้ าหาไม่ ได้ ให้ คืนค่ า -1 (10 คะแนน)
//[ระดับปานกลาง] เมท็อด median(…) ใช้ หาค่ ามัธยฐาน พร้ อมทัง้ คืนค่ ากลับ (10 คะแนน)
© สงวนลิขสิทธิ์ พฤศจิกายน 2553 (ปรับปร ุงครัง้ ที่ 7 ฉบับใช้ติวภาค 2/2553) เรียบเรียงโดย วงศ์ยศ เกิดศรี (แบงค์)
106 Computer Programming using Java 08 - Methods
//[ระดับง่ าย] เมท็อด min(…) ใช้ หาค่ าตํ่าสุดของสมาชิกในอาเรย์ พร้ อมทัง้ คืนค่ ากลับ (5 คะแนน)
//[ระดับง่ าย] เมท็อด range(…) ใช้ หาค่ าพิสัยของอาเรย์ พร้ อมทัง้ คืนค่ ากลับ (5 คะแนน)
} //End of class
1 import java.io.*;
2 import java.util.Scanner;
3 import jlab.graphics.DWindow;
4 public class OneMainOneMethod {
5 public static void main(String[] args) {
6 Scanner kb = new Scanner(System.in);
7
8 System.out.print("Enter a[] size: ");
9 int x = kb.nextInt();
10 int a[] = new int[x];
11 for (int i = 0; i < a.length; i++) {
12 System.out.print("Enter member: ");
13 a[i] = kb.nextInt();
14 }
15
16 System.out.print("Enter b[] size: ");
17 int y = kb.nextInt();
18 int b[] = new int[y];
19 for (int i = 0; i < b.length; i++) {
20 System.out.print("Enter member: ");
21 b[i] = kb.nextInt();
22 }
23
24 System.out.print("Check array equals before sort: ");
25 if (a.length == b.length) {
26 int count = 0;
27 for (int i = 0; i < a.length; i++) {
28 if (a[i] == b[i]) count++;
29 }
30 if (count == a.length) {
31 System.out.println("equals");
32 } else {
33 System.out.println("not equals");
34 }
35 } else {
36 System.out.println("not equals");
37 }
38
39 for (int i = a.length - 1; i >= 1; i--) {
40 for (int j = 0; j < i; j++) {
41 if (a[j] > a[j + 1]) {
42 int t = a[j];
43 a[j] = a[j + 1];
44 a[j + 1] = t;
45 }
46 }
47 }
© สงวนลิขสิทธิ์ พฤศจิกายน 2553 (ปรับปร ุงครัง้ ที่ 7 ฉบับใช้ติวภาค 2/2553) เรียบเรียงโดย วงศ์ยศ เกิดศรี (แบงค์)
108 Computer Programming using Java 08 - Methods
เขียนโปรแกรมใหม่ โดยแบ่ งออกเป็ นเมท็อดย่ อย (ประมาณ 5-6 เมท็อด รวมเท็อด main(…) แล้ ว) โดย
วิธีการแบ่ งเมท็อดย่ อยให้ พจิ ารณาจากสัดส่ วนการทํางานย่ อยของโปรแกรมเดิม
import java.util.Scanner;
public class OneMainManyMethods { คะแนนจะแปรผันไปตามโปรแกรมและเมท็อดที่ออกแบบ
© สงวนลิขสิทธิ์ พฤศจิกายน 2553 (ปรับปร ุงครัง้ ที่ 7 ฉบับใช้ติวภาค 2/2553) เรียบเรียงโดย วงศ์ยศ เกิดศรี (แบงค์)
Methods - 08 Computer Programming using Java 109
} //End of class
© สงวนลิขสิทธิ์ พฤศจิกายน 2553 (ปรับปร ุงครัง้ ที่ 7 ฉบับใช้ติวภาค 2/2553) เรียบเรียงโดย วงศ์ยศ เกิดศรี (แบงค์)
110 Computer Programming using Java 08 - Methods
2. ข้ อสังเกตเกี่ยวกับเมท็อดหลายแบบในชื่อเดียวกัน
1) เมท็อดแต่ละเมท็อดจะมีประเภทข้ อมูลที่สง่ กลับ (Return Type) ที่ตา่ งกันหรื อเหมือนกันก็ได้ (ไม่ต้องไป
สนใจ และไม่ใช่เป็ นประเด็นที่จะใช้ พิจารณาเมท็อดประเภทนี ้)
2) การเปรี ยบเทียบความเหมือนหรื อไม่เหมือนของพารามิเตอร์ ของแต่ละเมท็อด ให้ พิจารณาที่ประเภทข้ อมูล
ของพารามิเตอร์ เท่านัน้ ไม่ได้ พิจารณาที่ชื่อของพารามิเตอร์ แต่อย่างใด (ต่างเมท็อดกันชื่อเหมือนกันได้ )
3) ระบบจะเลือกเมท็อดที่เหมาะสมที่สดุ เพียงเมท็อดเดียวขึ ้นมาใช้ งาน ถ้ าไม่มีเมท็อดใดเลยที่เหมาะสมจะ
แปลผลไม่ผา่ น (Compile-time Error)
โจทย์ ข้อที่ 14 [ระดับง่ าย] จงเลือกใช้ เมท็อดหลายแบบในชื่อเดียวกัน (Overloading Method) ที่เหมาะสม
ที่สุดจากคําสั่งต่ อไปนี ้ พร้ อมทัง้ แสดงผลลัพธ์ ท่ เี กิดจากคําสั่งนัน้ (15 คะแนน)
หมายเลขเมท็อด รายละเอียดของเมท็อด
public static double m(int n) {
1 return n * n;
}
public static int m(double n) {
2 return (int)(n * n);
}
public static boolean m(int n, int x) {
3 return n == x;
}
public static double m(int a, int b, int c) {
4 return (double)(a * b * c);
}
public static int m(char c) {
5 return (int) c;
}
public static String m(double n, int x) {
6 return n + "" + x;
}
public static int m(double x, double n) {
7 return (int)(n * x);
}
© สงวนลิขสิทธิ์ พฤศจิกายน 2553 (ปรับปร ุงครัง้ ที่ 7 ฉบับใช้ติวภาค 2/2553) เรียบเรียงโดย วงศ์ยศ เกิดศรี (แบงค์)
Methods - 08 Computer Programming using Java 111
ข้ อ คําสั่ง หมายเลขเมท็อด ผลลัพธ์
1. System.out.println(m(10));
2. System.out.println(m(1, 2.5));
3. System.out.println(m(11.0));
4. System.out.println(m(6.0f));
5. System.out.println(m(12, 2));
6. System.out.println(m('1'));
7. System.out.println(m(10.0, 2));
8. System.out.println(m(2, 2, 1));
9. System.out.println(m(m(5, 1, 2)));
15. System.out.println(m(1.1));
} //End of main
© สงวนลิขสิทธิ์ พฤศจิกายน 2553 (ปรับปร ุงครัง้ ที่ 7 ฉบับใช้ติวภาค 2/2553) เรียบเรียงโดย วงศ์ยศ เกิดศรี (แบงค์)
112 Computer Programming using Java 08 - Methods
} //End of class
© สงวนลิขสิทธิ์ พฤศจิกายน 2553 (ปรับปร ุงครัง้ ที่ 7 ฉบับใช้ติวภาค 2/2553) เรียบเรียงโดย วงศ์ยศ เกิดศรี (แบงค์)