非静态变量不能从静态上下文引用[JAVA]

时间:2017-12-12 11:41:16

标签: java static non-static

我们有一个学校项目,我们正在创建一个基于文本的黑杰克游戏。我创建了不同的类,如BlackJackDeck,Card,Hand,Player和Dealer。我的老师希望我们有一个名为BlackJack的课程,游戏逻辑将是。我试图在BlackJack中创建一个main方法,并添加了一个引用我的BlackJackDeck套牌的方法。但它表示“无法从静态上下文中引用非静态变量长度”。如果我没有主方法,我的程序将无法运行。这是我的代码:

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

}


}

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

4 个答案:

答案 0 :(得分:0)

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

发布您的main()方法。完成后,您可以调用方法。

答案 1 :(得分:0)

您无法从静态上下文访问非静态变量。 您的变量(非静态)超出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 :(得分:0)

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

private static BlackJackKortlek leken = new BlackJackKortlek(4); 

此外,您应该阅读static关键字的实际含义。

答案 3 :(得分:0)

您正试图在静态方法中访问非静态变量leken,这是您不应该做的,只有当您创建时,instance variables的原因才会出现在图片中可以在不创建对象的情况下访问static方法的对象。

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