मैं एक लॉटरी प्रोग्राम बना रहा हूं जो 6 जीतने वाले नंबरों को चुनने वाले व्यक्ति और विधियों का उपयोग करके जीतने वाली संख्याओं का ड्रा अनुकरण करता है।

यह एक उदाहरण आउटपुट है

Enter your numbers:

25
31
20
8
47
31

The winning numbers are:
48 16 28 38 46 36

0 out of the 6 numbers you chose are winning numbers, better luck next time!

मेरी समस्या यह है कि कुल मिलान संख्याओं की संख्या ज्ञात करने की विधि काम नहीं कर रही है और मुझे नहीं पता कि इसे कैसे ठीक किया जाए। उपयोगकर्ता इनपुट नंबर और लॉटरी रैंडम नंबर दोनों ही सरणियाँ हैं

मेरे पास यह कोड है:

import java.util.*;

public class Main {

    private static boolean[] lottery;
    private static boolean[] array;

    public static void main(String[] args) {

        getUserNumbers();

        getRandomNumbers();

        getTotalMatchedNumbers();

}


    public static void getRandomNumbers(){

            int[] lottery = new int[6];
            int lotteryNumbers;
        
            for (int i = 0; i < 6; i++) {
                lotteryNumbers = (int) (Math.random() * 50);
                for (int x = 0; x < i; x++) {
                    if (lottery[x] == lotteryNumbers)
                    {
                        lotteryNumbers = (int) (Math.random() * 50);
                        x = -1;
                    }
        
                }
                lottery[i] = lotteryNumbers;
            }
            
            System.out.println("The winning numbers are: ");
            for (int i = 0; i < lottery.length; i++)
                System.out.print(lottery[i] + " ");
        
        }
    

    public static void getUserNumbers(){
        Scanner scanner = new Scanner(System.in);
         
            int[] array = new int[10];  
    
        System.out.println("Enter your numbers: "); 
    
        for(int i=0; i < 6; i++){  
      
            array[i]=scanner.nextInt();  
    
        }  

        System.out.println("You have entered: ");  

        for (int i=0; i < 6; i++){  
            System.out.print(array[i]);  
            System.out.print(" ");
            System.out.println(" ");
           
        }  
    }

    public static void getTotalMatchedNumbers(){

        int matched = 0;
        for(int i = 0; i < 6; i++){
            for(int j = 0;j < 6; j++){
                if(lottery[i] == array[j]){
                        matched = matched + 1;
                }
            }
            if (matched != 6){
                System.out.println(matched + " out of the 6 numbers you chose are winning numbers, better luck next time!");
            }
            else{
                System.out.println("You got picked all the winning numbers! You win!");
            }
        }

    }
}
0
Andrew Tang 17 मार्च 2021, 13:48

2 जवाब

सबसे बढ़िया उत्तर

फ़ंक्शन प्रदान करना बेहतर है जो फ़ंक्शन के बाहर कुछ चर/फ़ील्ड को संशोधित करने के बजाय कुछ तर्कों को स्वीकार करते हैं और परिणाम लौटाते हैं क्योंकि यह कई त्रुटियों से बचने में मदद करता है और ऐसे कार्यों के परीक्षण की सुविधा प्रदान करता है।

साथ ही, यदि कोड में एक ही संख्या/मान एक से अधिक बार आता है, तो कोड में स्थानों की संख्या को कम करने के लिए इसे एक अलग स्थिरांक में निकालना बेहतर होता है जहां परिवर्तन आवश्यक हो सकता है, उदाहरण के लिए, उपरोक्त कोड में शामिल है 6 सभी विधियों में, इस प्रकार यदि इस निश्चित रूप से एकल पैरामीटर को बदलने की आवश्यकता है, तो बहुत सी जगहों को अद्यतन करने की आवश्यकता है।

तो, कोड इस तरह बढ़ाया जा सकता है:

// main method
final int NUM_COUNT = 6;
final int LOTTERY_SIZE = 12; // use small number for testing purpose

int[] userNums = getUserNumbers(NUM_COUNT, 1, LOTTERY_SIZE);
int[] lottery  = getLotteryNumbers(NUM_COUNT, 1, LOTTERY_SIZE);

System.out.print("The winning numbers are: ");
Arrays.stream(lottery).forEach(i -> System.out.print(i + " "));
System.out.println();

int win = getWinCount(lottery, userNums);

System.out.printf("%d out of %d numbers guessed.%n", win, NUM_COUNT);

if (win == NUM_COUNT) {
    System.out.println("You won the jackpot!");
}else {
    System.out.println("Better luck next time!");
}

उपयोगकर्ता द्वारा संख्या इनपुट पढ़ें और उपयोगकर्ता इनपुट को मान्य करें।

public static int[] getUserNumbers(int numCount, int minNum, int maxNum) {
    int[] userNums = new int[numCount];
    Scanner input = new Scanner(System.in);
    System.out.printf("Input %d numbers between %d and %d%n", numCount, minNum, maxNum);
    for (int i = 0; i < numCount; i++) {
        userNums[i] = input.nextInt();
        if (userNums[i] < minNum || userNums[i] > maxNum) {
            System.out.println("Invalid number, please correct");
            i--;
        }
    }
    return userNums;
}

सरणियों का उपयोग करके लॉटरी नंबर जेनरेट करें और सुनिश्चित करें कि कोई डुप्लिकेट न हो, हालांकि इस मामले में Set का उपयोग करना अधिक सुविधाजनक होगा।

public static int[] getLotteryNumbers(int numCount, int minNum, int maxNum) {
    Random random = new Random();
    int[] lottery = new int[numCount];
    for (int i = 0; i < numCount; i++) {
        int n = minNum + random.nextInt(maxNum);
        boolean duplicate = false;
        for (int j = i - 1; j >= 0; j--) {
            if (lottery[j] == n) {
                duplicate = true; 
                break;
            }
        }
        if (!duplicate) {
            lottery[i] = n;
        } else {
            i--;
        }
    }
    return lottery;
}

अनुमानित संख्याओं की संख्या की गणना करें। इसे Set और विधि retainAll का उपयोग करके भी सुगम बनाया जा सकता है।

public static int getWinCount(int[] lottery, int[] user) {
    int win = 0;
    for (int i = 0; i < lottery.length; i++) {
        for (int j = 0; j < user.length; j++) {
            if (lottery[i] == user[j]) {
                win++;
                break;
            }
        }
    }
    return win;
}

उदाहरण आउटपुट

Input 6 numbers between 1 and 12
2 3 6 7 10 11
The winning numbers are: 7 6 3 8 11 5 
4 out of 6 numbers guessed.
Better luck next time!
1
Alex Rudenko 17 मार्च 2021, 18:07

आपको अपनी संख्या-संबंधी विधियों में फ़ील्ड का उपयोग करना चाहिए, क्योंकि आपकी संख्याएँ स्थानीय रूप से उत्पन्न होती हैं, न कि वर्ग-वार।

0
Ilia Komarov 17 मार्च 2021, 15:02