Skip to Content
Javaสรุปเนื้อหาสรุปก่อนสอบครั้งที่ 1

สรุปก่อนสอบครั้งที่ 1 (Week #5)

โครงสร้างโปรแกรมจาวา

// การคอมเมนต์แบบบรรทัดเดียว โปรแกรมจะไม่รันส่วนคอนเมนต์ /* การคอมเมนต์แบบหลายบรรทัด โปรแกรมจะไม่รันส่วนคอนเมนต์เหมือนกัน */ public class MyProgram // ส่วนหัวของ Class { // เริ่มส่วนตัวของ Class // Method ชื่อ main ภายใน Class ชื่อ MyProgram public static void main(String[] args) // เริ่มส่วนหัวของ Method { } // จบส่วนตัวของ Method } // จบส่วนตัวของ Class

ชนิดข้อมูลพื้นฐาน (Primitive Data Type)

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

ชนิดข้อมูลเก็บตัวเลขจำนวนเต็ม

  • byte
  • short
  • int (โดยปกติใช้ตัวแปรนี้ ในการเก็บตัวเลขประเภทนี้)
  • long (หากคำนวณเลขเยอะมาก ๆ ควรใช้ตัวนี้)

ชนิดข้อมูลเก็บตัวเลขทศนิยม

  • float (โดยปกติใช้ตัวแปรนี้ ในการเก็บตัวเลขประเภทนี้) เช่น 123.45f 123.45
  • double (หากตัองการความเม่นยำในการคำนวณจุดทศนิยมสูง ๆ ควรใช้ตัวนี้) เช่น 123.45

ชนิดข้อมูลเก็บตัวอักษร

  • char (ข้อควรระวัง: ชนิดข้อมูลนี้สามารถเก็บตัวอักษรได้ตัวเดียว เช่น 'A' และ 'ก' โดยใช้เครื่องหมาย Single Quote ' ล้อมรอบตัวอักษร)

ชนิดข้อมูลเก็บค่าจริงเท็จ

  • boolean (สามารถเก็บค่าจริงเท็จได้ 2 ค่าเท่านั้น คือ true, false)

ตัวดำเนินการ (Operators)

  • + บวก, - ลบ, * คุณ, / หาร, % เอาเศษจากการหาร
  • < น้อยกว่า, <= น้อยกว่าหรือเท่ากับ, > มากกว่า, >= มากกว่า, == เท่ากับ, != ไม่เท่ากับ
  • ! นิเสธ
  • && & และ (ส่วนมากใช้ &&)
  • || หรือ

ตัวดำเนินการกำหนดค่า (Assignment Operators)

ตัวดำเนินการตัวอย่างการใช้งานเทียบเท่ากับตัวดำเนินการตัวอย่างการใช้งานเทียบเท่ากับ
+=x += yx = x + y/=x /= yx = x / y
-=x -= yx = x - y%=x %= yx = x % y
*=x *= yx = x * y

การเพิ่มและการลด (Increment & Decrement)

  • Prefix เพิ่มหรือลดจำนวนทีละ 1 เข้าไปก่อนค่อยใช้งาน เช่น ++count
  • Postfix เพิ่มหรือลดจำนวนทีละ 1 เข้าไปหลังใช้งานเสร็จแล้ว เช่น count++

ความแตกต่างระหว่าง Prefix และ Postfix

int num1 = 1, num2 = 1; int num3 = ++num1 + 2; // ตอนแรก num1 มีค่าเป็น 1 แต่ใช้ Prefix เพิ่มค่าเข้าไปก่อนใช้งาน บรรทัดจึงกลายเป็น 2 + 2 System.out.println(num3); //num3 = 4 System.out.println(num1); //num1 = 2 int num4 = num2++ + 2; // ตอนแรก num2 มีค่าเป็น 1 แต่ใช้ Postfix เพิ่มค่าเข้าไปหลังใช้งาน บรรทัดจึงยังเป็น 1 + 2 System.out.println(num4); //num4 = 3 System.out.println(num2); //num2 = 2

การอ่านอินพุต (Scanner)

ก่อนการใช้งาน Scanner ทุกครั้งต้องนำเข้าการใช้งานก่อนเสมอ import java.util.Scanner; เวลาใช้ให้สร้างตัวแปรเพื่อมาเก็บ เช่น Scanner sc = new Scanner(System.in); และเวลาเรียกใช้งาน สามารถเรียกจากตัวแปรที่เรากำหนดไว้ เช่น answer = sc.nextLine();

  • sc.next() - รับค่าข้อความ 1 คำ (String)
  • sc.nextLine() - รับค่าข้อความ 1 บรรทัด (String)
  • sc.nextInt() - รับค่าตัวเลขจำนวนเต็ม (Int)
  • sc.nextFloat() - รับค่าตัวเลขทศนิยม (Float)
  • sc.nextDouble() - รับค่าตัวเลขทศนิยม (Double)

สตริง (String)

สตริงแต่ไม่จัดอยู่ในชนิดข้อมูลพื้นฐาน แต่มันเป็นชื่อ Class ในจัดเป็นตัวแปรชนิด object ที่สามารถเรียก Method ได้ สามารถสร้างสตริงได้ 2 วิธี คือ String variable = "text" และ String variable = new String("text")

int score [ 30 ] String text [ ] ---> "Some text"

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

การเปรียบเทียนสตริง

เนื่องจากสตริงเป็นตัวแปร objects เมื่อเปรียบเทียบข้อความควรใช้เมธอด equals() เช่น text1.equals(text2) แทน หรือหากไม่ต้องการเทียบพิมพ์ใหญ่ - เล็กใช้เมธอด equalsIgnoreCase() เช่น text1.equalsIgnoreCase(text2)

เมธอดในสตริง

สังเกตุโครงสร้างของเมธอดให้สังเกตุว่ามันบอก ค่าพารามิเตอร์และชนิดข้อมูล ที่มันต้องการ และ ชนิดข้อมูลที่มันจะได้กลับเมื่อเรียกใช้เมธอดนี้ แล้ว เช่น public String concat(String index) หมายถึง

  • เมธอดชื่อ concat
  • รับค่าพารามิเตอร์ 1 ตัว คือ index ที่มีชนิดข้อมูลเป็น String (สังเกตุในวงเล็บหลังชื่อเมธอด)
  • เมื่อเรียกใช้งานแล้วจะคืนค่าชนิดข้อมูล String กลับมา (สังเกตุก่อนชื่อเมธอด)

public int length()

ความยาวข้อความ เช่น กำหนดตัวแปร String text = "HelloWorld";

  • text.length() ได้ค่า 10 มาเพราะมี 10 ตัวอักษรในข้อความนี้

public char charAt(int index)

เอาตัวอักษรที่ตำแหน่ง index เช่น กำหนดตัวแปร String text = "HelloWorld";

  • text.charAt(0) หมายถึงเอกตัวอักษรแรก
  • text.charAt(text.length() - 1) หมายถึงเอกตัวอักษรตัวสุดท้าย (หมายเหตุ: ต้อง - 1 เพราะว่า charAt ใช้ตำแหน่ง index ซึ่งเรื่มที่ 0 แต่เมธอด length จะได้ค่าจำนวนนับเริ่มที่ 1)

public int indexOf(String str)

หาตำแหน่งข้อความ str ที่เจอตัวแรกเริ่มจากตำแหน่งแรกของข้อความ เช่น กำหนดตัวแปร String text = "HelloWorld";

  • text.indexOf("o") ได้ค่า 4 เพราะเจอ o ตัวแรกที่ตำแหน่งนั้นของข้อความ

public int indexOf(String str, int fromIndex)

หาตำแหน่งข้อความ str ที่เจอตัวแรกเริ่มจากตำแหน่ง fromIndex เป็นต้นไป เช่น กำหนดตัวแปร String text = "HelloWorld";

  • text.indexOf("o", 5) ได้ค่า 6 เพราะเจอ o ตัวแรกที่ตำแหน่งนั้นของข้อความ เมื่อเริ่มหาตั้งแต่ตำเแหน่งที่ 5

public int substring(int beginIndex, int endIndex)

สกัดส่วนของข้อความเริ่มจากตำแหน่ง beginIndex ถึงก่อนตำแหน่ง endIndex และไม่จำเป็นต้องใส่ endIndex ก็ได้ เช่น กำหนดตัวแปร String text = "HelloWorld";

  • text.substring(5) ได้ค่า World เพราะเริ่มสกัดตั้งแต่ตำแหน่งที่ 5 ซึ่งเป็นตัว W ไปเรื่อย ๆ จนจบคำ
  • text.substring(5, 7) ได้ค่า Wo เพราะเริ่มสกัดตั้งแต่ตำแหน่งที่ 5 ซึ่งเป็นตัว W ไปเรื่อย ๆ จนถึงตำแหน่งที่ 7 - 1 ซึ่งเป็นตัว o
  • text.substring(text.length() - 3, text.length()) ได้ค่า rld เพราะเริ่มสกัดตั้งแต่ตำแหน่งที่ 10 - 3 ซึ่งเป็นตัว r ไปเรื่อย ๆ จนจบข้อความ

หมายเหตุ: text.length() เป็นจำนวนนับตั้งแต่ 1 เหมือนมาใส่ในพารามิเตอร์ endIndex ซึ่งเป็น Index ก่อนจบการสกัด จึงสามารถใส่ได้เลยโดยไม่ต้อง -1 ก่อน

public int compareTo(String anotherString)

public int compareToIgnoreCase(String anotherString)

ตรวจสอบว่าข้อความในสตริงมาก่อนหรือหลังในระบบตัวอักษรตามตารางด้านล่าง

CharactersUnicode Values
0 - 948 ถึง 57
A - Z65 ถึง 90
a - z97 ถึง 122

ตัวอย่างการใช้งาน text1.compareTo(name2)

  • ถ้า 2 ข้อความเหมือนกันจะได้ค่า 0 กลับมา
  • ถ้าข้อความ name1 มาก่อนจะได้ ค่าติดลบ กลับมา
  • ถ้าข้อความ name1 มาหลังจะได้ ค่าบวก กลับมา
  • เมธอดจะตรวจสอบทีละตำแหน่งถ้าเหมือนกันเกือบหมด แต่ความยาวไม่เหมือนกัน มันจะบอกค่าความต่างความยาวแทน
String text1 = "A", text2 = "A"; System.out.println(text1.compareTo(text2)); // ได้ค่า 0 เพราะข้อความเท่ากัน String text3 = "A", text4 = "B"; System.out.println(text3.compareTo(text4)); // ได้ค่า -1 เพราะในข้อความ text3 ตัว A มาก่อนตัว B ในข้อความ text4 ทั้งหมด 1 ตำแหน่ง String text5 = "D", text6 = "A"; System.out.println(text5.compareTo(text6)); // ได้ค่า 3 เพราะในข้อความ text5 ตัว D มาหลังตัว A ในข้อความ text6 ทั้งหมด 3 ตำแหน่ง String text7 = "ADDC", text8 = "AD"; System.out.println(text7.compareTo(text8)); // ได้ค่า 2 เพราะตัวอักษร 2 ตัวแรกเหมือนกัน แต่ความยาวข้อความ text7 มากกว่า 2 ตัวอักษร String text9 = "AD", text10 = "ADDC"; System.out.println(text9.compareTo(text10)); // ได้ค่า -2 เพราะตัวอักษร 2 ตัวแรกเหมือนกัน แต่ความยาวข้อความ text10 มากกว่า 2 ตัวอักษร

เงื่อนไข If-Else

หมายเหตุ: สามารถใช้ if โดด ๆ ได้โดยไม่จำเป็นต้องมี else และสามารถใช้ if และ else if พร้อมกัน โดยไม่จำเป็นต้องมี else

if (a) { // ถ้า a เป็นจริงโค้ดในนี้ทำงาน } else if (b) { // ถ้า a เป็นเท็จ แล้วถ้า b เป็นจริงโค้ดในนี้ทำงาน } else { // ถ้า a และ b เป็นเท็จโค้ดในนี้ทำงาน }

เงื่อนไข Switch

switch (ตัวแปรที่ต้องการตรวจสอบ) { case ค่าที่ 1: // โค้ดที่จะทำงานเมื่อตัวแปรมีค่าเท่ากับค่าที่ 1 break; case ค่าที่ 2: case ค่าที่ 3: // โค้ดที่จะทำงานเมื่อตัวแปรมีค่าเท่ากับค่าที่ 2 หรือ 3 break; // ... cases อื่นๆ ... default: // โค้ดที่จะทำงานเมื่อไม่ตรงกับ case ใดเลย }
int number = 1; switch (day) { case 1: System.out.println("หนึ่ง"); break; case 2: System.out.println("สอง"); break; case 3: System.out.println("สาม"); default: System.out.println("เลขอื่น ๆ ไม่รองรับ"); }

หมายเหตุ: อย่าลืม break: ถ้าไม่ใส่ break โปรแกรมจะทำงานต่อไปยัง case ถัดไปโดยไม่ตรวจสอบเงื่อนไข

การลูปและการทำงานซ้ำ

While Loop

while (condition) { //ทำงานไปเรื่อย ๆ จนกว่า condition จะเป็นเท็จ }

Do-While Loop

do { //ทำงานก่อนโดยไม่สนเงื่อนไขอย่างน้อย 1 รอบ แล้วทำงานไปเรื่อย ๆ จนกว่า condition จะเป็นเท็จ } while (condition);

For Loop

for (initialization; condition; increment) { //โค้ดจะทำงานจน condition เป็นเท็จ }
  • initialization ส่วนนี้จะทำงานก่อนเริ่มลูป
  • increment ส่วนนี้จะทำงานหลังจบการทำงานของลูปทุกรอบ
for (int i = 0; i < 100; i++) { //กำหนดตัวแปร i เป็น 0 ก่อนเริ่มลูปนอก //ลูปทำงานไปเรื่อย ๆ จนกว่าเงื่อนไข i < 100 เป็นเท็จ //เมื่อจบลูปแต่ละรอบให้ i++ for (int j = 100; j > 0; j--) { //กำหนดตัวแปร j เป็น 100 ก่อนเริ่มลูปใน //ลูปทำงานไปเรื่อย ๆ จนกว่าเงื่อนไข j > 0 เป็นเท็จ //เมื่อจบลูปแต่ละรอบให้ j-- } }

การจบการทำงานลูปในทันที Break

for (int i = 0; i < 10; i++) { // ลูปเริ่มตั้งแต่ i เท่ากับ 0 if (i == 5) { break; //เมื่อ i เป็น 5 ให้จบการทำงานของลูปนี้ในทันที และจะไม่เริ่มรอบใหม่แล้ว } System.out.print(i + " "); // จะได้ค่า 0 1 2 3 4 }

การทำต่อการทำงานลูปในทันที Continue

for (int i = 0; i < 10; i++) { // ลูปเริ่มตั้งแต่ i เท่ากับ 0 จนถึง 9 if (i % 2 == 0) { continue; //เมื่อ i หารสองลงตัว ให้ข้ามการทำงานของโค้ดในลูปไปเริ่มรอบใหม่ทันที } System.out.print(i + " "); // จะได้ค่า 1 3 5 7 9 }
ปรับปรุงล่าสุด