Tutorial

Java Class - Random Class คลาสมหาสนุก

By Arnon Puitrakul - 11 มีนาคม 2015

Java Class - Random Class คลาสมหาสนุก

กลับมาอีกแล้ว อันนี้ก็ถามกันมาเยอะ นั่นคือเรื่องของ Random Class มันใช้ยังไง ทำอะไร
เรื่องที่ว่ามันเอามาทำอะไรนั้นก็ไปอ่านชื่อ Class ซะว่ามันชื่ออะไร นั่นแหละคือสิ่งที่มันทำ
ใช้ยังไง? ก่อนอื่นต้อง Import มันเข้ามาก่อน

import java.util.Random;

ทีนี้เราจะมาลอง Random Int กันแต่ก่อนอื่นเรามาสร้าง Object จากClass Random กันก่อน

Random rand = new Random ();

ในการที่เราจะ Random ค่าตัวเลขมาสักค่านึงเราจะต้องเรียก Method ชื่อ nextInt() ใน Argument จะเป็น Bound (ขอบเขต) ของมันซึ่งจะตั้งแต่ 0 ถึงที่เราป้อนลงไป แต่ถ้าไม่ใส่มันจะเอาเลขอะไรมาให้เราก็ได้

for (int i = 1;i<=20;i++)
{
   System.out.println(rand.nextInt(20)+1);
}

จากโค๊ตด้านบนผมก็วนลูป 20 รอบให้มัน Generate เลขออกมา แต่สงสัยใช่มั้ยว่าทำไมต้องบวก 1 ด้วย?
เจ้านี่เป็นทริกอย่างนึง คือใน Argument เราไม่สามารถกำหนดเลขเริ่มต้นได้ว่าให้มันเริ่มที่เลขอะไร ผมเลยบวกมันเข้าไปเลยให้มันเริ่มด้วยเลขที่เราต้องการนั่นเอง เพราะฉะนั้นมันจะ Random เลขตั้งแต่ 1-21 นั่นเอง
แต่จริงๆแล้วเรา Random อย่างอื่นได้อีกโดยการเรียก Method next...() เช่น nextBoolean(), nextByte(), NextDouble(), NextLong() เป็นต้น
เรามาลองใช้มันทำอะไรสนุกกันดีกว่า เช่น จั่วไพ่เป็นต้น //เรื่องการพนันนี่มาไวเลย
ก่อนอื่นเราจะต้องรู้ว่าไพ่นั้นมี 52 ใบ เกิดจาก ตัวเลข A,2,3,4,5,6,7,8,9,J,Q,K และหน้าการ์ด นั้นคือ Clubs, Diamonds, Hearts และ Spades
เพราะฉะนั้นเราจะต้อง Random 2 อย่างนั่นคือเลขการ์ดกับหน้าการ์ด แต่ผมจะให้ผู้ใช้สามารถป้อนจำนวนไพ่ได้ด้วย

import java.util.Scanner;
import java.util.Random;

public class PlayCard
{
    public static void main (String [] args)
    {
        Random rand = new Random();

        Scanner sc = new Scanner (System.in);
        System.out.print("Input Number of Card : ");
        int numOfCard = sc.nextInt();

        for(int i=1;i<= numOfCard;i++)
        {
            System.out.println(GetCardFace(rand.nextInt(3)) + " " + getCardNumber(rand.nextInt(12)+1));
        }

        sc.close();
    }

    public static String GetCardFace (int faceNumber)
    {
        if (faceNumber == 0) return "Clubs";
        else if (faceNumber == 1) return "Diamonds";
        else if (faceNumber == 2) return "Hearts";
        else return "Spades";
    }

    public static String getCardNumber (int cardNumber)
    {
        if (cardNumber == 1) return "A";
        else if (cardNumber == 10) return "J";
        else if (cardNumber == 11) return "Q";
        else if (cardNumber == 12) return "K";
        else return Integer.toString(cardNumber);
    }
}

มาดูที่ main กันก่อน ก่อนอื่นผมก็ให้ User กรอกจำนวนไพ่ที่ต้องการจั่วเข้ามา จากนั้นก็เข้า For Loop ตามจำนวนไพ่ที่กรอกเข้าไป แล้วในลูปก็ให้เราปริ้นไพ่ที่จั่วได้ออกมา โดยสร้าง Method ชื่อ getCardFace() ขึ้นมาเพื่อแปลงจากเลขที่สุ่มให้กลายเป็นชื่อหน้าของไพ่ และ getCardNumber() เพื่อแปลหน้าไพ่ให้เรา แล้วถามว่าทำไมตรง Random อันหลังต้องบวก 1 ด้วยล่ะ
นั่นเพราะเพื่อให้เราสะดวกมากขึ้นครับ เพราะไพ่มันไม่มีแต้ม 0 มันมีแค่ A,1,2,3,4,5,6,7,8,9,J,Q,K เพราะฉะนั้นตัวที่เราจะต้องเปลี่ยนนั่นก็มีแค่A,J,Q,K มันทำให้เราจัดการกับ Index ที่สุ่มมาได้ง่ายขึ้นนั่นเอง!

ปล ตัวแดงๆ ตัวหนา ใหญ่ๆ : ที่เขียน Random ไพ่นี้ไป มันยังไม่สมบูรณ์เท่าไหร่นะครับ ลองเขียนให้ดูคร่าวๆ (ยังไม่ได้จัดการกับการ์ดซ้ำ)

**Sources Code : **https://drive.google.com/folderview?id=0BwrPA9Miv4o2TDBESTgxcVkyR00&usp=sharing

Read Next...

จัดการข้อมูลบน Pandas ยังไงให้เร็ว 1000x ด้วย Vectorisation

จัดการข้อมูลบน Pandas ยังไงให้เร็ว 1000x ด้วย Vectorisation

เวลาเราทำงานกับข้อมูลอย่าง Pandas DataFrame หนึ่งในงานที่เราเขียนลงไปให้มันทำคือ การ Apply Function เข้าไป ถ้าข้อมูลมีขนาดเล็ก มันไม่มีปัญหาเท่าไหร่ แต่ถ้าข้อมูลของเราใหญ่ มันอีกเรื่องเลย ถ้าเราจะเขียนให้เร็วที่สุด เราจะทำได้โดยวิธีใดบ้าง วันนี้เรามาดูกัน...

ปั่นความเร็ว Python Script เกือบ 700 เท่าด้วย JIT บน Numba

ปั่นความเร็ว Python Script เกือบ 700 เท่าด้วย JIT บน Numba

Python เป็นภาษาที่เราใช้งานกันเยอะมาก ๆ เพราะความยืดหยุ่นของมัน แต่ปัญหาของมันก็เกิดจากข้อดีของมันนี่แหละ ทำให้เมื่อเราต้องการ Performance แต่ถ้าเราจะบอกว่า เราสามารถทำได้ดีทั้งคู่เลยละ จะเป็นยังไง เราขอแนะนำ Numba ที่ใช้งาน JIT บอกเลยว่า เร็วขึ้นแบบ 700 เท่าตอนที่ทดลองกันเลย...

Humanise the Number in Python with "Humanize"

Humanise the Number in Python with "Humanize"

หลายวันก่อน เราทำงานแล้วเราต้องการทำงานกับตัวเลขเพื่อให้มันอ่านได้ง่ายขึ้น จะมานั่งเขียนเองก็เสียเวลา เลยไปนั่งหา Library มาใช้ จนไปเจอ Humanize วันนี้เลยจะเอามาเล่าให้อ่านกันว่า มันทำอะไรได้ แล้วมันล่นเวลาการทำงานของเราได้ยังไง...

ทำไม 0.3 + 0.6 ถึงได้ 0.8999999 กับปัญหา Floating Point Approximation

ทำไม 0.3 + 0.6 ถึงได้ 0.8999999 กับปัญหา Floating Point Approximation

การทำงานกับตัวเลขทศนิยมบนคอมพิวเตอร์มันมีความลับซ่อนอยู่ เราอาจจะเคยเจอเคสที่ เอา 0.3 + 0.6 แล้วมันได้ 0.899 ซ้ำไปเรื่อย ๆ ไม่ได้ 0.9 เพราะคอมพิวเตอร์ไม่ได้มองระบบทศนิยมเหมือนกับคนนั่นเอง บางตัวมันไม่สามารถเก็บได้ เลยจำเป็นจะต้องประมาณเอา เราเลยเรียกว่า Floating Point Approximation...