簡體   English   中英

Java 簡易抽獎程序

[英]Java Simple Lottery Program

我試圖創建一個簡單的彩票程序。 這是一個問題:它仍然打印相同的數字。 例如,我得到33 21 8 29 21 10作為 output。每次生成隨機數時,代碼都會檢查該數字是否已經生成,然后它會創建一個新的隨機數,但之后它不會再次檢查。 我找不到辦法做到這一點。

public static void main(String[] args)
{

    int[] lottery = new int[6];
    int randomNum;

    for (int i = 0; i < 6; i++)
    {
        randomNum = (int) (Math.random() * 50); //Random number created here.
        for (int x = 0; x < i; x++)
        {
            if (lottery[i] == randomNum) // Here, code checks if same random number generated before.
            {
                randomNum = (int) (Math.random() * 50);//If random number is same, another number generated.
            }

        }
        lottery[i] = randomNum;
    }

    for (int i = 0; i < lottery.length; i++)
        System.out.print(lottery[i] + " ");

}

您在檢查時更改隨機數。 您需要選擇一個隨機數並檢查它是否存在。

BTW較短的方法是使用shuffle。

// give me all the number 1 to 50
List<Integer> list = IntStream.range(1, 51).boxed().collect(Collectors.toList());
// shuffle them.
Collections.shuffle(list);
// give me the first 6
System.out.println(list.subList(0, 6));

您的代碼有2個問題:

  • 你檢查lottery[i]randomNum是否相同,應該是lottery[x]
  • 當您重新生成一個隨機數時,您不會在lottery中的第一個數字上進行檢查。

這是一個更正版本:

public static void main(String[] args) {

    int[] lottery = new int[6];
    int randomNum;

    for (int i = 0; i < 6; i++) {
        randomNum = (int) (Math.random() * 50); // Random number created here.
        for (int x = 0; x < i; x++) {
            if (lottery[x] == randomNum) // Here, code checks if same random number generated before.
            {
                randomNum = (int) (Math.random() * 50);// If random number is same, another number generated.
                x = -1; // restart the loop
            }

        }
        lottery[i] = randomNum;
    }

    for (int i = 0; i < lottery.length; i++)
        System.out.print(lottery[i] + " ");

}

一個簡單的解決方案,在第一個(對於非Java程序員而言可能非常抽象)和第二個(不確保數字列表的唯一性)之間。

    Collection<Integer> liste = new ArrayList<Integer>();
    for (int i = 0; i < 6; i++)
    {

        Boolean ap = false; 
        while (!ap)
        {
            Integer randomNumber  =  (int) (Math.random() * 50);

            if (! liste.contains(randomNumber)){

                liste.add(randomNumber);
                ap = true;
            }
        }
    }


    for (Integer liste1 : liste) {
        System.out.print(liste1+" ");

    }

嘗試這個,它創造了12 x(45個中的6個)

public static void main(String[] args) {
    SecureRandom random = new SecureRandom();
    for (int i = 0; i < 12; i++){
        Integer[] tipp = new Integer[6];
        int n = 0;
        do {
            int r = random.nextInt(45) + 1;
            if (Arrays.asList(tipp).indexOf(r)<0){
                tipp[n]= r;
                n++;
            }
        } while (n<=5);
        Arrays.sort(tipp);
        System.out.println(Arrays.toString(tipp));
        }
}
public static void main(String[] arg) {
    int[] lottery = new int[6];
    int randomNum;
    c1:
        for (int i = 0; i < 6; i++) {
            randomNum = (int) (Math.random() * 50); // Random number created here.
            if(randomNum == 0) {
                continue c1;
            }   
            for (int x = 0; x < i; x++) {
                if (lottery[x] == randomNum ) // Here, code checks if same random number generated before.
                {
                    randomNum = (int) (Math.random() * 50);// If random number is same, another number generated.
                    x = -1; // restart the loop
                }

            }
            lottery[i] = randomNum;
        }

    for (int i = 0; i < lottery.length; i++)
        System.out.print(lottery[i] + " ");

}

這是用於制作票證的 object class,它將創建一張具有升序值的票證,無論您選擇什么參數。 在您調用 main 方法之前,該程序不會運行。 確保導入 TreeSet。

import java.util.TreeSet;
public class TicketMaker{
private int numbersPerTicket;
private int lowestNumber;
private int highestNumber;

TicketMaker(){
    numbersPerTicket=0;
    lowestNumber=0;
    highestNumber=0;
}
TicketMaker(int numbersPerTicket,int lowestNumber,int highestNumber){
    if(numbersPerTicket > 0 && lowestNumber >= 0 && highestNumber >= lowestNumber){
        this.numbersPerTicket=numbersPerTicket;
        this.lowestNumber=lowestNumber;
        this.highestNumber=highestNumber;
    }
}
public boolean printTicket(int numbersPerTicket,int lowestNumber,int highestNumber){
    if(numbersPerTicket > 0 && lowestNumber >= 0 && highestNumber >= lowestNumber){
        if(numbersPerTicket > highestNumber){
            System.out.println("Error not in-bounds");
            return false;
        } 
        int rand;
        int count=0;
        System.out.println("[Ticket Printed]");
        TreeSet<Integer> set = new TreeSet<>();
        do{
            rand = (int)(Math.random()*highestNumber)+lowestNumber;
            set.add(rand);
            count++;
        }while(set.size() != numbersPerTicket);
        System.out.println(set);
        return true;
    }
    else{
        System.out.println("Error not in-bounds");
        return false;
    }
}
public boolean isValidTicketData(int numbers,int lowest,int highest){
    if(lowest != 1){
        if(highest == numbers)
            return false;
    }
    if(numbers <= highest){
        if(numbers > 0 && lowest >= 0 && highest >= lowest)
            return true;
    }
    return false;
}
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM