1. ホーム
  2. java

[解決済み] 抽選アプリケーションの作成:配列に乱数を埋め込む

2022-02-11 23:39:03

質問

Javaで宝くじアプリを作っています。私の問題は、すべてが整っていると思うのに、(IDEが)「"」と表示することです。 int lotteryNumbersCount = Eck_LotteryClass.getLotteryNumbers().length; は静的である必要があります。そこで、私はそれをstatic intに変更し、その後、私のクラスでそれを再び変更する必要があります。問題は、最終的に実行したときに、ランダムな抽選データですべて0を得ることです。私の方法のエラーを見つけるのを助けてください。私はここに完全な初心者と私はここでオンラインを見てきましたが、私はちょうどどこかにコードをコピーせずにそれを理解するために試してみたいです。

Eck_LotteryClass

import java.util.Random;



public class Eck_LotteryClass {
//instance field
private  int lotteryNumbers [];


//Create random lottery numbers method array
public  int [] getRandomNumbers(){
    lotteryNumbers = new int [5];
    Random r = new Random();
    for(int i = 0; i < 5; i++)
        lotteryNumbers[i] = r.nextInt(10);

    return lotteryNumbers;
}



public int compareNumbers(int[] usersNumbers) {

            int matchedNums = 0;
            if (usersNumbers.length == lotteryNumbers.length) {
                for (int i = 0; i < lotteryNumbers.length; i++) {
            if (usersNumbers[i] == lotteryNumbers[i]) {
                matchedNums ++;
                    }
                }
            }

            return matchedNums;}

// Display the random lottery numbers for the user
public int [] getLotteryNumbers() {
    return lotteryNumbers;
}




}

Eck_LotteryTester

import java.util.Scanner;
import java.util.Arrays;


public class Eck_LotteryTester{

public static void main(String[] args) {

    Eck_LotteryClass lottery = new Eck_LotteryClass();

    int lotteryNumbersCount = Eck_LotteryClass.getLotteryNumbers().length;

    System.out.println("The Pennsylvania Lottery\n");
    System.out.println("There are " + lotteryNumbersCount
            + " numbers in my lottery, they are 0 through 9. "
            + "See if you can win big CASH prizes!!!\n");

    // Asks the user to enter five numbers.
    Scanner keyboard = new Scanner(System.in);
    int numbers[] = new int[lotteryNumbersCount];

    for (int index = 0; index < numbers.length; index++) {
        System.out.print(String.format("Enter Number %d: ", index + 1));
        numbers[index] = keyboard.nextInt();
    }

    // Display the number of digits that match the randomly generated
    // lottery numbers.

    int match = lottery.compareNumbers(numbers);

    if (match == lotteryNumbersCount) {

        // If all of the digits match, display a message proclaiming the
        // user a grand prize winner.
        System.out.println("\nYOU WIN, GO SEE D. LEETE FOR YOUR GRAND PRIZE!!!");

    } else {

        System.out.println("\nThe winning numbers are " +  Arrays.toString(Eck_LotteryClass.getLotteryNumbers()) + 
                "\nYou matched " + match + " number(s).");

    }

  }
}

解決方法は?

変更

  int lotteryNumbersCount = Eck_LotteryClass.getLotteryNumbers().length;

になります。

  int lotteryNumbersCount = lottery .getLotteryNumbers().length;

であれば、メソッドのシグネチャを static に変更する必要はありません。また、同じ変数について話すことになります。

また

// Display the random lottery numbers for the user
public int [] getLotteryNumbers() {
    return lotteryNumbers;
}

になります。

    // Display the random lottery numbers for the user
public int [] getLotteryNumbers() {
    return getRandomNumbers();
}

つまり、配列が初期化されるわけです。そして

public  int [] getRandomNumbers

になります。

private  int [] getRandomNumbers

問題ない