[TIP]Kỹ thuật random, tạo danh sách (mảng) ngẫu nhiên trong java

badboy3283

Active Member
20/10/11
295
89
28
District BT, HCM City
Random password: số, hoa, thường

Code:
public static final int MAXDIGIT = 9;
public static final int NUMBEROFASCII = 25;
public static final int UPPPERSTART = 65;
public static final int LOWERSTART = 97;

public static String generateRandomPassword(int lenght) {
        Random r = new Random();
        boolean number = false;
        StringBuilder sb = new StringBuilder();
        for (int i = 0; i < lenght; i++) {
            number = r.nextBoolean();
            if (number) {
                sb.append(r.nextInt(MAXDIGIT));
            } else {
                boolean isupper = r.nextBoolean();
                int num = 0;
                if (isupper) {
                    num = r.nextInt(NUMBEROFASCII) + UPPPERSTART;
                } else {
                    num = r.nextInt(NUMBEROFASCII) + LOWERSTART;
                }
                sb.append((char) num);
            }
        }
        return sb.toString();
    }
 
  • Like
Reactions: dangxunb

gulang

New Member
9/11/17
2
0
1
32
tham khảo ở trên mình có 1 đoạn này random không lặp lại và trả về 1 mảng các số.
Code:
package layRandom1Mang;

import java.util.ArrayList;

/**
 *
 * @author joo
 */
public class layRandom1Mang {
    //lấy soGiaTriCanLay giá trị từ dãy số từ giaTriBatDau đến giaTriKetThuc mà không bị trùng.
    public static ArrayList<Integer> layNgauNhien(int soGiaTriCanLay, int giaTriBatDau, int giaTriKetThuc){
         ArrayList<Integer> tmp = new ArrayList<>();
         ArrayList<Integer> finish = new ArrayList<>();
         int size = giaTriKetThuc - giaTriBatDau +1;
         for(int i = 0; i<size; i++){
             tmp.add(giaTriBatDau+i);
         }
         java.util.Collections.shuffle(tmp);
         if(soGiaTriCanLay> size){
             soGiaTriCanLay = size;
         }
         for(int i=0; i<soGiaTriCanLay;i++){
             finish.add(tmp.get(i));
         }
         return finish;
     }
    
    public static void main(String[] args) {
        ArrayList<Integer> test = new ArrayList<>();
        test=layNgauNhien(10,0,100);
        for(int i=0;i<10;i++){
            System.out.println(test.get(i));
        }
    }
}
 

gulang

New Member
9/11/17
2
0
1
32
tham khảo ở trên mình có 1 đoạn này random không lặp lại và trả về 1 mảng các số.
Code:
package layRandom1Mang;

import java.util.ArrayList;

/**
 *
 * @author quangvinh.gulang@gmail.com
 */
public class layRandom1Mang {
    //lấy soGiaTriCanLay giá trị từ dãy số từ giaTriBatDau đến giaTriKetThuc mà không bị trùng.
    public static ArrayList<Integer> layNgauNhien(int soGiaTriCanLay, int giaTriBatDau, int giaTriKetThuc){
         ArrayList<Integer> tmp = new ArrayList<>();
         ArrayList<Integer> finish = new ArrayList<>();
         int size = giaTriKetThuc - giaTriBatDau +1;
         for(int i = 0; i<size; i++){
             tmp.add(giaTriBatDau+i);
         }
         java.util.Collections.shuffle(tmp);
         if(soGiaTriCanLay> size){
             soGiaTriCanLay = size;
         }
         for(int i=0; i<soGiaTriCanLay;i++){
             finish.add(tmp.get(i));
         }
         return finish;
     }
   
    public static void main(String[] args) {
        ArrayList<Integer> test = new ArrayList<>();
        test=layNgauNhien(10,0,100);
        for(int i=0;i<10;i++){
            System.out.println(test.get(i));
        }
    }
}
cái này có thể lấy mảng các số rồi truy cập vào 1 arraylist đối tượng để lấy random đối tượng.
 

Joe

Thành viên VIP
21/1/13
2,935
1,304
113
tham khảo ở trên mình có 1 đoạn này random không lặp lại và trả về 1 mảng các số.
The shortest distance between 2 points is a straight line. If you carefully read method shuffle() of the API java.util.collections you would see that ONE arraylist is sufficient enough to do the task. Your codes can be optimally rewritten as following
PHP:
import java.util.ArrayList;

/**
 *
 * @author joo
 */
public class layRandom1Mang {
    //lấy soGiaTriCanLay giá trị từ dãy số từ giaTriBatDau đến giaTriKetThuc mà không bị trùng.
    public static ArrayList<Integer> layNgauNhien(int soGiaTriCanLay, int giaTriBatDau, int giaTriKetThuc){
         ArrayList<Integer> tmp = new ArrayList<>();       
         //ArrayList<Integer> finish = new ArrayList<>();
         int size = giaTriKetThuc - giaTriBatDau +1;
         for(int i = 0; i<size; i++){
             tmp.add(giaTriBatDau+i);
         }
         java.util.Collections.shuffle(tmp);
         /*
         if(soGiaTriCanLay> size){
             soGiaTriCanLay = size;
         }
         for(int i=0; i<soGiaTriCanLay;i++){
             finish.add(tmp.get(i));
         }
         return finish;
         */
         return tmp;
     }
   
    public static void main(String[] args) {
        ArrayList<Integer> test = new ArrayList<>();
        test=layNgauNhien(10,0,100);
        for(int i=0;i<10;i++){
            System.out.println(test.get(i));
        }
    }
}
 

TrungHiếuVNTN

New Member
7/2/18
4
0
1
16
Tây Ninh
Cái này Random rd = new Random() gọi là j vậy ạ?, rồi biết mấy từ này ở đâu?
*Hướng dẫn làm ứng dụng tạo UUID đi mọi , cảm ơn
 

quangduongkk

New Member
26/6/20
1
0
1
ha noi
mình đang có 1 đoạn mã dùng hàm Math.random ( random từ 0-1). mình muốn sửa thành hàm random r số tự nhiên từ 1-100 thì phải sửa lại như thế nào ạ? mong các cao nhân chỉ giáo

let random = function(){
return (Math.random()*(500000-300000+1)+300000)>>0;
 

Joe

Thành viên VIP
21/1/13
2,935
1,304
113
mình đang có 1 đoạn mã dùng hàm Math.random ( random từ 0-1). mình muốn sửa thành hàm random r số tự nhiên từ 1-100 thì phải sửa lại như thế nào ạ? mong các cao nhân chỉ giáo

let random = function(){
return (Math.random()*(500000-300000+1)+300000)>>0;
Basic mathematics: a = 0 - 1 --> A = a * 100 = 0-100