первый раз постер, давний lurker.Сложность вызова ArrayLists и методы из другого класса в Java
Я второй студент по компьютерным наукам, пытающийся закодировать игру в блэкджек. Это не домашнее задание, это просто забавный проект. Это не сделано, поэтому сама игра не готова, поэтому, пожалуйста, игнорируйте этот раздел. Я потратил около двух часов на поиск SO для ответа, но не смог сравнить похожие проблемы других пользователей с моими собственными, поэтому я решил опубликовать мою проблему.
Моя проблема - это «колода» ArrayList. Из моего файла Blackjack.java, независимо от того, что я делаю, я не могу назвать это, я не могу вызывать какие-либо методы в классе карты, я не могу манипулировать им, я не могу ничего сделать, не получив какую-то ошибку.
public class Blackjack {
public int bet;
public int earnings = 0;
public int total = 100;
public boolean inputNeeded = true;
public Blackjack() {
Scanner s = new Scanner(System.in);
System.out.println(" Welcome to Blackjack.");
System.out.println(" Enter any key to continue.");
System.out.println(" Otherwise, please type Exit to quit.");
while (!s.nextLine().toString().toLowerCase().equals("exit")) //Main Game Loop - Only ends when user types Exit.
{
while (inputNeeded) {
System.out.println("You currently have $" + total + ".");
System.out.print("Please place your bets now. (Min $10): $");
if (s.hasNextInt()) {
bet = s.nextInt();
String betString = String.valueOf(bet);
inputNeeded = false;
if (bet < 10 || bet % 5 != 0) {
System.out.println("Your bet is not valid. Your bet must be a minimum of $10 and be a factor of 5.");
System.out.println("");
inputNeeded = true;
}
} else {
System.out.println("Your bet is not valid. Your bet must be a minimum of $10 and be a factor of 5.");
System.out.println("");
}
}
inputNeeded = true;
/*
* RESERVED SPACE (stuff to-do)
*
* Deal two cards to dealer and player.
* Flip cards, add totals
* If dealer has ace, prompt user if he wants insurance incase dealer blacjack
* Main loop, as long as neither player has blackjack, prompt user to hit, stay, double down etc.
* Once loop exits, calculate bets, add into totals.
* Increase count of how many games it's been, shuffle the decks at X games depending on howManyDecks (card.java)
*
* RESERVED SPACE (stuff to-do)
*
*/
deck.shuffle();
break; //until game is finished
}
System.out.print("Thank you for playing!");
}
public static void main(String[] args) {
Blackjack game = new Blackjack();
}
}
А класс карты (я знаю, что я мог бы сделать 52 карт в цикле, но для простоты я решил не). Из того, что я читал, если я не хочу статических методов, я должен использовать методы «getter». Я не совсем уверен, как методы возврата помогут мне, например, перетасовать колоду из класса блэкджека или вытащить карты из класса блэкджека (еще не реализованы), поскольку эти методы будут недействительными в качестве возвращаемого типа. Я даже не уверен, что мои методы getter верны, поскольку я никогда не пытался «получить» параметр, который требуется для конструктора раньше.
public class Card
extends Blackjack //Do I need to extend this? <---- not sure
{
public String name;
public int value;
public String suit;
public int howManyDecks = 8; //most casino's use 8 decks for blackjack
public Card(String n, int v, String s) {
name = n;
value = v;
suit = s;
ArrayList<Card> discard = new ArrayList<Card>(); //this will be for any card that is not currently in the deck, I could have called it 'temp'
ArrayList<Card> deck = new ArrayList<Card>(howManyDecks * 52);
for (int i = 0; i < howManyDecks; i++) {
deck.add(new Card("Ace", 1, "Hearts"));
deck.add(new Card("2", 2, "Hearts"));
deck.add(new Card("3", 3, "Hearts"));
deck.add(new Card("4", 4, "Hearts"));
deck.add(new Card("5", 5, "Hearts"));
deck.add(new Card("6", 6, "Hearts"));
deck.add(new Card("7", 7, "Hearts"));
deck.add(new Card("8", 8, "Hearts"));
deck.add(new Card("9", 9, "Hearts"));
deck.add(new Card("10", 10, "Hearts"));
deck.add(new Card("Jack", 10, "Hearts"));
deck.add(new Card("Queen", 10, "Hearts"));
deck.add(new Card("King", 10, "Hearts"));
deck.add(new Card("Ace", 1, "Spades"));
deck.add(new Card("2", 2, "Spades"));
deck.add(new Card("3", 3, "Spades"));
deck.add(new Card("4", 4, "Spades"));
deck.add(new Card("5", 5, "Spades"));
deck.add(new Card("6", 6, "Spades"));
deck.add(new Card("7", 7, "Spades"));
deck.add(new Card("8", 8, "Spades"));
deck.add(new Card("9", 9, "Spades"));
deck.add(new Card("10", 10, "Spades"));
deck.add(new Card("Jack", 10, "Spades"));
deck.add(new Card("Queen", 10, "Spades"));
deck.add(new Card("King", 10, "Spades"));
deck.add(new Card("Ace", 1, "Diamonds"));
deck.add(new Card("2", 2, "Diamonds"));
deck.add(new Card("3", 3, "Diamonds"));
deck.add(new Card("4", 4, "Diamonds"));
deck.add(new Card("5", 5, "Diamonds"));
deck.add(new Card("6", 6, "Diamonds"));
deck.add(new Card("7", 7, "Diamonds"));
deck.add(new Card("8", 8, "Diamonds"));
deck.add(new Card("9", 9, "Diamonds"));
deck.add(new Card("10", 10, "Diamonds"));
deck.add(new Card("Jack", 10, "Diamonds"));
deck.add(new Card("Queen", 10, "Diamonds"));
deck.add(new Card("King", 10, "Diamonds"));
deck.add(new Card("Ace", 1, "Clubs"));
deck.add(new Card("2", 2, "Clubs"));
deck.add(new Card("3", 3, "Clubs"));
deck.add(new Card("4", 4, "Clubs"));
deck.add(new Card("5", 5, "Clubs"));
deck.add(new Card("6", 6, "Clubs"));
deck.add(new Card("7", 7, "Clubs"));
deck.add(new Card("8", 8, "Clubs"));
deck.add(new Card("9", 9, "Clubs"));
deck.add(new Card("10", 10, "Clubs"));
deck.add(new Card("Jack", 10, "Clubs"));
deck.add(new Card("Queen", 10, "Clubs"));
deck.add(new Card("King", 10, "Clubs"));
}
}
public void shuffle() {
ArrayList<Card> temp = new ArrayList<Card>();
while (!deck.isEmpty()) {
int loc = (int) (Math.random() * deck.size());
temp.add(deck.get(loc));
deck.remove(loc);
}
deck = temp;
}
public Card getDeck() {
return deck;
}
public Sting getCardName(int arrayIndex) {
return deck(arrayIndex, Name);
}
public int getCardValue(int arrayIndex) {
return deck(arrayIndex, Value);
}
public String getCardSuit(arrayIndex, Suit);
{
return deck(arrayIndex, Suit);
}
}
Попробуйте запустить:
Exception in thread "main" java.lang.Error: Unresolved compilation problem:
deck cannot be resolved
at Blackjack.<init>(Blackjack.java:61)
at Blackjack.main(Blackjack.java:72)
Спасибо за помощь заранее!
'deck.shuffle();' вы не определили 'deck' в этой области. – Epicblood
'public String getCardSuit (arrayIndex, Suit); { колода возврата (arrayIndex, Suit); } ' Это забавная ошибка с точкой с запятой, что делает мое автоматическое форматирование неработоспособным. Эта точка с запятой: «Костюм»), ' – EpicPandaForce