2017-07-14 59 views
0

所以我无法添加使用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; 
    } 
} 

该插件的ActionListener方法我已经尝试了许多不同的方法,如制作类实现一个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()); 
      } 
     } 
    } 

这是它现在是如何,找到一个Java 8教程(我使用Java 8,所以应该罚款后)? 如果它不明显JButtons在一个集合和所有球员相同的大小获得相同的金额开始。这是我的方法,应该调用无论哪个球员去第一...但它永远不会打印一行到控制台...

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

我觉得这应该在任何一种情况下都工作,但如果任何人有任何建议,将有助于这将是太棒了。提前致谢。

+0

因此,目前我可以点击任何JButtons - 在任何可见的框架上,没有任何东西会打印到控制台。 –

+0

玩家人数=:是否打印? – bradimus

+0

**不要。永远。**比较字符串与'=='!总是使用'equals()'方法。我们可以在第一个变量被设置的地方显示你的代码吗? –

回答

1

有些事情在代码中不太正确。

  1. 您的循环是不正确的:

    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循环立即中止。

  2. 您正在比较字符串与==千万别这么做!始终使用equals()来比较字符串。这是因为对于对象引用,==比较对象的标识(内存位置)。对于字符串,它是一样的。这就是为什么值为“player1”的字符串并不总是与具有相同值的另一个字符串具有相同的身份。 equals()方法用于比较被比较对象的值。

    由于hinted by Zabuza,this answer on StackOverflow解释了更多关于==.equals()之间有什么区别。


你也应该避免可变repetion像player1Cardsplayer2Cards等等。如果你延长游戏并允许16名玩家呢?你必须复制粘贴很多东西。解决这个问题的一种方法是为玩家使用阵列,例如playerCards[]。另外,您应该阅读更多关于Java中的面向对象的知识。它会指导你如何使用类和对象。

+0

扩展答案:另请参阅https://stackoverflow.com/questions/513832/how-do-i-compare-strings-in-java以获得关于'=='与'equals'上'=='的较好解释秒。 – Zabuza

+0

我只有4名球员,因为他们每人有11张牌。甲板上没有55张牌。谢谢您的回答。我会改变一些事情。 :) –