【问题标题】:java Variable cannot be resolved [duplicate]java变量无法解析[重复]
【发布时间】:2016-05-03 12:41:56
【问题描述】:

最后一行代码给出了一个错误 p1 无法解决。我相信这是因为它不在范围内,但我不确定如何解决这个问题。感谢任何帮助表示赞赏。

switch (Player1) 
{
    case "Human":
    { 
        HumanPlayer p1 = new HumanPlayer(sc, theGame);
        break;
    }
    case "Simple":
    { 
        SimpleComputerPlayer p1 = new SimpleComputerPlayer();
        break;
    }
    case "Random":
    { 
        RandomComputerPlayer p1 = new RandomComputerPlayer();
        break;
    }
    case "Expert":
    { 
        ExpertPlayer p1 = new ExpertPlayer();
        break;
    }
}                                                            
p1.setMySymbol(SquareStatus.CROSS);

【问题讨论】:

  • p1 在您的 case 块之外是未知的。在switch 之前声明它。
  • 除了变量超出块范围之外,这是将 p1 定义为可变对象的好方法吗?也许玩家类型都是某些Player 类型的后代,但是保持这一点,因为它们每个都有潜在的不同方法将变得很痛苦。

标签: java eclipse variables


【解决方案1】:

在交换机外部声明Player p1

Player p1;
switch (Player1) {...}
if(p1 != null) p1.setMySymbol(SquareStatus.CROSS);

【讨论】:

  • 完成此操作后,会出现“无法将播放器解析为类型”的错误消息。有什么建议吗?
  • @Matt 是的,因为它不存在。我猜你的超类是这样命名的。将其更改为您正在使用的超类名称。这是ExpertPlayerHumPlayer等继承的类。
  • 我想我现在已经到了哈哈,但它现在抱怨重复变量。
  • @Matt 我没有坐在你的桌面上。说不出哪里不对。除此之外,duplicate variables 不是表示明显的东西吗?
【解决方案2】:

您已经在案例中定义了 HumanPlayer。在 switch 之外定义它

【讨论】:

    【解决方案3】:

    当您在函数内使用 {} 时,您正在创建额外的范围级别,范围内定义的任何局部变量在范围外均不可见。

    【讨论】:

      【解决方案4】:

      在这些方面尝试一些东西怎么样

      public static Object getPlayer()
          {
              String Player1 = "Human";
      
      
              switch (Player1) {
                  case "Human": {
                      return new HumanPlayer();
      
                  }
                  case "Simple": {
                      return new SimpleComputerPlayer();
      
                  }
                  case "Random": {
                      return  new RandomComputerPlayer();
      
                  }
                  case "Expert": {
                      return  new ExpertPlayer();
      
                  }
      
              }
              return null;
          }
      

      那么也许

      worker.getPlayer().setMySymbol(SquareStatus.CROSS);
      

      可能需要做一些事情

      obj instance of HumanPlayer
      

      某处。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-04-10
        • 2015-01-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-11-27
        • 2011-06-23
        相关资源
        最近更新 更多