Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/378.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 编译器认为我是在静态上下文中从另一个类调用变量,但我';我不是_Java_Class_Arraylist_Compiler Errors - Fatal编程技术网

Java 编译器认为我是在静态上下文中从另一个类调用变量,但我';我不是

Java 编译器认为我是在静态上下文中从另一个类调用变量,但我';我不是,java,class,arraylist,compiler-errors,Java,Class,Arraylist,Compiler Errors,我想让我在21点项目中的经销商类打印arrayList“theDeck”的前两张“卡”。我收到一个编译器错误(稍后显示),无法理解它的含义。这是我为一个类“Deck”编写的代码,该类制作一副牌,洗牌,并将它们放入arrayList“theDeck”中: 我的错误是什么?这两种方法都不是静态的。。。我是大傻瓜吗? 我试着改变庄家来扩展游戏而不是套牌,反之亦然,同样的问题。 (如果您需要更多代码,请告诉我,我将编辑此帖子。) 编辑:我现在意识到有很多相关的问题。对不起,哈哈。请耐心等待我,我是一个新

我想让我在21点项目中的经销商类打印arrayList“theDeck”的前两张“卡”。我收到一个编译器错误(稍后显示),无法理解它的含义。这是我为一个类“Deck”编写的代码,该类制作一副牌,洗牌,并将它们放入arrayList“theDeck”中:

我的错误是什么?这两种方法都不是静态的。。。我是大傻瓜吗? 我试着改变庄家来扩展游戏而不是套牌,反之亦然,同样的问题。 (如果您需要更多代码,请告诉我,我将编辑此帖子。)

编辑:我现在意识到有很多相关的问题。对不起,哈哈。请耐心等待我,我是一个新的编码和这个网站。

Deck
是一个类的名称
theDeck()
不是类方法;您必须在类的实例上调用它

有两种方法可以让它发挥作用。一种方法是实例化
Deck
对象,并对其调用
theDeck()

Deck deck = new Deck();
hand.add(deck.theDeck().toString());
另一种方法是将Deck()设置为静态:

public static ArrayList<String> theDeck() {
// save shuffled deck in an arraylist
   ArrayList<String> theDeck = new ArrayList<String>();
   for (int i = 0; i < n; i++) {
      theDeck.add(deckArray[i]);
   }
   return theDeck;
}
publicstaticarraylistthedeck(){
//在arraylist中保存洗牌牌组
ArrayList theDeck=新建ArrayList();
对于(int i=0;i

这将使
Deck.theDeck()
工作-除了
n
是一个非静态字段;您需要将其设置为静态或作为方法参数传入。

theDeck()
是一个非静态方法。您已经使用了
Deck.theDeck()
。使用类名来调用一个方法意味着它本质上应该是静态的。Robo Mop我该如何修复它?看起来你的代码应该是
Deck object=new Deck();对象。theDeck()如果您对您的程序有任何相关的查询,您可以编辑您的问题以添加它们,或者只需在此评论部分询问它们。确定。这基本上是我在其他评论部分所说的。下面是编译器错误日志:Ok,这不起作用。让我以另一种方式再试一次……您的第一个建议不起作用,编译器错误消息没有更改。第二个给了我一个我调用的所有其他非静态变量的列表。我会将所有这些设置为静态,然后返回给您。对于第一个建议,您确定已将类
Deck
替换为对象
Deck
,您在其中调用了
theDeck()
?我准确地复制了第一行的语法。不过,我最终还是利用了你的第二个建议让这个计划得以实施,所以我会给你应得的答案。谢谢你的帮助!我还将回滚我的更改,并再次尝试您的第一个建议,以确保。@Crummy如果要使方法本身保持静态,您还应该提到
theDeck()
中使用的任何变量都应该是静态的。在OP的代码中,
int n
是一个非静态的数据成员。如果您有时间,我可以为您打开另一个问题吗?当我试图在Dealer类中编辑dealSumCards方法以仅打印前两个元素而不是整个组时,它告诉我它需要a)和]
 ----jGRASP exec: javac -encoding UTF-8 -g @BlackJack_source_files_1638219710914506414jgr
Dealer.java:20: error: non-static method theDeck() cannot be referenced from a static context
      hand.add(Deck.theDeck().toString());
                   ^
1 error

 ----jGRASP wedge2: exit code for process is 1.
 ----jGRASP: operation complete.
Deck deck = new Deck();
hand.add(deck.theDeck().toString());
public static ArrayList<String> theDeck() {
// save shuffled deck in an arraylist
   ArrayList<String> theDeck = new ArrayList<String>();
   for (int i = 0; i < n; i++) {
      theDeck.add(deckArray[i]);
   }
   return theDeck;
}