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 best solutions below

9
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
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.