2017-07-14 14 views
0

私はメソッドが実際に働いていることを知ることができるように、いくつかのsystem.out.printlnsの間にあるメソッドaddActionListeners()を使用して、actionlistenersを追加するのに問題があります。なぜ私のアクションリスナーは機能していませんか?

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

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);を使用するなど、さまざまな方法を試してみましたので、私はこれに変更しましたこれは現在、Java 8のチュートリアルを見つけた後です(私はJava 8を使用していますので、うまくいくはずです) JButtonがコレクション内にあり、すべてのプレーヤーが同じサイズカードの最初から始める。これは私がこのように感じる先攻プレイヤーに関係なく呼び出すことになっている私の方法です...しかし、それはコンソールにラインを印刷したことがない...

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

は例のいずれかで働いているはずですが、誰かがそれが幻想的になるのに役立つ提案があれば。前もって感謝します。

+0

現在のところ、JButtonのいずれかをクリックすることができます。表示されているフレームで何も表示されず、コンソールに何も印刷されません。 –

+0

'Number of players =:'は印刷されますか? – bradimus

+0

**しないでください。 **文字列と '=='を比較する!必ず 'equals()'メソッドを使用してください。 'first'変数が設定されている場所でコードを表示できますか? –

答えて

1

コードの中には、正しくないものがあります。

  1. あなたのforループが正しくありません:

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

    どうやらそのため、長さ:

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

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

    でなければならないあなたのforループに書き換えることができます。 player1Cardsは常に素晴らしい0より大きい場合、最初のループでi == player1Cards.lengthの条件がfalseになり、forループが直ちに中止されます。

  2. 文字列を==と比較しています。 決してしないでください!文字列を比較するのに常にequals()を使用してください。オブジェクト参照の場合、==はオブジェクトの身元(メモリ位置)を比較するためです。文字列については、同じです。そのため、値が「player1」の文字列が、同じ値を持つ別の文字列と同じIDであるとは限りません。 equals()メソッドは、比較されるオブジェクトの値を比較するように設計されています。

    hinted by Zabuza,this answer on StackOverflow==.equals()の違いについて詳しく説明しています。


またplayer1Cardsplayer2Cardsエトセトラのような変数repetionを避ける必要があります。あなたがゲームを拡張し、16人のプレーヤーを許可するとどうなりますか?あなたは多くのものをコピー・ペーストする必要があります。この問題を解決する1つの方法は、プレーヤーのために配列を使用することです(例:playerCards[])。また、Javaのオブジェクト指向についてもう少し詳しくお読みください。クラスとオブジェクトをいつどのように使用するかを説明します。

+0

答えを拡張するには: '=='と '' String''の '' equals''についての良い説明については、https://stackoverflow.com/questions/513832/how-do-i-compare-strings-in-javaも参照してください。 s。 – Zabuza

+0

彼らはそれぞれ11枚のカードを持っているので、私は4人しかいません。デッキには55枚のカードがありません。あなたの答えをありがとう。私はいくつかのことを周りに変えます。 :) –

関連する問題