แปลงปีเป็นศตวรรษ
โจทย์
รับค่าปีค.ศ. มาแล้วแปลงออกมาเป็นศตวรรษพร้อมกับคำต่อท้ายตัวเลข
| Input | Output |
|---|---|
| 2024 | 21st |
| 1900 | 19th |
| 1901 | 20th |
| 3124 | 32nd |
| 4224 | 43rd |
โค้ด
โค้ดตามขอบเขตในคลาสเรียน
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";
};- รูปแบบ Switch Expression:
- ข้อดี: โค้ดกระชับและอ่านง่ายกว่า ไม่จำเป็นต้องใช้
breakในแต่ละ case
- การกำหนดค่า:
- โค้ดทางเลือกกำหนดค่า
suffixโดยตรงจาก switch expression - ข้อดี: ลดความซ้ำซ้อนของโค้ด ไม่ต้องกำหนดค่า
suffix = ""ก่อน
ปรับปรุงล่าสุด