หัดเขียนโปรแกรม ภาษาจาวา

Java basic | Java OOP | โครงสร้างข้อมูล | โจทย์ ACM



Showing posts with label Java basic [OOP]. Show all posts
Showing posts with label Java basic [OOP]. Show all posts

[Java OOP]การใช้งาน Constructor

          จากบทความ Class และ object คืออะไร เราได้เขียน class Dog ไว้แล้วก่อนหน้านี้แล้งครั้งนั้น Constructor เรายังไม่มีการกำหนดค่าอะไรเลย โดยบทความนั้นเราตอน ทดสอบ class Dog จะมีขั้นตอนการ setName ,setBreed รู้สึกว่ายุ่งยากมาก เราจะมาทำการกำหนดค่าต่างๆง่ายให้ง่ายขึ้นโดยการใช้ Constructor กัน

Java ArrayList Object example


ArrayList เป็นอีกทางเลือกหนึ่งที่เราไม่ทราบ ขนาด Array ที่แน่นอน และช่วยให้เราสามารถเก็บข้อมูลเป็น object ได้ 
Method ของ ArrayList ที่จะใช้
  • add()    : สำหรับเพิ่มข้อมูลให้ลงใน ArrayList
  • get()     : สำหรับดึงค่าใน ArrayList
  • set()     : สำหรับเปลี่ยนแปลงตำแหน่งข้อมูลใน ArrayList

วันนี้จะเราจะทำโจทย์ที่นำ ArrayList มาประยุกต์ใช้งานกัน
โจทย์ คือ จะให้ไฟล์ students.in ภายในไฟล์จะเป็นข้อมูลนักศึกษามาโดยมี รหัสนักศึกษา ชื่อนักศึกษา คะแนนที่ได้ อยากให้เรียงลำดับคะแนน นักศึกษาจาก มากไปหาน้อย
Student_Id,Student_name,Student_score
53001,Theerapong Hunghuan,50
53002,Vatcharin Phoya,35
53003,Prapakorn Moonnoi,38
53004,Agkasit Tontan,56
53005,Wattanakron Apichit,35
53006,Tanachai Sunarug,68
53007,Chanwit Phuwadkien,66
53008,Wkt Rescue,55
53009,Scream Srisawet,73
53010,Tanachai Sunarug,33
53011,Leng ManDer,46
53012,CupidNoy Sky InNocence,67
(Downloadไฟล์ students.in จาก http://goo.gl/AghNCr )
ตัวอย่างผลลัพธ์ของโปรแกรม
ขั้นตอนในการแก้ปัญหา 
  1. ให้อ่านข้อมูลจากไฟล์ students.in  เข้ามาเก็บใน Arraylist โดยสร้างคลาส Students สำหรับเก็บค่า studentId ,studentName,studentGate หรือจะมองเป็นหนึ่ง object แล้วมา add ใน Arraylist
  2. นำข้อมูลนักศึกษาทั้งหมดมาเรียงจากมากไปหาน้อย การเรียงข้อมูลจากมากไปหาน้อย โดยดึงเฉพาะ sutudentScore มาเปรียบเทียบ แล้วใช้ Method set ของ ArrayList ในการสลับตำแหน่ง
ขั้นตอนที่ 1
import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import java.util.ArrayList;

public class ArrayListExample {
 private static String studentId;
 private static String studentName;
 private static int studentScore;

 public static void main(String[] args) throws IOException {
  BufferedReader readfile = new BufferedReader(new FileReader(new File(
    "C:/students.in")));
  String tmp;

  readfile.readLine();// ไม่เก็บ Student_Id,Student_name,Student_score
  ArrayList studentList = new ArrayList();
  // เก็บข้อมูลนักศึกษาให้ครบ
  while ((tmp = readfile.readLine()) != null) {
   String[] arr = tmp.split(",");
   studentId = arr[0];
   studentName = arr[1];
   studentScore = Integer.parseInt(arr[2]);
   // add ข้อมูลนักศึกษา studentId,studentName,studentGate ใส่
   // studentList
   studentList.add(new students(studentId, studentName, studentScore));
  }
  // show ข้อมูล ดู
  for (int i = 0; i < studentList.size(); i++) {
   System.out.println(studentList.get(i).studentId + " "
     + studentList.get(i).studentName + "   "
     + studentList.get(i).studentScore);
  }

 }
}

// สร้าง class students เพี่อเก็บ studentId ,studentName,studentGate
static class students {
 public String studentId;
 public String studentName;
 public int studentScore;

 students(String studentId, String studentName, int studentScore) {
  this.studentId = studentId;
  this.studentName = studentName;
  this.studentScore = studentScore;
 }
}
รันดู

ขั้นตอนทึ่ 2  ใช้การเรียงข้อมูลแบบ Bubble Sort ในการเรียงข้อมูล

 // Method สำหรับเรืยง ลำดับ score จาก มาก ->น้อย
 static ArrayList sort(ArrayList List) {
  students tmp;
  for (int i = 1; i < List.size(); i++) {
   for (int j = 0; j < List.size() - i; j++) {
    if (List.get(j).studentScore < List.get(j + 1).studentScore) {
     tmp = List.get(j);
     List.set(j, List.get(j + 1));
     List.set(j + 1, tmp);
    }
   }
  }
  return List;
 }
โค้ดทั้งหมด

เนื้อหาที่เกียวข้อง / ควรศึกษาเพิ่มเติมถ้าไม่เข้าใจ 

[Java OOP]Class และ Object คืออะไร

               วันนี้มารู้จัก Class และ Object กัน ซึ่งในหัวข้อนี้มันจะเกี่ยวข้องกับเรื่อง Object-oriented programming โดยเรามาฝึกมองสิ่งที่ต่างๆเป็นวัตถุ  ก่อนจะเข้าเรื่องผมขอบอกเลยว่าถ้าเข้าใจเรื่องนี้จะสามารถนำความรู้ไปประยุกต์ใช้ได้อย่างมากมายและอาจจะช่วยให้เขียนโปรแกรมได้ง่ายขึ้นอีกด้วยในบ้างกรณี

               class คือ คุณลักษณะ หรือคุณสมบัติของวัตถุใดวัตถุหนึ่ง หรื่อจะง่ายๆคือเป็นตัวกำหนดคุณสมบัติได้ถูกสร้างขึ้น จะขอยกตัวอย่าง class Dog สุนัขก็จะมีคุณสมบัติ เช่น ชื่อ พันธฺุ์ และอื่นขึ้นอยู่กับคุณสมบัติของสิ่งที่เราสร้าง

หลักการเขียน class จะมีองค์ประกอบอยู่ 3 ส่วนด้วยกัน
  • คุณสมบัติ(Field)  คือ ตัวแปรที่เราจะสร้างให้กับคุณสมบัติ
  • คอนทรักเจอร์(Constructor) คือ เป็นกำหนดการรูปแบบการเรียกใช้ Class
  • เมทธอต(Method) คือ ฟังชั่นก์ หรือ เหตุการณ์ เช่น การตั้งชื่อให้กับสนัข การกำหนดสายพันธุ์ หรือ จะใส่เหตุการณ์ต่างๆก็ได้เช่น การกิน นอน เดินเล่น เห่า เป็นต้น  

จากนั้นเอาหลักการเขียน class มาสร้างคลาส Dog
         ให้เรานึกถึงความเป็นจริงในชีวิตของเราว่าสนัขควรมีคุณสมบัติอะไรบ้าง ในที่นี่จะให้สุนัขมีคุณสมบัติ คือ  มีชื่อ มีสายพันธฺุ์ มีเมทธอต คือ  ตั้งชื่อสุนัขได้ กำหนดสายพันธฺุ์ได้ และสามารถเรียกดู ชื่อ กับ สายพันธุ์ ได้ด้วย
/*
* @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 ที่เรียกใช้ทุกประการ
เรื่องที่ควรศึกษาเพิ่มเติม