Массивы карточек, на которых нет вывода - PullRequest
1 голос
/ 06 мая 2020

Для этого я создал два файла java. Card. java содержит все переменные экземпляров и Jack. java просто запустит всю card , когда будет запрошено.

Мой код для карты . java:

public class Card {

    private int rank;
    private int suit;


    public Card(int rank, int suit) {

        this.rank = rank;
        this.suit = suit;
    }

    public static final String[] RANKS = {
        null, "Ace", "2", "3", "4", "5", "6", "7",
        "8", "9", "10", "Jack", "Queen", "King"};
    public static final String[] SUITS = {
        "Clubs", "Diamonds", "Hearts", "Spades"};

    public String toString() {
        String s = RANKS[this.rank] + " of " + SUITS[this.suit]; // we are actually using the instances variables to access the array elements 
        return s;

    }

    public boolean equals(Card that) { // this that could be any variables 
        return this.rank == that.rank && this.suit == that.suit;
    }
}

Мой код для Jack. java:

public class Jack {

    public static void main(String[] args) {

        Card small = new Card(0,1); // creates the small object
        Card card = new Card(11,1); // cretes the card object
        System.out.println(small); // prints the small class
        System.out.println(card); // prints the card class
        System.out.println(small.equals(card)); // compares small with cards

        Card[] cards = new Card[52];

        int index = 0; // to keep track
        for (int suit = 0; suit <= 3; suit++) { // outer loop
            for (int rank = 1; rank <= 13; rank++) { // inner loop
                cards[index] = new Card(rank, suit);
                index++;
            }
        }

        public static void printDeck(Card[] cards) {
            for (Card card : cards) {
                System.out.println(card);
            }
        }   

        System.out.println(Arrays.toString(cards));
    }  
}

Весь код работает, но PrintArray не работает. Я попытался воспользоваться помощью книги, но не понимаю, в чем может быть ошибка. Заранее спасибо. Я также попытался поместить метод void printDeck в файл Card. java, но снова потерпел неудачу.

Ответы [ 2 ]

1 голос
/ 06 мая 2020
Проблема

: ваши константы - нет.

Использование массивов publi c - плохая идея. Тот факт, что вы застряли там final, этого не исправит; массивы просто не могут делать здесь то, что вы хотите. Я предлагаю вам использовать вместо этого список. Попытайся! Напишите это: Card.RANKS[1] = "10"; // hahaha I'm cheating!

Попробуйте вместо этого:

public static final List<String> RANKS = List.of("", "Ace", "2", "3", ...);

или еще лучше, используйте java так, как он должен был использоваться. С типами и именами:

public enum Rank {
    ACE, R2, R3, R4, R5, R6, R7, R8, R9, R10, JACK, QUEEN, KING;
}

public class Card {
    private final Rank rank;
}

проблема: равных нет.

Способ java работает так: имя метода во время выполнения немного сложнее, чем просто имя. На самом деле это имя, и всех типов всех параметров, но без каких-либо обобщений, которые есть в них, и возвращаемый тип. Итак, полное имя равно equals(java.lang.Object)boolean. Ваш метод equals НЕ переопределяет , так как на самом деле у него другое имя; его имя equals(Card)boolean. Не то же самое. Для любого кода, который взаимодействует с методом equals (например, hashmap, hashset, list.contains и т. Д.), Он не будет работать. Ваш метод equals должен принимать Object и проверять, является ли это Card; если это не так, очевидно, это не равно. Итак, добавьте: if (!(that instanceof Card)) return false;. Если карта не окончательная, лучше проверить if (that == null || that.getClass() != Card.class) return false; по несколько сложным причинам.

Это отличная идея добавить @Override к любому методу, который, по вашему мнению, должен переопределить. Это ничего не делает, если только ваш метод ничего не отменяет, и в этом случае компилятор сообщает вам об этом: Эй, приятель, ваше предположение не подтверждается, а затем отказывается компилировать код, чтобы вы могли исправить это.

проблема: что там делает ноль?

Ваши РАНКИ начинаются с нуля, но вы создаете new Card(0,1);, который [A] не читается, а [B] означает, что теперь у вас есть нулевой ранг. В этом нуле нет необходимости. Кроме того, если вы используете перечисления и типы, он может стать более читаемым: new Card(Rank.ACE, Suit.DIAMONDS);.

Печать не работает

Вы поместили метод в метод (printDeck метод находится внутри метода main). Java (в настоящее время) не поддерживает это. Переместите метод так, чтобы он был родственным.

0 голосов
/ 06 мая 2020

Ваш код не будет компилироваться как есть. Метод printDeck () в настоящее время находится внутри определения метода main () и должен быть перемещен за его пределы. После перемещения метода он работает должным образом. Вот модифицированный класс Джека:

public class Jack {

    public static void main(String[] args) {

        Card small = new Card(0,1); // creates the small object
        Card card = new Card(11,1); // cretes the card object
        System.out.println(small); // prints the small class
        System.out.println(card); // prints the card class
        System.out.println(small.equals(card)); // compares small with cards

        Card[] cards = new Card[52];

        int index = 0; // to keep track
        for (int suit = 0; suit <= 3; suit++) { // outer loop
            for (int rank = 1; rank <= 13; rank++) { // inner loop
                cards[index] = new Card(rank, suit);
                index++;
            }
        }
       printDeck(cards);
    }

    public static void printDeck(Card[] cards) {
        for (Card card : cards) {
            System.out.println(card);
        }
    }
}

И полученный результат:

null of Diamonds
Jack of Diamonds
false
Ace of Clubs
2 of Clubs
3 of Clubs
4 of Clubs
5 of Clubs
6 of Clubs
7 of Clubs
8 of Clubs
9 of Clubs
10 of Clubs
Jack of Clubs
Queen of Clubs
King of Clubs
Ace of Diamonds
2 of Diamonds
3 of Diamonds
4 of Diamonds
5 of Diamonds
6 of Diamonds
7 of Diamonds
8 of Diamonds
9 of Diamonds
10 of Diamonds
Jack of Diamonds
Queen of Diamonds
King of Diamonds
Ace of Hearts
2 of Hearts
3 of Hearts
4 of Hearts
5 of Hearts
6 of Hearts
7 of Hearts
8 of Hearts
9 of Hearts
10 of Hearts
Jack of Hearts
Queen of Hearts
King of Hearts
Ace of Spades
2 of Spades
3 of Spades
4 of Spades
5 of Spades
6 of Spades
7 of Spades
8 of Spades
9 of Spades
10 of Spades
Jack of Spades
Queen of Spades
King of Spades
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...