Проблема
: ваши константы - нет.
Использование массивов 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 (в настоящее время) не поддерживает это. Переместите метод так, чтобы он был родственным.