Skip to Content
CoursesCSC102แปลงปีเป็นศตวรรษ

แปลงปีเป็นศตวรรษ

โจทย์

รับค่าปีค.ศ. มาแล้วแปลงออกมาเป็นศตวรรษพร้อมกับคำต่อท้ายตัวเลข

InputOutput
202421st
190019th
190120th
312432nd
422443rd

โค้ด

โค้ดตามขอบเขตในคลาสเรียน

import java.util.Scanner; public class Main { public static void main (String[] args) { Scanner scanner = new Scanner(System.in); int year = scanner.nextInt(); int century = (int) Math.ceil(year / 100.0); String suffix = ""; if (century >= 11 && century <= 19) { suffix = "th"; } else { switch (century % 10) { case 1: suffix = "st"; break; case 2: suffix = "nd"; break; case 3: suffix = "rd"; break; default: suffix = "th"; break; } } System.out.println(century + suffix); } }

โค้ดนอกเหนือจากคลาสเรียน

import java.util.Scanner; public class Main { public static void main (String[] args) { Scanner scanner = new Scanner(System.in); int year = scanner.nextInt(); int century = (int) Math.ceil(year / 100.0); String suffix = ""; if (century >= 11 && century <= 19) { suffix = "th"; } else { suffix = switch (century % 10) { case 1 -> "st"; case 2 -> "nd"; case 3 -> "rd"; default -> "th"; }; } System.out.println(century + suffix); } }

คำอธิบาย

คำอธิบายโค้ดตามขอบเขตในคลาสเรียน

ขั้นตอนที่ 1: การนำเข้าไลบรารี

import java.util.Scanner;
  • บรรทัดนี้เป็นการนำเข้าไลบรารีที่ชื่อว่า Scanner
  • Scanner เป็นเครื่องมือที่ช่วยให้เราสามารถรับข้อมูลจากผู้ใช้ได้
  • เปรียบเสมือนการหยิบเครื่องรับสัญญาณที่สามารถรับคำสั่งจากเราได้มาเตรียมไว้

ขั้นตอนที่ 2: การสร้างคลาส

public class Main { // โค้ดอื่นๆ จะอยู่ในนี้ }
  • class Main คือการสร้างกล่องใหญ่ที่จะเก็บโค้ดทั้งหมดของเรา
  • คิดเหมือนกับการสร้างห้องทำงานที่ชื่อว่า “Main” ที่เราจะใช้คำนวณศตวรรษ

ขั้นตอนที่ 3: การสร้างเมธอดหลัก

public static void main (String[] args) { // โค้ดหลักจะอยู่ในนี้ }
  • นี่คือจุดเริ่มต้นของโปรแกรมของเรา
  • เปรียบเสมือนประตูทางเข้าของห้องทำงาน เมื่อเราเปิดโปรแกรม มันจะเริ่มทำงานจากตรงนี้

ขั้นตอนที่ 4: การสร้างตัวรับข้อมูล

Scanner scanner = new Scanner(System.in);
  • เราสร้างเครื่องมือที่ชื่อว่า scanner เพื่อรับข้อมูลจากผู้ใช้
  • คิดเหมือนกับการเตรียมปากกาและกระดาษไว้พร้อมจดบันทึกปีที่ผู้ใช้จะบอกเรา

ขั้นตอนที่ 5: การรับปีและคำนวณศตวรรษ

int year = scanner.nextInt(); int century = (int) Math.ceil(year / 100.0);
  • เราใช้ scanner เพื่ออ่านปีที่ผู้ใช้พิมพ์เข้ามา และเก็บไว้ในตัวแปร year
  • จากนั้นคำนวณศตวรรษโดยหารปีด้วย 100 และปัดเศษขึ้น
  • Math.ceil() ใช้สำหรับปัดเศษขึ้น
  • (int) ใช้เพื่อแปลงผลลัพธ์ให้เป็นจำนวนเต็ม
  • เปรียบเสมือนการรับปีจากผู้ใช้ แล้วคำนวณว่าปีนั้นอยู่ในศตวรรษที่เท่าไร

ขั้นตอนที่ 6: การกำหนดคำลงท้าย

String suffix = ""; if (century >= 11 && century <= 19) { suffix = "th"; } else { switch (century % 10) { case 1: suffix = "st"; break; case 2: suffix = "nd"; break; case 3: suffix = "rd"; break; default: suffix = "th"; break; } }
  • เราสร้างตัวแปร suffix เพื่อเก็บคำลงท้ายของศตวรรษ
  • ถ้าศตวรรษอยู่ระหว่าง 11 ถึง 19 ใช้ “th” เสมอ
  • สำหรับศตวรรษอื่นๆ เราใช้ switch เพื่อตรวจสอบตัวเลขหลักสุดท้าย:
  • ถ้าลงท้ายด้วย 1 ใช้ “st”
  • ถ้าลงท้ายด้วย 2 ใช้ “nd”
  • ถ้าลงท้ายด้วย 3 ใช้ “rd”
  • กรณีอื่นๆ ใช้ “th”
  • เปรียบเสมือนการเลือกป้ายที่เหมาะสมเพื่อติดท้ายตัวเลขศตวรรษ

ขั้นตอนที่ 7: การแสดงผลลัพธ์

System.out.println(century + suffix);
  • เราแสดงผลลัพธ์โดยนำ century และ suffix มาต่อกัน
  • เปรียบเสมือนการนำตัวเลขศตวรรษมาติดกับป้ายที่เราเลือกไว้ แล้วแสดงให้ผู้ใช้เห็น

โค้ดนอกเหนือจากคลาสเรียน

ความแตกต่างและเหตุผล:

suffix = switch (century % 10) { case 1 -> "st"; case 2 -> "nd"; case 3 -> "rd"; default -> "th"; };
  1. รูปแบบ Switch Expression:
  • ข้อดี: โค้ดกระชับและอ่านง่ายกว่า ไม่จำเป็นต้องใช้ break ในแต่ละ case
  1. การกำหนดค่า:
  • โค้ดทางเลือกกำหนดค่า suffix โดยตรงจาก switch expression
  • ข้อดี: ลดความซ้ำซ้อนของโค้ด ไม่ต้องกำหนดค่า suffix = "" ก่อน
ปรับปรุงล่าสุด