java不会解析为变量

时间:2013-12-08 21:16:24

标签: java drjava

我正在尝试用java制作一个石头剪刀游戏。我有我的基本代码

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;
    }
  }
}

由于某些原因,当我编译程序时,我收到此错误

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

为什么我会收到此错误,我该如何解决?我也试过了switch(选择),但也没用。

2 个答案:

答案 0 :(得分:2)

您需要在ch上方声明switch (c),或在交换机的每个ch中声明case

由于您似乎希望稍后使用ch,因此您需要以下代码段:

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;

请注意顶部的声明(char ch),case中只有作业。

更新: String choice同样如此,但对于这个,似乎最好在每个case中声明它。

很多代码都可以改进,但我只是在这里回答您的问题,例如,您只需输入ch = 'r'而不是String choice = "r"; ch = choice.charAt(0);

答案 1 :(得分:1)

在switch语句的情况下声明char“ch”时,它只能用于那个switch语句的情况,为了解决这个问题,你必须声明:

char ch;

在开关外面;在声明字符串pc之后。

我建议使用IDE进一步为您提供帮助,如果您,IDE会自动选择并告诉您更正错误。