Поток управления в Java - несколько классов

1

Я новичок в java и участвую в учебном курсе oracle java. В этих учебниках я столкнулся с вопросом, связанным с несколькими классами. Класс, называемый Deck использует класс под названием " Cards. Я хочу знать, когда Class Deck когда-либо использовал основной метод в Class Cards. Ли линия потока когда-либо проходит основной метод Cards.

public class Card {
private final int rank;
private final int suit;

// Kinds of suits
public final static int DIAMONDS = 1;
public final static int CLUBS    = 2;
public final static int HEARTS   = 3;
public final static int SPADES   = 4;

// Kinds of ranks
public final static int ACE   = 1;
public final static int DEUCE = 2;
public final static int THREE = 3;
public final static int FOUR  = 4;
public final static int FIVE  = 5;
public final static int SIX   = 6;
public final static int SEVEN = 7;
public final static int EIGHT = 8;
public final static int NINE  = 9;
public final static int TEN   = 10;
public final static int JACK  = 11;
public final static int QUEEN = 12;
public final static int KING  = 13;

public Card(int rank, int suit) {
    assert isValidRank(rank);
    assert isValidSuit(suit);
    this.rank = rank;
    this.suit = suit;
}

public int getSuit() {
    return suit;
}

public int getRank() {
    return rank;
}

public static boolean isValidRank(int rank) {
    return ACE <= rank && rank <= KING;
}

public static boolean isValidSuit(int suit) {
    return DIAMONDS <= suit && suit <= SPADES;
}

public static String rankToString(int rank) {
    switch (rank) {
    case ACE:
        return "Ace";
    case DEUCE:
        return "Deuce";
    case THREE:
        return "Three";
    case FOUR:
        return "Four";
    case FIVE:
        return "Five";
    case SIX:
        return "Six";
    case SEVEN:
        return "Seven";
    case EIGHT:
        return "Eight";
    case NINE:
        return "Nine";
    case TEN:
        return "Ten";
    case JACK:
        return "Jack";
    case QUEEN:
        return "Queen";
    case KING:
        return "King";
    default:
        //Handle an illegal argument.  There are generally two
        //ways to handle invalid arguments, throwing an exception
        //(see the section on Handling Exceptions) or return null
        return null;
    }    
}

public static String suitToString(int suit) {
    switch (suit) {
    case DIAMONDS:
        return "Diamonds";
    case CLUBS:
        return "Clubs";
    case HEARTS:
        return "Hearts";
    case SPADES:
        return "Spades";
    default:
        return null;
    }    
}

public static void main(String[] args) {

    // must run program with -ea flag (java -ea ..) to
    // use assert statements
    assert rankToString(ACE) == "Ace";
    assert rankToString(DEUCE) == "Deuce";
    assert rankToString(THREE) == "Three";
    assert rankToString(FOUR) == "Four";
    assert rankToString(FIVE) == "Five";
    assert rankToString(SIX) == "Six";
    assert rankToString(SEVEN) == "Seven";
    assert rankToString(EIGHT) == "Eight";
    assert rankToString(NINE) == "Nine";
    assert rankToString(TEN) == "Ten";
    assert rankToString(JACK) == "Jack";
    assert rankToString(QUEEN) == "Queen";
    assert rankToString(KING) == "King";

    assert suitToString(DIAMONDS) == "Diamonds";
    assert suitToString(CLUBS) == "Clubs";
    assert suitToString(HEARTS) == "Hearts";
    assert suitToString(SPADES) == "Spades";

}
}

import java.util.*;

public class Deck {

public static int numSuits = 4;
public static int numRanks = 13;
public static int numCards = numSuits * numRanks;

private Card[][] cards;

public Deck() {
    cards = new Card[numSuits][numRanks];
    for (int suit = Card.DIAMONDS; suit <= Card.SPADES; suit++) {
        for (int rank = Card.ACE; rank <= Card.KING; rank++) {
            cards[suit-1][rank-1] = new Card(rank, suit);
        }
    }
}

public Card getCard(int suit, int rank) {
    return cards[suit-1][rank-1];
}
}
Теги:

2 ответа

1
Лучший ответ

Нет. main метод, реализованный в этом примере, предназначен для целей тестирования (обратите внимание на assert s).

  • 0
    Да, и чтобы использовать класс Deck, необходимо создать экземпляр объекта Deck, Deck deck = new Deck (); или Deck.method (), если метод является статическим методом.
  • 0
    Означает ли это, что удаление main () не повлияет на работу программы?
Показать ещё 4 комментария
1

Это очень типично, однако я бы сказал, что очень плохой обычай иметь main метод во всех возможных уроках и примерах. И да, это путает начинающих.

Код тестирования всегда должен быть отделен от проверенного кода. В "нормальном" коде для хорошего дизайна. В "школьном" коде для дидактической причины, поэтому ученики не смущены и видят хороший дизайн даже в школьном коде :)

Ещё вопросы

Сообщество Overcoder
Наверх
Меню