java wont resolve to a variable

1.8k views Asked by At

I am trying to make a rock paper scissors game in java. i have my base code here

import java.util.Scanner; 
import java.util.Random;
public class RPSBase
{
  public static void main(String args[])
  {
    Random rndm = new Random();
    int c =0 + rndm.nextInt(3);
    Scanner c2 = new Scanner(System.in);
    String pc = c2.next();
    switch (c)
    {
      case 1: 
        String choice = "r";
        char ch = choice.charAt(0);
        break;
      case 2:
        choice = "p";
        ch = choice.charAt(0);
        break;
      case 3:
        choice = "s";
        ch = choice.charAt(0);
        break;
    }
    switch (ch)
    {
      case 'r':
        if (pc == "r")
          System.out.println("It's a tie");
        else if (pc == "p")
          System.out.println("win");
        else if (pc == "s")
          System.out.println("lose");
        break;
      case 'p':
        if (pc == "p")
          System.out.println("It's a tie");
        else if (pc == "s")
          System.out.println("win");
        else if (pc == "r")
          System.out.println("lose");
        break;
      case 's':
        if (pc == "s")
          System.out.println("It's a tie");
        else if (pc == "r")
          System.out.println("win");
        else if (pc == "p")
          System.out.println("lose");
        break;
    }
  }
}

for some reason when i compile the program i get this error

1 error found:
File: C:\Users\Larry\RPSBase.java  [line: 26]
Error: ch cannot be resolved to a variable

Why do i get this error and how do i fix it? I have tried switch(choice) as well and that didn't work either.

2

There are 2 answers

9
skiwi On

You either need to declare ch above the switch (c), or declare ch in every case of the switch.

And since you seem to be wanting to use ch at a later point, you need this snippet:

char ch = '\u0000';
switch (c)
{
  case 1: 
    String choice = "r";
    ch = choice.charAt(0);
    break;
  case 2:
    String choice = "p";
    ch = choice.charAt(0);
    break;
  case 3:
    String choice = "s";
    ch = choice.charAt(0);
    break;

Note the declaring (char ch) at the top, and in the cases there are just assignments.

UPDATE: The same goes for String choice, however for this one it seems that it is better to declare it in every case.

A lot of the code could be improved, but I'm just answering your question here, you can for example just type ch = 'r' instead of String choice = "r"; ch = choice.charAt(0);

0
user2494817 On

When declaring char "ch" in the case of a switch statement, it can only be used for that case with that switch statement, in order to fix this you must declare:

char ch;

outside of the switch; right after the declaration of string pc.

I suggest using an IDE to further help you if you, an IDE will automatically pick this up and tell you to correct the error.