【问题标题】:Receiving Compiler Errors for a Undeclared Class and then a Duplicate Class接收未声明类和重复类的编译器错误
【发布时间】:2016-04-05 04:35:43
【问题描述】:

我刚刚创建了一个程序,它创建了一个卡片对象数组,将它们随机播放并打印出来。但是我遇到了以下错误,作为一名学生,我无法理解原因。

错误:

"HW6GetBig.java:23: 错误:类 Card 是公共的,应该在 一个名为 Card.java 的文件 public class Card {"

"HW6GetBig.java:39: 错误:DeckOfCards 类是公开的,应该是 在名为 DeckOfCards.java 的文件中声明 public class DeckOfCards {"

"HW6GetBig.java:11: 错误:找不到符号 DeckOfCards myDeckofCards = new DeckofCards();"

到目前为止,我被困住了,不确定为什么 Class 会出现未声明。如果我在 netbeans 中将文件名更改为 Card,我仍然会收到错误消息,指出已找到重复的类。请帮忙。

非常感谢, - 协同作用

 class HW6GetBig
    {
        public static void main(String[] args)
        {
            DeckOfCards myDeckofCards = new DeckofCards();
            myDeckofCards.deckShuffler(); // Randomizes / Shuffles the Cards in the Deck, using a Random # and Swaps

            // Print 52 Cards in the Order in which they are dealt
            for (int i = 0; i < 13; i++) {
                // Deal and Print 4 Cards
                System.out.printf("%-20s%-20s%-20s%-20s\n",
                myDeckofCards.dealCard(), myDeckofCards.dealCard(),
                myDeckofCards.dealCard(), myDeckofCards.dealCard());
            }
        }
    }
    public class Card {
        //Card Class represents a Virtual Playing Card in our Deck
        private String rank; // Ranks Of Card
        private String suit; // Suit Of Card

        // Two Argument Constructor initializes card's face and suit
        public Card(String cardRank, String cardSuit) {
            rank = cardRank; // Intializing Values of Card's Rank
            suit = cardSuit; // Intializing Values of Card's Suit
        }
        // Return String representing the Card
        public String CardToString() {
            return rank + " of " + suit;
        }

    }
    public class DeckOfCards {
        private Card deck[]; //Declaration of Array of Card Objects
        private int topCard; //Card to be Dealt
        private final int NUM_CARDS = 52; // Constant # Of Cards in a Standard Deck
        int random = (int)(Math.random()*52+1);

        public DeckOfCards() {
            String ranks[] = {"Ace","Two","Three","Four","Five","Six","Seven",
            "Eight","Nine","Ten","Jack","Queen","King"};
            String suits[] = {"Spades","Hearts","Clubs","Diamonds"};

            deck = new Card[NUM_CARDS]; // Creating an Array of Card Objects
            topCard = 0; // Setting Current Card so 1st Card is deck[0]
            // Filling the Seats of our Empty Deck Room with Card Objects
            for (int i = 0; i < deck.length; i++) {
                deck[i] = new Card(ranks[i % 13], suits[i / 13]);
                // End of Deck Of Cards Constructor
            }
        }
            public void deckShuffler() {
                // After Shuffling, The Deck should begin at deck[0] once again
                topCard = 0;
                // For each Card, pick a "Random Card/#" and Swap.
                for(int i = 0; i < deck.length; i++) {
                    // Obtaining a Random # Between 0 and 51.
                    int j = random;
                    // Swapping Currently Selected Card (i) with Random Card (j)
                    Card tempObject = deck[i];
                    deck[i] = deck[j];
                    deck[j] = tempObject;
                }
            }
                public Card dealCard() {
                    // Ensure the Top Card does not exceed the Deck Length
                    if (topCard < deck.length) {
                    return deck[topCard++];
                    } else {
                    return null;
                    }
                }
            }

【问题讨论】:

    标签: java class compiler-errors


    【解决方案1】:

    错误信息说明了一切:

    类 Card 是公共的,应在名为 Card.java 的文件中声明
    类 DeckOfCards 是公共的,应在名为的文件中声明 DeckOfCards.java

    这些是您的选择:

    • 按照错误消息中的建议,将这两个类移到它们自己的文件中。
    • 从类声明中删除 public 修饰符。

    请参阅 Java 语言规范中的相关部分,7.6. Top Level Type Declarations:

    当且仅当包存储在文件系统中(第 7.2 节),主机 系统可以选择强制执行它是编译时的限制 如果在由 键入名称加上扩展名(例如 .java 或 .jav),如果其中一个 以下是正确的:

    • 该类型被声明该类型的包的其他编译单元中的代码引用。

    • 该类型声明为public(因此可以从其他包中的代码访问)。

    【讨论】:

    • 非常感谢!你用一个直接的答案让问题对我来说更加明显,我的代码现在可以工作了。非常感谢您的帮助!
    猜你喜欢
    • 2018-05-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-22
    • 1970-01-01
    • 2015-10-17
    • 1970-01-01
    • 2016-10-31
    相关资源
    最近更新 更多