Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.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 为什么我的actionlisteners不能工作?_Java_Arrays_Jbutton_Actionlistener - Fatal编程技术网

Java 为什么我的actionlisteners不能工作?

Java 为什么我的actionlisteners不能工作?,java,arrays,jbutton,actionlistener,Java,Arrays,Jbutton,Actionlistener,因此,我在使用addActionListeners方法添加actionlisteners时遇到了问题,该方法位于某些system.out.PrintLN之间,因此我无法判断该方法是否实际工作 protected void whoFirst(String first) { int currPlayer = 0; System.out.println("Hello"); addActionListeners(); System.out.println("How are

因此,我在使用addActionListeners方法添加actionlisteners时遇到了问题,该方法位于某些system.out.PrintLN之间,因此我无法判断该方法是否实际工作

protected void whoFirst(String first) {
    int currPlayer = 0;
    System.out.println("Hello");
    addActionListeners();
    System.out.println("How are you?");
    if(first == "player1") {
        player1.setVisible(true);
        currPlayer = 1;
    }
    if(first == "player2") {
        player2.setVisible(true);
        currPlayer = 2;
    }
}
添加actionlistener方法我尝试了许多不同的方法,例如使类实现actionlistener,以及使用player1Cards[I].addActionListenerthis;。。。这不起作用,所以我改为:

private void addActionListeners() {
            System.out.println("Number of players = : " + players );
            for(int i = 0; i == player1Cards.length ; i++) {
            if(players == 2) {
                player1Cards[i].addActionListener(e -> cardActions());
                player2Cards[i].addActionListener(e -> cardActions());
            }
            if(players == 3) {
                player1Cards[i].addActionListener(e -> cardActions());
                player2Cards[i].addActionListener(e -> cardActions());
                player3Cards[i].addActionListener(e -> cardActions());
            }
            if(players == 4) {
                player1Cards[i].addActionListener(e -> cardActions());
                player2Cards[i].addActionListener(e -> cardActions());
                player3Cards[i].addActionListener(e -> cardActions());
                player4Cards[i].addActionListener(e -> cardActions());
            }
        }
    }
这就是目前的情况,在找到Java8教程后,我正在使用Java8,所以应该可以吗? 如果不是很明显的话,那么JButtons就在一个集合中,所有的玩家都会得到相同数量的牌。这是我的方法,无论哪个玩家先去都应该调用。。。但它从不向控制台打印一行

private void cardActions() {
    System.out.println("Whats up?");
}

我觉得这两种情况都应该有效,但如果有人有任何建议可以帮助我,那就太好了。提前感谢。

您的代码中有些地方不太正确

您的for循环不正确:

for (int i = 0; i == player1Cards.length; i++)
一定是

for (int i = 0; i < player1Cards.length; i++)
因为显然,player1Cards的长度始终大于0,所以条件i==player1Cards.length在第一个循环中为false,导致for循环立即中止

您正在将字符串与==进行比较。永远不要那样做!始终使用等于来比较字符串。这是因为对于对象引用,==比较对象的标识内存位置。对于字符串,它是相同的。这就是为什么一个值为player1的字符串并不总是与另一个值相同的字符串具有相同的标识。equals方法用于比较被比较对象的值

如图所示,解释了==和.equals之间的区别


你也应该避免像player1Cards,player2Cards等变量重复。如果你延长游戏时间,允许16名玩家参加呢?你必须复制粘贴很多东西。解决这个问题的一种方法是为玩家使用数组,例如playerCards[]。此外,您还应该进一步了解Java中的面向对象。它将指导您如何使用类和对象。

因此,目前我可以在任何可见的框架上单击任何JButton,并且没有任何内容打印到控制台上。玩家数量=:打印吗?没有。曾经将字符串与==进行比较!始终使用equals方法。我们可以展示你的代码在哪里设置第一个变量吗?为了扩展答案:另请参阅关于字符串上==与等于的良好解释。我只有4名玩家,因为他们每人有11张牌。一副牌里没有55张牌。谢谢你的回答。我会改变周围的一些事情
{
    int i = 0;
    while (i == player1Cards.length) {
        // code inside for loop
        i++;
    }
}