Jenna Crist
Jenna Crist

Reputation: 95

How do I resolve this 'Cannot find Symbol' error?

I'm trying to create a program that runs an effective lottery. However, I'm running into problems in my main method. I'm receiving the following error messages, and I'm not sure why! Any help would be appreciated. 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: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

Here is the method I believe the error is coming from:

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?");
            }
        }
    }

Again, I'm fairly sure I declared the variables so I'm not sure exactly where the issue lies. If any of my methods that I call appear to be part of the problem, let me know and I'll post those as well. If you see any other errors in my code don't hesitate to let me know!

Upvotes: 0

Views: 332

Answers (1)

Elliott Frisch
Elliott Frisch

Reputation: 201507

Well, you don't have a j variable (and userTix goes out of scope too soon). Simple as that. Try

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

And then change

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

to

userTix = new int[numTix][k];

Also, for the loop variable, you could use (for j) like

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

Note that starting at 0 means you probably wanted < (not <=).

Upvotes: 3

Related Questions