为什么我的actionlisteners不能工作?

vulvrdjw  于 2021-07-09  发布在  Java
关注(0)|答案(1)|浏览(322)

因此,我在使用addactionlisteners()方法添加actionlisteners时遇到了问题,该方法位于某些system.out.printlns之间,这样我就可以知道该方法实际上是在工作。

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

addactionlistener方法我尝试了许多不同的方法,例如使类实现actionlistener,以及使用 player1Cards[i].addActionListener(this); ... 这不起作用,所以我改成这样:

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?");
}

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

cygmwpex

cygmwpex1#

代码中有些地方不太正确。
for循环不正确:

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

必须是

for (int i = 0; i < player1Cards.length; i++)

for循环可以重写为:

{
    int i = 0;
    while (i == player1Cards.length) {
        // code inside for loop
        i++;
    }
}

因为很明显 player1Cards 总是大于0,条件 i == player1Cards.lengthfalse 在第一个循环中,导致for循环立即中止。
您正在将字符串与 == . 千万别那么做!始终使用 equals() 比较字符串。那是因为对于对象引用, == 比较对象的标识(内存位置)。对于弦,也是一样的。这就是为什么一个值为“player1”的字符串并不总是与另一个值相同的字符串具有相同的标识。这个 equals() 方法用于比较被比较对象的值。
正如zabuza所暗示的,这个关于stackoverflow的答案更多地解释了 == 以及 .equals() .
你也应该避免像这样的变量重复 player1Cards , player2Cards 等等。如果你延长游戏时间,允许16人玩呢?你要复制粘贴很多东西。解决这个问题的一种方法是为玩家使用数组,例如 playerCards[] . 另外,您应该多读一点关于java中的面向对象的知识。它将指导您如何使用类和对象。

相关问题