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...

ติดตั้ง Zigbee Dongle บน Synology NAS กับ Home Assistant

ติดตั้ง Zigbee Dongle บน Synology NAS กับ Home Assistant

ก่อนหน้านี้เราเปลี่ยนมาใช้ Zigbee Dongle กับ Home Assistant พบว่าเสถียรขึ้นเยอะมาก อุปกรณ์แทบไม่หลุดออกจากระบบเลย แต่การติดตั้งมันเข้ากับ Synology DSM นั้นมีรายละเอียดมากกว่าอันอื่นนิดหน่อย วันนี้เราจะมาเล่าวิธีการเพื่อใครเอาไปทำกัน...

โหลด CSV วิธีไหนเร็วที่สุด ?

โหลด CSV วิธีไหนเร็วที่สุด ?

เมื่อหลายวันก่อนมีพี่ที่รู้จักกันมาถามว่า เราจะโหลด CSV ยังไงให้เร็วที่สุด เป็นคำถามที่ดูเหมือนง่ายนะ แต่พอมานั่งคิด ๆ ต่อ เห้ย มันมีอะไรสนุก ๆ ในนั้นเยอะเลยนี่หว่า วันนี้เราจะมาเล่าให้อ่านกันว่า มันมีวิธีการอย่างไรบ้าง และวิธีไหนเร็วที่สุด เหมาะกับงานแบบไหน...

ฮาวทู Sync Obsidian Note ด้วย LiveSync Plugin

ฮาวทู Sync Obsidian Note ด้วย LiveSync Plugin

ตั้งแต่ใช้ Obsidian เป็น App จด Note หลัก ชอบวิธีการจัดการมาก ๆ เมื่อใช้งานร่วมกับ Plugin ต่าง ๆ ยิ่งทำให้การใช้งานยืดหยุ่นมากกว่าเดิมอีกเยอะมาก ๆ ติดอยู่เรื่องเดียวคือ การใช้งานในหลาย ๆ อุปกรณ์ แต่เราเจอ Plugin ตัวนึงที่น่าสนใจมาก ๆ คือ LiveSync วันนี้เราจะมาเล่าวิธีการติดตั้ง และใช้งานมันกัน...

การสร้าง SSD Storage Pool บน Synology DSM

การสร้าง SSD Storage Pool บน Synology DSM

สำหรับคนที่ใช้ Synology NAS บางรุ่นจะมีช่อง M.2 สำหรับเสียบ NVMe SSD โดยพื้นฐาน Synology บอกว่ามันสำหรับการทำ Cache แต่ถ้าเราต้องการเอามันมาทำเป็น Storage ละ มันจะทำได้มั้ย วันนี้เราจะมาเล่าวิธีการทำกัน...