Как устранить ошибку "Не удается найти символ"? - PullRequest
0 голосов
/ 06 августа 2020

Я пытаюсь создать программу, которая запускает эффективную лотерею. Однако в основном методе у меня возникают проблемы. Я получаю следующие сообщения об ошибке и не знаю почему! Любая помощь будет оценена. Лотерея. java: 171: ошибка: не удается найти символ

            for (j = 0; j <= numTix; j++) {
                 ^
  symbol:   variable j
  location: class Lottery
Lottery.java:171: error: cannot find symbol
            for (j = 0; j <= numTix; j++) {
                        ^
  symbol:   variable j
  location: class Lottery
Lottery.java:171: error: cannot find symbol
            for (j = 0; j <= numTix; j++) {
                                     ^
  symbol:   variable j
  location: class Lottery
Lottery.java:172: error: cannot find symbol
                currTicket = userTix[j];
                             ^
  symbol:   variable userTix
  location: class Lottery
Lottery.java:172: error: cannot find symbol
                currTicket = userTix[j];
                                     ^
  symbol:   variable j
  location: class Lottery
Lottery.java:176: error: cannot find symbol
                    bestRow = j;
                              ^
  symbol:   variable j
  location: class Lottery
Lottery.java:180: error: cannot find symbol
            for(int x = 0; x < userTix.length; x++) {
                               ^
  symbol:   variable userTix
  location: class Lottery
Lottery.java:181: error: cannot find symbol
                System.out.print(userTix[bestRow][x]);
                                 ^
  symbol:   variable userTix
  location: class Lottery

Вот метод, который, по моему мнению, вызвал ошибку:

public static void main(String[] args) {
        Scanner scnr = new Scanner(System.in);
        int k;
        int n;
        int m;
        System.out.println("First, let's set up the game!");
        System.out.print("How many distinct numbers should the player pick? ");
        k = scnr.nextInt();
        System.out.println(k);
        if (k < 1) {
            System.out.print("Error - number must be greater than or equal to 1! Please try again. ");
            k = scnr.nextInt();
            System.out.print(k);
        }
        System.out.print("Ok. Each of those " + k + " numbers should range from 1 to what? ");
        n = scnr.nextInt();
        System.out.print(n);
        if (n <= k) {
            System.out.print("Error - number must be greater than or equal to " + k + ". Try again. ");
            n = scnr.nextInt();
            System.out.print(n);
        }
        System.out.print("Ok. And finally, the bonus number should range from 1 to what? ");
        m = scnr.nextInt();
        System.out.println(m);
        if (m < 1) {
            System.out.print("Error - number must be greater than or equal to 1. Try again. ");
            m = scnr.nextInt();
            System.out.println(m);
        }
        System.out.println("There are " + numPossibleTickets(k, n, m) + " possible tickets in this game.");
        double chanceWin = 1.0 / numPossibleTickets(k, n, m);
        System.out.println("Each ticket has a " + chanceWin + " chance of winning the Jackpot. Let's play, good luck!");
        System.out.print("How many tickets would you like to buy? ");
        int numTix = scnr.nextInt();
        System.out.println(numTix);
        if (numTix < 1) {
            System.out.print("Error - must buy at least 1 ticket. Try again. ");
            numTix = scnr.nextInt();
            System.out.print(numTix);
        }
        for (int i = 1; i <= numTix; i++) {
            System.out.println("Ticket #" + i + "of " + numTix);
            getPlayerNumbers(k, n);
            System.out.println("Your tickets so far: ");
            int userTix[][] = new int[numTix][k];
            userTix[i - 1] = getPlayerNumbers(k, n);
            System.out.println(userTix + " Bonus: " + getBonusNum(m));
        }
        System.out.println("The moment of truth has arrived! Here are the drawn numbers: ");
        int[] drawnNums = getDrawnNumbers(k, n);
        System.out.println(drawnNums + " Bonus: " + randBonusNum(m));
        int randBonus = randBonusNum(m);
        boolean bonusCheck = bonusMatch(m, randBonus);
        if (numTix > 1) {
            int tempMatches = 0;
            int max = -1;
            int bestRow = 0;
            int[]currTicket = new int[k];
            for (j = 0; j <= numTix; j++) {
                currTicket = userTix[j];
                tempMatches = countMatches(currTicket, drawnNums);
                if (max < tempMatches) {
                    max = tempMatches;
                    bestRow = j;
                }
            }
            System.out.println("Here's your best ticket: ");
            for(int x = 0; x < userTix.length; x++) {
                System.out.print(userTix[bestRow][x]);
            }
            System.out.println(" Bonus: " + m);
            System.out.println("It matched " + max + "/" + k + "drawn numbers.");
            if (bonusCheck = true) {
                System.out.println("It did match the bonus number.");
            }
            else {
                System.out.println("It did not match the bonus number.");
            }
            if (max == k * 1 && bonusCheck == true) {
                System.out.println("WOOHOO! JACKPOT!!");
            }
            else {
                System.out.println("Sorry, no jackpot this time. Did you really expect anything else?");
            }
        }
    }

Опять же, я совершенно уверен Я объявил переменные, поэтому я не совсем уверен, в чем проблема. Если какой-либо из моих методов, которые я вызываю, кажется частью проблемы, дайте мне знать, и я опубликую их. Если вы заметите какие-либо другие ошибки в моем коде, не стесняйтесь, дайте мне знать!

1 Ответ

4 голосов
/ 06 августа 2020

Что ж, у вас нет переменной juserTix выходит за рамки слишком рано). Просто как тот. Попробуйте

int k;
int n;
int m;
int j;
int[][] userTix; // int userTix[][] is legal, but harder to read (IMO)

А затем измените

int userTix[][] = new int[numTix][k];

на

userTix = new int[numTix][k];

Кроме того, для переменной l oop вы можете использовать (для j ) например

for (int j = 0; j < numTix; j++) {

Обратите внимание, что, начиная с 0, вы, вероятно, хотели < (а не <=).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...