2016-04-05 2 views
1

Ich habe gerade ein Programm erstellt, das ein Array von Kartenobjekten erstellt, sie mischt und sie druckt. Aber ich bekomme die folgenden Fehler und als Student habe ich Probleme zu verstehen, warum.Empfangen von Compilerfehlern für eine nicht deklarierte Klasse und dann eine Duplikatklasse

Fehler:

"HW6GetBig.java:23: error: class Card is public, should be declared in a file named Card.java public class Card {"

"HW6GetBig.java:39: error: class DeckOfCards is public, should be declared in a file named DeckOfCards.java public class DeckOfCards {"

"HW6GetBig.java:11: error: cannot find symbol DeckOfCards myDeckofCards = new DeckofCards();"

Wie bisher, ich bin stecken und nicht sicher, warum die Klasse als nicht angemeldete kommen wird. Wenn ich in Netbeans den Dateinamen in Card ändere, bekomme ich immer noch einen Fehler, der besagt, dass eine doppelte Klasse gefunden wurde. Bitte helfen Sie.

Vielen Dank, - Synergy

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; 
        } 
       } 
      } 

Antwort

0

Die Fehlermeldungen sagen alles:

class Card is public, should be declared in a file named Card.java
class DeckOfCards is public, should be declared in a file named DeckOfCards.java

Das sind Ihre Möglichkeiten:

  • bewegen sich beide dieser Klassen eine eigene Datei, wie in den Fehlermeldungen vorgeschlagen.
  • Entfernen Sie den Modifikator public aus den Klassendeklarationen.

finden Sie im entsprechenden Abschnitt in der Java Language Specification, 7.6. Top Level Type Declarations:

If and only if packages are stored in a file system (§7.2), the host system may choose to enforce the restriction that it is a compile-time error if a type is not found in a file under a name composed of the type name plus an extension (such as .java or .jav) if either of the following is true:

  • The type is referred to by code in other compilation units of the package in which the type is declared.

  • The type is declared public (and therefore is potentially accessible from code in other packages).

+0

Ihnen so vielen Dank! Du hast mir das Problem mit einer klaren Antwort deutlich vor Augen geführt, mein Code funktioniert jetzt. Ich schätze die Hilfe sehr! – Synergy76