William Markley
William Markley

Reputation: 31

Variable not being recognized in method

I am relatively new to Java, and I am writing a simple program to play rock, paper, scissors. This is the code:

import java.util.Random;
import java.util.Scanner;

public class Main {
  public static String comChoice() {
    Random rand = new Random();
    int num = rand.nextInt(299) + 1;

    if (num >= 1 && num <= 99) {
      String pick = "SCISSORS";
    } else if (num >= 100 && num <= 199) {
      String pick = "ROCK";
    } else if (num >= 200 && num <= 299) {
      String pick = "PAPER";
    }
    return pick;
  }

  public static void main(String args[]) {
    int wins = 0;
    int losses = 0;
    int ties = 0;
    while (1 == 1) {
      Scanner s = new Scanner(System.in);
      System.out.println("Would you like to play Rock Paper Scissors? Y/N");
      String n = s.next();

      if (n.equalsIgnoreCase("Y")) {
        Scanner t = new Scanner(System.in);
        System.out.println("Enter your pick: rock, paper, or scissors");
        String userChoice = t.next();

        String pick = comChoice();

        if (userChoice.equalsIgnoreCase("SCISSORS") && pick.equalsIgnoreCase("SCISSORS")) {
          System.out.println("TIE");
          ties++;
        } else if (userChoice.equalsIgnoreCase("ROCK") && pick.equalsIgnoreCase("SCISSORS")) {
          System.out.println("WIN");
          wins++;
        } else if (userChoice.equalsIgnoreCase("PAPER") && pick.equalsIgnoreCase("SCISSORS")) {
          System.out.println("LOSE");
          losses++;
        } else if (userChoice.equalsIgnoreCase("SCISSORS") && pick.equalsIgnoreCase("ROCK")) {
          System.out.println("LOSE");
          losses++;
        } else if (userChoice.equalsIgnoreCase("SCISSORS") && pick.equalsIgnoreCase("PAPER")) {
          System.out.println("WIN");
          wins++;
        } else {
          System.out.println("Enter a valid choice");
        }
      } else {
        System.out.println("You won " + wins + " matches");
        System.out.println("You tied " + ties + " matches");
        System.out.println("You lost " + losses + " matches");
        break;
      }
    }
  }
}

I'm getting an error in my method which says this:

Main.java:23: error: cannot find symbol
  return pick;
         ^
symbol:   variable pick
location: class Main
1 error

exit status 1

I can't figure out how to fix this error. I would appreciate your input as well as any other general advice

Thanks

Upvotes: 1

Views: 1364

Answers (4)

Faiq Irfan
Faiq Irfan

Reputation: 181

You declared your variable pick in the if else structure. Doing this causes the problem that your variable cannot be accessed from outside that if else structure. In simple words, the variable pick's scope is limited to your if else structure. You have to declare your variable (and initialize it as well, otherwise you'll get an error in your case) outside of the if else structure. Like this:

String pick = null;
if(num >= 1 && num <= 99) {
...
...
...// All your if's and else's
}
return pick;

Hope this helps!

Upvotes: 0

TechnoTech
TechnoTech

Reputation: 799

variable pick is out of scope. You have to declare it outside the all if else statements. if all if else condition fail then comChoice method will not be able to find variable pick (as it is declared inside the if else block only)which it has to return.

corrected code

import java.util.Scanner;
import java.util.Random;

public class Main
{
  public static String comChoice()
  {
    Random rand = new Random();
    int num = rand.nextInt(299) + 1;

    String pick = "";

    if(num >= 1 && num <= 99)
    {
      pick = "SCISSORS";
    }
    else if (num >= 100 && num <= 199)
    {
      pick = "ROCK";
    }
    else if (num >= 200 && num <= 299)
    {
      pick = "PAPER";
    }
    return pick;
  }
  public static void main (String args[])
  {
    int wins = 0;
    int losses = 0;
    int ties = 0;
    while (1 == 1)
    {
      Scanner s = new Scanner (System.in);
      System.out.println("Would you like to play Rock Paper Scissors? Y/N");
      String n = s.next();

      if (n.equalsIgnoreCase("Y"))
      {
        Scanner t = new Scanner (System.in);
        System.out.println("Enter your pick: rock, paper, or scissors");
        String userChoice = t.next();

        String pick = comChoice();

        if (userChoice.equalsIgnoreCase("SCISSORS") && pick.equalsIgnoreCase("SCISSORS"))
        {
          System.out.println("TIE");
          ties++;
        }
        else if (userChoice.equalsIgnoreCase("ROCK") && pick.equalsIgnoreCase("SCISSORS"))
        {
          System.out.println("WIN");
          wins++;
        }
        else if (userChoice.equalsIgnoreCase("PAPER") && pick.equalsIgnoreCase("SCISSORS"))
        {
          System.out.println("LOSE");
          losses++;
        }
        else if (userChoice.equalsIgnoreCase("SCISSORS") && pick.equalsIgnoreCase("ROCK"))
        {
          System.out.println("LOSE");
          losses++;
        }
        else if (userChoice.equalsIgnoreCase("SCISSORS") && pick.equalsIgnoreCase("PAPER"))
        {
          System.out.println("WIN");
          wins++;
        }
        else
        {
          System.out.println("Enter a valid choice");
        }
      }
      else
      {
        System.out.println("You won " + wins + " matches");
        System.out.println("You tied " + ties + " matches");
        System.out.println("You lost " + losses + " matches");
        break;
      }
    }
  }
}

Upvotes: 0

Jens
Jens

Reputation: 69440

Your variable is only visible in the if statement. Read about scopes.

Change to:

import java.util.Scanner;
import java.util.Random;

public class Main {
    public static String comChoice() {
        Random rand = new Random();
        int num = rand.nextInt(299) + 1;
        String pick = null;
        if (num >= 1 && num <= 99) {
            pick = "SCISSORS";
        } else if (num >= 100 && num <= 199) {
            pick = "ROCK";
        } else if (num >= 200 && num <= 299) {
            pick = "PAPER";
        }
        return pick;
    }

....
}

Upvotes: 1

Tom Mac
Tom Mac

Reputation: 9853

pick is out of scope. Try declaring at the start of the comChoice method.

Hence :

public static String comChoice() {
    String pick=null;
    Random rand = new Random();
    int num = rand.nextInt(299) + 1;

    if (num >= 1 && num <= 99) {
        pick = "SCISSORS";
    } else if (num >= 100 && num <= 199) {
        pick = "ROCK";
    } else if (num >= 200 && num <= 299) {
        pick = "PAPER";
    }
    return pick;
}

Upvotes: 0

Related Questions