【问题标题】:non-static variable cannot be referenced from static context [JAVA] [duplicate]不能从静态上下文中引用非静态变量 [JAVA] [重复]
【发布时间】:2017-12-12 11:41:15
【问题描述】:

我们有一个学校项目,我们正在创建一个基于文本的二十一点游戏。我创建了不同的类,例如 BlackJackDeck、Card、Hand、Player 和 Dealer。我的老师希望我们有一个名为 BlackJack 的课程,如果游戏逻辑是这样的话。我尝试在 BlackJack 中创建一个 main 方法,并添加了一个参考来洗牌我的 BlackJackDeck 套牌。但它说“不能从静态上下文引用非静态可变长度 leken”。如果我没有 main 方法,我的程序将无法运行。这是我的代码:

package blackjack;
import java.util.ArrayList;

/**
 * @version 1.0
 * @author robert.englund
 */
public class BlackJack {

ArrayList<Spelare> spelare = new ArrayList<>(); //List with players
BlackJackKortlek leken = new BlackJackKortlek(4); //BlackJackDeck
Dealer dealer = new Dealer(); //The dealer

public static void main(String[] args) {

    leken.blanda(); //Shuffle deck

}


}

我应该怎么做才能使游戏可运行以便编写游戏逻辑? 提前致谢!

【问题讨论】:

  • 这会对你有所帮助 - docs.oracle.com/javase/tutorial
  • 为您的 BlackJack 对象创建一个构造函数,其中包含 shuffle 牌组,然后添加“new BlackJack();”代替你现在洗牌的地方。

标签: java static non-static


【解决方案1】:

您无法从静态上下文访问非静态变量。 您的变量(非静态)在 main 方法(静态)之外。
如下声明你的变量:

static ArrayList<Spelare> spelare = new ArrayList<>();
static BlackJackKortlek leken = new BlackJackKortlek(4);
static Dealer dealer = new Dealer();

或者在main里面声明:

public static void main(String[] args) {
    ArrayList<Spelare> spelare = new ArrayList<>(); //List with players
    BlackJackKortlek leken = new BlackJackKortlek(4); //BlackJackDeck
    Dealer dealer = new Dealer();
}

【讨论】:

    【解决方案2】:

    你应该实例化BlackJackKortlek leken = new BlackJackKortlek(4);

    不符合您的 main() 方法。完成后,您可以调用方法。

    【讨论】:

      【解决方案3】:

      您可以简单地将 leken 声明为静态变量。

      private static BlackJackKortlek leken = new BlackJackKortlek(4); 
      

      您还应该阅读 static 关键字的实际含义。

      【讨论】:

        【解决方案4】:

        您试图在 static 方法中访问非静态变量 leken,这是您不应该做的,原因是 instance variables 仅在您创建对象时才会显示为 @ 987654323@方法无需创建对象即可访问。

        public static void main(String[] args) {
           leken.blanda(); // leken is non-static variable.
        }
        

        所以,在 main 方法中创建对象。

        public static void main(String[] args) {
               BlackJackKortlek leken = new BlackJackKortlek(4); //BlackJackDeck
               leken.blanda(); // leken is non-static variable.
            }
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2011-05-12
          • 2013-12-02
          • 2013-12-16
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2019-03-17
          相关资源
          最近更新 更多