[Java OOP]Class และ Object คืออะไร
วันนี้มารู้จัก Class และ Object กัน ซึ่งในหัวข้อนี้มันจะเกี่ยวข้องกับเรื่อง Object-oriented programming โดยเรามาฝึกมองสิ่งที่ต่างๆเป็นวัตถุ ก่อนจะเข้าเรื่องผมขอบอกเลยว่าถ้าเข้าใจเรื่องนี้จะสามารถนำความรู้ไปประยุกต์ใช้ได้อย่างมากมายและอาจจะช่วยให้เขียนโปรแกรมได้ง่ายขึ้นอีกด้วยในบ้างกรณี
class คือ คุณลักษณะ หรือคุณสมบัติของวัตถุใดวัตถุหนึ่ง หรื่อจะง่ายๆคือเป็นตัวกำหนดคุณสมบัติได้ถูกสร้างขึ้น จะขอยกตัวอย่าง class Dog สุนัขก็จะมีคุณสมบัติ เช่น ชื่อ พันธฺุ์ และอื่นขึ้นอยู่กับคุณสมบัติของสิ่งที่เราสร้าง
หลักการเขียน class จะมีองค์ประกอบอยู่ 3 ส่วนด้วยกัน
สรุป Class และ Object
class คือ คุณลักษณะ หรือคุณสมบัติของวัตถุใดวัตถุหนึ่ง หรื่อจะง่ายๆคือเป็นตัวกำหนดคุณสมบัติได้ถูกสร้างขึ้น จะขอยกตัวอย่าง class Dog สุนัขก็จะมีคุณสมบัติ เช่น ชื่อ พันธฺุ์ และอื่นขึ้นอยู่กับคุณสมบัติของสิ่งที่เราสร้าง
หลักการเขียน class จะมีองค์ประกอบอยู่ 3 ส่วนด้วยกัน
- คุณสมบัติ(Field) คือ ตัวแปรที่เราจะสร้างให้กับคุณสมบัติ
- คอนทรักเจอร์(Constructor) คือ เป็นกำหนดการรูปแบบการเรียกใช้ Class
- เมทธอต(Method) คือ ฟังชั่นก์ หรือ เหตุการณ์ เช่น การตั้งชื่อให้กับสนัข การกำหนดสายพันธุ์ หรือ จะใส่เหตุการณ์ต่างๆก็ได้เช่น การกิน นอน เดินเล่น เห่า เป็นต้น
ให้เรานึกถึงความเป็นจริงในชีวิตของเราว่าสนัขควรมีคุณสมบัติอะไรบ้าง ในที่นี่จะให้สุนัขมีคุณสมบัติ คือ มีชื่อ มีสายพันธฺุ์ มีเมทธอต คือ ตั้งชื่อสุนัขได้ กำหนดสายพันธฺุ์ได้ และสามารถเรียกดู ชื่อ กับ สายพันธุ์ ได้ด้วย
/* * @author http://javaagkasit.blogspot.com */ public class Dog { //กำหนดคุณสมบัติ(Field) String Name; String Breed; //คอนทรักเจอร์(Constructor) Dog(){ } // เมทธอต สำหรับ กำหนดชื่อสุนัข public void setName(String name){ Name = name; } // เมทธอต สำหรับ กำหนดสายพันธุ์ public void setBreed(String breed){ Breed = breed; } // เมทธอต สำหรับไว้ให้เรียกดูชื่อสุนัข public String getName(){ return Name; } // เมทธอต สำหรับไว้ให้เรียกดูสายพันธุ์สุนัข public String getBreed(){ return Breed; } }เมื่อสร้างคลาสเสร็จ เรามาลองเรียกใช้งานคลาส Dog เราจะได้ทราบว่า Object มันคืออะไรกันแน่
/** *class สำหรับ ทดสอบ class Dog * @author http://javaagkasit.blogspot.com */ public class TestDog { public static void main(String [] args){ Dog d = new Dog(); //สุนักตัวที่ 1 d.setName("มี่มี้"); // ตั้วชื่อว่า มี่มี้ d.setBreed("ชิวาวา"); // สุนักพันธุ์ ชิวาวา Dog d2 = new Dog(); //สุนักตัวที่ 2 d2.setName("ก้าน"); // ตั้วชื่อว่า ก้าน d2.setBreed("บางแก้ว"); // หมาพันธุ์ บางแก้ว System.out.println("สุนักตัวที่ 1"); System.out.println(" ชื่อ :"+d.getName()); System.out.println("พันธุ์ :"+d.getBreed()); System.out.println("สุนักตัวที่ 2"); System.out.println(" ชื่อ :"+d2.getName()); System.out.println("พันธุ์ :"+d2.getBreed()); } }
เวลาเราจะเรียกใช้ class Dog ก็จะทำการ Dog d = new Dog(); ตัว d นั้นล่ะเค้าเรียก Object ซึ่งออปเจกนี้จะมีคุณสมบัติเหมือนกับที่เรากำหนดไว้ใน class Dog ทุกประการ ในหนึ่งออปเราจะมองให้เป็นวัตถุอย่าง ซึ่ง ออปเจก d ที่เราได้ new เราจะมองเป็นสนุกหนึ่งต้ว
Dog d = new Dog(); //สุนักตัวที่ 1 d.setName("มี่มี้"); // ตั้วชื่อว่า มี่มี้ d.setBreed("ชิวาวา"); // สุนักพันธุ์ ชิวาวา
เป็นการสร้าง ออปเจก สุนัข มาหนึ่งตัว แล้วก็ตั้งชื่อให้มัน โดยการ d.setName("มี่มี้"); แล้วก็ระบุสายพันธุ์ให้มันโดยการ d.setBreed("ชิวาวา"); จะเห็นว่าการที่จะเรียกใช้เมทธอตใน class Dog ได้โดยการใช้ "." พอเรากำหนดชื่อ สายพันธุ์ อยากจะแสดงรายของสุนัขตัวนี้( ออปเจก d)ก็ทำได้ไดย
System.out.println("สุนักตัวที่ 1"); System.out.println(" ชื่อ :"+d.getName()); System.out.println("พันธุ์ :"+d.getBreed());
ผลการรันโปรแกรม
สรุป Class และ Object
Class เป็นการกำหนดคุณสมบัติของวัตถุสิ่งใดสิ่งหนึ่ง และObject ก็เป็นการเรียกใช้ Class นั้นๆโดยที่ object นั้นๆจะมีคุณสมบัติเหมือนกับ class ที่เรียกใช้ทุกประการ
เรื่องที่ควรศึกษาเพิ่มเติม - การใช้งาน Constructor
[Java]การใช้ while loop
คำสั่ง while loop เป็นคำสั่งสำหรับวนลูปอีกแบบจะมีเงื่อนไขการทำงานอยู่ว่า ถ้าเงื่อนไขเป็นจริงทำงานต่อไปเรื่อยๆและจะออกจากลูปเมื่อเงื่อนไขเป็นเท็จ
/**
* โปรแกรมนับเลข 1 - 10
* @author http://javaagkasit.blogspot.com
*/
public class whileloop {
public static void main(String[] args) {
int count = 1 ;
while (true) {
if(count <= 10){
System.out.println(count++);
}else{
break;
}
}
}
}
จากโค้ดด้านบนเป็นโปรแกรมนับเลข 1 ถึง 10 การทำงานก็คือว่า ในลูป while จะวนไปเรื่อยๆภายใน{}ของ while ถ้า count น้อยกว่าหรือเท่า 10 ก็จะปริํนค่า count ออกมาพร้อมทั้งเพิ่มค่า count ขึ้นที่ละหนึ่ง เมื่อใดที่ค่า count มีค่าไม่ได้อยู่ในเงื่อนไข ก็จะออกจากลูป while
ในการใช้คำสั้งวนใดๆก็ตาม จะมี 2 คำสั้งที่เกี่ยวข้อ คือ break กับ continue การใช้งานก็ง่ายนิดเดียว break คือ ออกจากลูป ส่วน continue คือทำงานต่อไป ซึ่งการใช้งานจริงส่วนใหญ่ก็เป็น break ซะมากกว่า continue
ศึกษาเพิ่มได้ที่
- การใช้ if else http://javaagkasit.blogspot.com/2012/08/if-else.html
- การสร้างโปรเจกใน NetBeans IDEhttp://javaagkasit.blogspot.com/2012/09/netbeans-ide.html
- Class และ object คืออะไร
[Java]การใช้ for-each
นอกเหนือจากการใช้ For loop แบบมี ค่าเริ่ม;เงื่อนไข;เพิ่มค่า ยังมีการวนลูปอีกแบบหนึ่งในภาษา Java คือ for - each loop โดยมีรูปแบบคำสั่งดังนี้
for(declaration : expression) {
statement
}
- declaration : เป็นการประกาศตัวแปรทั่วไป เช่น String color
- expression : จะเป็นอาร์เรย์ (array) หรือ Object
- statement : อาจจะเป็น การคำนวน การแสดงค่า(print)
แล้วมันต่างจาก for ธรรมดาอย่างไร ข้อดีของ for-each คือกรณีที่เราต้องการโชว์ข้อมูลใน Array ทั้งหมด for -each จะทำได้ง่ายกว่า อาจจะมองภาพยังไม่ออกลองดูตัวอย่างโค้ดด้านล่าง
/*
* การใช้งาน foreach
* @author http://javaagkasit.blogspot.com/
*/
public class foreach {
public static void main(String [] args){
String [] colors = {"Red","Blue","Pink","Yellow","Orange"};
//for ธรรมดา
for(int i =0 ; i< colors.length ;i++){
System.out.println(colors[i]);
}
//for -each
for(String c : colors){
System.out.println(c);
}
}
}
จากโค้ดด้านบน จะเห็นได้ว่าการใช้ for-each จะทำได้ง่ายและเร็วกว่าการใช้ for ธรรมดา แต่ในทางกลับกันในความสะดวกสะบายของ for - each ยังมีข้อเสียอยู่ ในกรณี ถ้าเราต้องการแสดงเฉพาะตำแหน่งเราต้องการโชว์ เช่น โชว์เฉพาะตำแหน่ง colors[0] จะทำไม่ได้
เนื่้อหาที่เกี่ยวข้อง
- การใช้ for http://javaagkasit.blogspot.com/2012/08/for.html
- การใช้ switch casehttp://javaagkasit.blogspot.com/2012/08/switch-case.html
- การใช้ if else http://javaagkasit.blogspot.com/2012/08/if-else.html
- การใช้ if else if http://javaagkasit.blogspot.com/2012/08/if-else-if.html
[JAVA] Inception Watch step by step
วันนี้เราจะมาทำโจทย์ Inception Watch แบบ step by step
โจทย์ Inception Watch สามารถดาวโหลดได้ที่ลิงค์ http://goo.gl/48Zvudจากบทความเดิมที่ผมเคยเขียนไว้ ACM InceptionWatchQ JAVA วิธีทำ คือ ให้คำนวณกลับจากชั้นสุดท้ายมายังชั้นแรก ในชั้นสุดท้าย (level n) จะคำนวณเวลาของ Tsk ที่ชั้นนั้นได้โดยตรง ส่วนชั้น n-1 ต้องเอาเวลาทั้งหมด(elapsed time) ของชั้น n หารด้วย 12 แล้วบวกกับ Tnext ของชั้นนั้น ก็จะได้ Tsk ของชั้น n-1
อ่านแล้วคงรู้งงๆมาลองคำนวน เพื่อจะช่วยให้เห็นภาพมากขึ้น ซึ่งมองภาพการเขียนโปรแกรมของเราได้ชัดเจนมากยิ่งขึ้นด้วย
1.การวิเคราะห์โจทย์และลองคำนวณผลลัพธ์ด้วยมือก่อนเขียนโปรแกรม
1.1 แปลงเวลาทั้งหมดให้เป็นหน่วยวินาทีทั้งหมดของทุกๆชั้น
โดยอ้างอิงจากโจทย์ตัวอย่างต่อไปนี้
1 48 m
2 6 h
3 2 d
4 24 d
-1
หน่วยเวลาทีควรรู้นะครับ
1 นาที(m) = 60 วินาที
1 ชั่วโมง(h) = 3600 วินาที ->ได้จาก 60*60
1 วัน(d) = 86400 วินาที ->ได้จาก 24*60*60
1 ปี(y) = 31536000 วินาที ->ได้จาก 365*24*60*60
ผลจากการแปลงให้อยู่ในหน่วย วินาที ก็จะได้ตัวเลขดังนี้
0 0
1 2880
2 21600
3 172800
4 2073600
1.2 การคำนวน inception watch โดยใช้สูตร
sum = sum / 12 +incept[i - 1].getNumSecond();
โดยกำหนดให้
sum คือ ตัวแปรสำหรับเก็บผลลัพธ์
Incept[i - 1].getNum() คือ จำนวนเวลาในหน่วยวินาที ในชั้นรองจากชั้นปัจจุบันที่เราอยู่
i คือ ชั้นปัจจุบันที่เราอยู่
getNumSecond () คือ เป็นฟังก์ชันก์สำหรับการดึงจำนวนเวลาในหน่วยวินาทีของชั้น i -1
Incept คือ เป็น object ที่เก็บลำดับชั้นจำนวนเวลาในวินาที
วิธีทำ
เริ่มจากชั้นที่ 5ค่า ณ ปัจจุบัน sum = 0 , Incept[i - 1].getNum() = 2073600, i = 5
แทนค่า sum = 0/ 12 + 2073600
sum = 2073600;
ชั้นที่ 4
ค่า ณ ปัจจุบัน sum = 2073600 , Incept[i - 1].getNum() = 172800 , i = 4
แทนค่า sum = 2073600 / 12 + 172800
sum = 345600
ชั้นที่ 3
ค่า ณ ปัจจุบัน sum = 345600 , Incept[i - 1].getNum() = 21600 , i = 3
แทนค่า sum = 345600 / 12 + 21600
sum = 50400
ชั้นที่ 2
ค่า ณ ปัจจุบัน sum = 50400 , Incept[i - 1].getNum() = 2880 , i = 2
แทนค่า sum = 50400 / 12 + 2880
sum = 7080
ชั้นที่ 1
ค่า ณ ปัจจุบัน sum = 7080 , Incept[i - 1].getNum() = 0 , i = 1
แทนค่า sum = 7080 / 12 + 0
sum = 590
เป็นอันเสร็จการคำนวน แล้วเราจะมาแสดงค่ายังไงล่ะ เราก็เรียงจากด้านล่างไปด้านหน้าก็จบ
590
7080
50400
345600
2073600
ส่วนการทำให้ได้ตัวเลขแสดง 10 หลักอ่านลงไปด้านล่างของบทความก็จะเจอครับ
[Java] ACM CommonPermutationQ
The Problem
Given two strings a and b, print the longest string x of letters such that there is apermutation of x that is a subsequence of a and there is a permutation of x that is a
subsequence of b.
Sanple Input / Output
source code
import java.util.Scanner; import java.util.Arrays; /** * * @author http://www.javaagkasit.blogspot.com/ */ public class CommonPermutation { int[] d = new int[1000]; static String strtemp; public static void main(String[] args) throws Exception { Scanner sc = new Scanner(System.in); CommonPermutation cp = new CommonPermutation(); while (true) { String[] a = (sc.nextLine()).split(""); String[] b = (sc.nextLine()).split(""); if (a.length <= 1000 | b.length <= 1000) { int c = 0; char[] out = new char[a.length]; for (int i = 1; i < a.length; i++) { for (int j = 1; j < b.length; j++) { if (cp.check(j) == false) { //not in store index if (a[i].equals(b[j])) { //if chalacter s1[i] == s2[j] out[c++] = b[j].charAt(0);//then store output cp.store(j); //then store index break; //then stop Search } } else { continue; } } } cp.printout(out, c);//print output cp.clearArr(); //clear arrays store index System.out.println(); } } } public boolean check(int i) { boolean c = true; int m = Arrays.binarySearch(d, i); if (m < 0) { c = false; } return c; } public void printout(char[] s, int c) { char[] ans = new char[c]; for (int i = 0; i < ans.length; i++) { ans[i] = s[i]; } Arrays.sort(ans); System.out.print(ans); } public void store(int p) { int c = 0; d[c++] = p; Arrays.sort(d); } public void clearArr() { for (int i = 0; i < d.length; i++) { d[i] = 0; } } }
Download source code here !!!
Subscribe to:
Posts
(
Atom
)
1 comment :
Post a Comment