【问题标题】:java wont resolve to a variablejava不会解析为变量
【发布时间】:2013-12-08 21:16:24
【问题描述】:

我正在尝试用 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(choice) 也没有用。

【问题讨论】:

  • 考虑ch 是在哪里声明的?变量有作用域。它们只能在该范围内使用。

标签: java drjava


【解决方案1】:

您要么需要在switch (c) 上方声明ch,要么在开关的每个case 中声明ch

而且由于您以后似乎想使用ch,您需要这个sn-p:

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),cases 中只有赋值。

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

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

【讨论】:

  • 原语不能是null
  • 您不能将char 初始化为null(请参阅this post)。如果你不初始化,你会得到一个编译错误。
  • @SotiriosDelimanolis 我的错误(没有在 IDE 中输入),已修复。
  • 请注意,您仍然必须将其初始化为某个默认值,否则当您尝试在 switch 之外使用它时编译器会报错。
  • @SotiriosDelimanolis 请参阅docs.oracle.com/javase/tutorial/java/nutsandbolts/…,我认为不需要将原语初始化为默认值。然而,在switchObjects 中确实是这种情况,String 除外。
【解决方案2】:

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

char ch;

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

我建议使用 IDE 来进一步帮助您,如果您这样做,IDE 会自动接收并告诉您更正错误。

【讨论】:

    猜你喜欢
    • 2011-11-27
    • 1970-01-01
    • 2015-03-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多