2017-03-15 6 views
0

Ich habe Probleme mit einer Klasse, die ich geschrieben habe, die eine ArrayList enthält. Code:Kann definierte Methode auf Arraylist nicht aufrufen

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

}

Problem ist die lay Methode: Statt eine neue lokale Variable definiert, ich möchte, wenn Aussage etwas wie folgt aussehen:

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

aber IntelliJ sagt kann nicht auflösen symbol getCard()

Wie kann ich meinen Code ändern, um das gewünschte Ergebnis zu erhalten?

+2

Das liegt daran, dass 'getCard()' keine Methode ist, die für 'ArrayList' definiert ist. – azurefrog

+0

'getCard' ist keine Methode der Klasse' ArrayList', daher kann man 'getCard' nicht auf' pile' aufrufen, was Sie tun: 'pile.getCard()'. Rufen Sie einfach 'getCard()', nicht 'pile.getCard()'. – Jesper

+0

Überprüfen Sie auch dies, könnte für die Verbesserung Ihres Codes interessant sein: http://stackoverflow.com/a/14072408/7709364 –

Antwort

1

aber IntelliJ sagt nicht Symbol getCard()

Das ist wahr, Arraylist-Klasse hat keine Methode namens getCard()

anstatt das zu tun lösen:

pile.getCard(); 

rufen Sie direkt die Methode der Klasse AscendingPile

getCard(); 
+0

Funktioniert gut! Vielen Dank für die schnelle Antwort :-) – fatso88

+0

Sie sind herzlich willkommen! –

0

Wie bereits gesagt, rufen Sie einfach getCard().

Ich bin gerade dabei, ein Kartenspiel zu programmieren. Anstatt ArrayList für dein Deck zu verwenden, empfehle ich dringend, stattdessen Stack zu verwenden. (siehe Dokumentation https://docs.oracle.com/javase/7/docs/api/java/util/Stack.html).

Stack bietet Ihnen nützliche Methoden wie pop() und push().

Pop entfernt das Objekt an der Spitze des Stapels, genau wie Sie es jetzt mit Ihrer Methode getCard() tun.

+0

Vielen Dank für Ihr Feedback. Leider ist es eine Aufgabe und wir können Stack für jetzt nicht verwenden. Aber ich werde es für zukünftige Projekte behalten! – fatso88

+0

Ich schreibe auch für Aufgaben, und ich kann Ihnen sagen, dass das Ergreifen von Initiativen sehr wichtig ist und von Lehrern in dieser Art von Fällen gut aufgenommen wird :) –