2017-03-15 6 views
0

ArrayListを含むクラスに問題があります。 コード:Arraylistで定義されたメソッドを呼び出すことができません

import java.util.ArrayList; 


public class AscendingPile { 
public ArrayList<Integer> pile = new ArrayList<Integer>() {{ 
    add(1); 
}}; 

public void lay(int card) throws IllegalArgumentException{ 
    int lastCard = pile.get(pile.size() - 1); 
    if(card > lastCard || card == lastCard - 10){ 
     pile.add(card); 
    } 
    else { 
     throw new IllegalArgumentException("...."); 
    } 
} 
// returns last card on the deck 
public int getCard() { 
    return pile.get(pile.size() - 1); 
} 

}

問題はlay方法です:代わりに新しいローカル変数を定義する私は、文はこのような何か見ている場合たい:

if(card > pile.getCard() || card == pile.getCard() - 10) 

をしかしのIntelliJはできないと言います解決シンボルgetCard()

希望する結果を得るためにコードを変更するにはどうすればよいですか?真である

+2

これは、 'getCard()'が 'ArrayList'で定義されたメソッドではないためです。 – azurefrog

+0

'getCard'は' ArrayList'クラスのメソッドではないので、 'pile'に対して' getCard'を呼び出すことはできません。これは 'pile.getCard()'です。単に 'pile.getCard()'ではなく 'getCard()'を呼び出してください。 – Jesper

+0

また、これをチェックして、コードを改善するのが面白いかもしれません:http://stackoverflow.com/a/14072408/7709364 –

答えて

1

が、IntelliJのは、シンボルgetCardを(解決できないと言う)

、ArrayListのクラスがgetCard(と呼ばれる方法はありません)

代わりにやって:

pile.getCard(); 

直接クラスのメソッドを呼び出す昇順ファイル

getCard(); 
+0

うまく動作します!迅速な対応のためにありがとうございます:-) – fatso88

+0

あなたは大歓迎です! –

0

すでに述べたように、ただgetCard()を呼び出すだけです。

また、現在カードゲームもコーディングしています。デッキにArrayListを使用する代わりに、代わりにStackを使用することを強くお勧めします。 (文書を参照)。

スタックには、pop()やpush()などの便利なメソッドが用意されています。

Popは、getCard()メソッドを使用しているように、スタックの最上部にあるオブジェクトを削除します。

+0

ご意見ありがとうございます。 Unfortunatellyそれは課題であり、私たちは現在スタックを使用することはできません。しかし、私は将来のプロジェクトのためにそれを念頭に置いておきます! – fatso88

+0

私は割り当てをもコーディングしていますが、私はイニシアチブを取ることは非常に関連性があり、この種のケースでは教師によく歓迎されていることを伝えることができます:) –

関連する問題