การติดตั้ง oracle jdk 8 บน ubuntu 14.04

พิมพ์คำสั่งต่อไปนี้บน terminal

sudo add-apt-repository ppa:webupd8team/java
sudo apt-get update
sudo apt-get install oracle-java8-installer

อ่านเพิ่มเติมเกี่ยวกับการใช้งาน jdk บน ubuntu

http://www.webupd8.org/2012/09/install-oracle-java-8-in-ubuntu-via-ppa.html

Advertisements

การสุ่มแบบวงล้อรูเล็ต(roulette wheel selection) (ตอนที่2)

จาก บทความตอนที่ 1 ผมได้กล่าวถึงที่มาที่ไปของคำว่า roulette  ในบทความนี้ผมจะได้กล่าวถึง การสุ่มในคอมพิวเตอร์ ที่ใช้หลักการของ roulette wheel โดยใช้ภาษา java ในการอธิบายครับ

ก่อนอื่นผมขอยกตัวอย่างการสุ่มเลือกข้อมูลแบบธรรมดาก่อน จากตัวอย่างโค๊ดต่อไปนี้ครับ

 //NormalRandom.java

 int[] data = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
 int randomIndex ;
 for (int i = 0; i < 100; i++) {
    //สุ่มตำแหน่งข้อมูล
    randomIndex = (int) Math.floor( Math.random() * data.length);
    //พิมพ์ผลลัพธ์โดยกำหนดความกว้างขนาด 4 ตัวอักษรในแต่ละตัว
    System.out.printf("%4d", data[randomIndex]);
    if ((i + 1) % 10 == 0)
      System.out.println();

 }

บรรทัดที่ห้า เป็นการสุ่มโดยใช้เมธอด random( )  จากคลาส java.lang.Math  จะได้ค่าเป็นจำนวนจริงอยู่ระหว่าง 0 – 1  จากนั้นนำไปคูณกับขนาดของ array (data.length)  ได้ผลลัพธ์ เป็นจำนวนจริง อยู่ระหว่าง 0-10    แล้วส่งต่อให้เมธอด Math.floor ที่รีเทิร์นค่าเป็นจำนวนเต็ม ที่ต่ำที่สุด(ตัดเศษทศนิยมออก)ครับ ในที่นี้ผมแปลงผลลัพธ์ที่ได้เป็น integer เพื่อนำไปใช้เป็น index ในการเลือกครับ ผลลัพธ์สุดท้ายที่ตัวแปร randomIndex เก็บค่าจะเป็นจำนวนเต็มมีค่า ตั้งแต่ 0-9 ซึ่งก็คือตำแหน่งของข้อมูลในอาเรย์นั่นเอง

 

Read more

ตัวอย่างการใช้ checkbox บน JTable

บทความนี้เป็นบทความต่อเนื่องจากบทความ ตัวอย่างการใช้งาน JTable บน Netbeans ผู้เขียนขอแนะนำให้อ่านทำความเข้าใจบทความข้างต้นก่อนอ่านบทความนี้ครับ

ในกรณีที่เราต้องการให้คอลัมน์ใดๆใน JTable แสดงผลในรูปแบบ checkbox  โดยใช้ โมเดลนั้น ข้อมูลในตำแหน่งดังกล่าวจะต้องเป็นข้อมูลชนิด boolean ในที่นี้ผมทำการแก้ไขคลาส Student จากตัวอย่างที่แล้วโดยเพิ่มแอทริบิวต์ใหม่คือ haveMobile และแก้ constructor ใหม่ดังนี้

public class Student  {

    private String id;
    private String name;
    private double gpa;
    private boolean haveMobile;

    public boolean isHaveMobile() {
        return haveMobile;
    }

    public void setHaveMobile(boolean haveMobile) {
        this.haveMobile = haveMobile;
    }

    public Student(String id, String name,double gpa,boolean haveMobile ) {
        this.id = id;
        this.name = name;
        this.gpa = gpa;
        this.haveMobile = haveMobile;
    }

    public double getGpa() {
        return gpa;
    }

    public void setGpa(double gpa) {
        this.gpa = gpa;
    }

    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

}

Read more

การอ่านไฟล์แบบ text ด้วยคลาส Scanner

เราสามารถเขียนโปรแกรมอ่านไฟล์แบบ text(ไฟล์ที่เปิดอ่านด้วย text editor ได้) ด้วยคลาส Scanner โดยระบุตำแหน่งของไฟล์ที่ต้องการอ่าน เพื่อสร้างอินแสตนซ์ของคลาส Scanner และใช้อินสแตนซ์ดังกล่าว ในการอ่านข้อมูลขึ้นมาแบบลำดับ จากตำแหน่งแรกของข้อมูลบนไฟล์ ไปยังข้อมูลถัดไปด้วยการใช้เมธอด next(?)  เมื่ออ่านแล้วจะมีการย้ายตำแหน่งการอ่านไปยังข้อมูลตัวถัดไป การอ่านข้อมูลด้วยเมธอด next(?) มีหลายแบบขึ้นอยู่กับชนิดข้อมูลที่ต้องการอ่านขึ้นมา เช่น

  • next( )   อ่านข้อมูลชนิด String
  • nextLine( )  อ่านข้อมูลเป็นชนิด String  ทั้งบรรทัด
  • nextInt( ) อ่านข้อมูลชนิด integer
  • nextDouble( ) อ่านข้อมูลชนิด double
  • nextBoolean( ) อ่านข้อมูลชนิด boolean
  • อื่น ๆ ( อ่านเพิ่มเติมใน Java API  )

ตัวอย่างการอ่านไฟล์ input.txt มีข้อมูลดังนี้

Greeter 
123   22
22.25  c d
false
I love a loney way.

รูปแบบโค๊ดในการอ่านจะเป็นดังนี้

Scanner sc = new Scanner(new File("input.txt"));
sc.next(); //Greeter
sc.nextInt();//123
sc.nextInt();//22
sc.nextDouble();//22.25
sc.nextLine();//"c d"
sc.nextBoolean();//false
sc.nextChar();//'I'
sc.nextLine();//"love a loney way."

นอกจากเมธอด next(?) แล้วยังมีเมธอดที่ใช้ควบคุมการอ่านข้อมูลของ Scanner คือ hasNext(?) ซึ่งเราสามารถนำมาประยุกต์ใช้กับข้อมูลที่มีลักษณะของการจัดเก็บที่มีรูปแบบชัดเจน โดย hasNext(?) มีหลายตัวเช่น hasNext() hasNextLine( ) hasNextInt() เป็นต้น ซึ่งขึ้นอยู่กับรูปแบบการควบคุมที่เราต้องการใช้งาน

ตัวอย่างไฟล์ student.dat ที่มีข้อมูลดังนี้

5411200260  Peter Width  3.44
5411200261  Charnwidj Pholcheewin  2.59
5411200262  Supatchai  Aimtrakool  1.04
5411200263  Raksana  Watjomjai  3.88
5411200264  Komin  Sreetanan  3.25
...

ต่อไปนี้ผมจะแสดงโค๊ดโปรแกรมสำหรับการอ่านไฟล์ student.dat เพื่อนำเก็บไว้ใน collection ชนิด ArrayList ของ Student จากตัวอย่างในบทความที่แล้ว(ตัวอย่างการเรียงวัตถุโดยใช้ Collection.sort ในจาวา)ครับ

ArrayList<Student> students=new ArrayList<Student>();
Scanner sc = new Scanner(new File("student.dat"));
while(sc.hasNextLine()){ //ตรวจสอบว่าบรรทัดถัดไปมีข้อมูลอยู่หรือไม่
  String id= sc.next();
  String name= sc.next()+" "+sc.next(); //อ่านชื่อและนามสกุลทีละตัว
  double gpa= sc.nextDouble();
  Student std=new Student(id,name,gpa);
  students.add(std);
}

คนที่สนใจแนะนำอ่านบทความนี้ต่อได้เลยครับ(ผมเคยเขียนบทความนี้ไว้ประมาณเกือบ 1 ปีที่แล้ว)

กรณีศึกษา เขียนโปรแกรม fortune ด้วย java

ผมขอจบเรื่องการอ่านไฟล์ขอ้มูลแบบ text ด้วยคลาส Scanner ไว้เพียงเท่านี้ ขอบคุณที่อ่านจนจบครับ

ตัวอย่างการเรียงวัตถุโดยใช้ Collection.sort ในจาวา

ในภาษาจาวา เมธอด Collection.sort มีโอเวอร์โหลด  2 ตัวคือ  Collection.sort( list) และ Collection.sort(list, comparator) ซึ่งช่วยให้เราสามารถลำดับวัตถุที่อยู่ใน list  อย่างง่ายได้ โดยลำดับจะเรียงตามธรรมชาติของชนิดข้อมูลที่นำมาเปรียบเทียบ จากน้อยไปหามาก อ่านเพิ่มเติม(English)

ต่อไปนี้ผมจะยกตัวอย่างการเรียงลำดับคลาส Student ที่ได้กล่าวถึงในบทความที่แล้ว(ตัวอย่างการใช้ JTable บน Netbeans IDE) โดยปรับปรุงคลาส Student ด้วยการอิมพลีเมนต์อินเตอร์เฟส Comparable<T>   โดยจะนำ gpa  ของนักเรียนมาใช้ในการเรียงลำดับครับ

//ไฟล์ Student.java

public class Student implements Comparable<Student>{

    private String id;
    private String name;
    private double gpa;

    public Student(String id, String name,double gpa ) {
        this.id = id;
        this.name = name;
        this.gpa = gpa;
    }

    public double getGpa() {
        return gpa;
    }

    public void setGpa(double gpa) {
        this.gpa = gpa;
    }

    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    @Override
    public int compareTo(Student o) {
        return ((Double)gpa).compareTo(o.getGpa());
    }

}

//ไฟล์ StudentSort.java

public class SortStudent {

    public static void main(String[] args){

        List<Student> students=new ArrayList<Student>();
        System.out.println("-----Before sort----");
        students.add(new Student("S003","Nattapong",3.25));
        students.add(new Student("S001","Pumin",2.50));
        students.add(new Student("S002","Jingjai",3.00));
        students.add(new Student("S005","Boonhome",1.75));
        students.add(new Student("S004","Kamron",4.00));
        printList(students);
        Collections.sort(students);
        System.out.println("----After sort----");
        printList(students);
    }

    private static void printList(List<Student> students) {
        System.out.printf("%-5s %-10s %-5s\n","#ID","#Name","#GPA");
        for(Student s: students){
            System.out.printf("%-5s %-10s %-5.2f\n"
                 , s.getId(), s.getName(), s.getGpa());
        }
    }
}

ผลการรันคลาส SortStudent เป็นดังนี้
—–Before sort—-
#ID #Name #GPA
S003 Nattapong 3.25
S001 Pumin 2.50
S002 Jingjai 3.00
S005 Boonhome 1.75
S004 Kamron 4.00
—-After sort—-
#ID #Name #GPA
S005 Boonhome 1.75
S001 Pumin 2.50
S002 Jingjai 3.00
S003 Nattapong 3.25
S004 Kamron 4.00

จากนั้นผมเปลี่ยนเมธอด compareTo ในคลาส Student ใหม่เพื่อลำดับตาม id ดังนี้

public int compareTo(Student o) {
        return id.compareTo(o.getId());
}

ผลการรันใหม่เป็นดังนี้ครับ
—–Before sort—-
#ID #Name #GPA
S003 Nattapong 3.25
S001 Pumin 2.50
S002 Jingjai 3.00
S005 Boonhome 1.75
S004 Kamron 4.00
—-After sort—-
#ID #Name #GPA
S001 Pumin 2.50
S002 Jingjai 3.00
S003 Nattapong 3.25
S004 Kamron 4.00
S005 Boonhome 1.75

ครับสำหรับบทความเรียงลำดับวัตถุด้วย Collection.sort ขอจบไว้เพียงแค่นี้ ไว้พบกันใหม่กับบทความต่อไปนะครับ : )