Проблема с Java - метод не определен, хотя я уже определил его в пакете - PullRequest
0 голосов
/ 28 декабря 2018

Я абсолютный новичок в Java и работаю над заданием, которое в основном состоит из готового / предварительно отформатированного кода, но я не могу заставить его работать.В Eclipse я получаю сообщение о том, что « Метод cardToString (MyCard) не определен для типа MyCardTester » еще до того, как я его запустил.Я смотрел на похожие вопросы о Stackoverflow,

( Eclipse говорит мне, что метод не определен, когда он явно определен , "Метод не определен длятипа "ошибка в простой программе в Java )

, и они имеют другие проблемы от меня.Я думаю, что моя проблема может быть с моим classpath или конфигурацией запуска, но эти настройки кажутся хорошими.Вот код:

Вот первый класс:

package EllevensGame;
import EllevensGame.MyCard;
import java.lang.String;

/**
 * This is a class that tests the Card class.
 */

public class MyCardTester {

    /**
     * The main method in this class checks the Card operations for consistency.
     *  @param args is not used.
     */
    public static void main(String[] args) {
        MyCard testCard = new MyCard("King", "Hearts", 13);
        String printStuff = cardToString(testCard);
        System.out.println(printStuff);
    }
}

Второй класс:

package EllevensGame;
/**
 * MyCard.java
 *
 * <code>MyCard</code> represents a playing card.
 */
import java.lang.String;

public class MyCard {

    /**
     * String value that holds the suit of the card
     */
    protected String suit;

    /**
     * String value that holds the rank of the card
     */
    protected String rank;

    /**
     * int value that holds the point value.
     */
    protected int pointValue;


   /**
     * Creates a new <code>Card</code> instance.
     *
     * @param cardRank  a <code>String</code> value
     *                  containing the rank of the card
     * @param cardSuit  a <code>String</code> value
     *                  containing the suit of the card
     * @param cardPointValue an <code>int</code> value
     *                  containing the point value of the card
     */
    public MyCard(String cardRank, String cardSuit, int cardPointValue) {
        //MyCard newCard = new MyCard(cardRank, cardSuit, cardPointValue); Not sure if this is right or not 
    }


    /**
     * Accesses this <code>Card's</code> suit.
     * @return this <code>Card's</code> suit.
     */
    public String suit() {
        return suit;
   }

    /**
     * Accesses this <code>Card's</code> rank.
     * @return this <code>Card's</code> rank.
     */
    public String rank() {
        return rank;
    }

   /**
     * Accesses this <code>Card's</code> point value.
     * @return this <code>Card's</code> point value.
     */
    public int pointValue() {
        return pointValue;
    }

    /** Compare this card with the argument.
     * @param otherCard the other card to compare to this
     * @return true if the rank, suit, and point value of this card
     *              are equal to those of the argument;
     *         false otherwise.
     */
    public boolean matches(MyCard otherCard) {
        if (otherCard.pointValue == (pointValue()) && (otherCard.rank.equals(rank)) && (otherCard.suit.equals(suit))) {
            return true;
        }
        else {return false;}
    }

    /**
     * Converts the rank, suit, and point value into a string in the format
     *     "[Rank] of [Suit] (point value = [PointValue])".
     * This provides a useful way of printing the contents
     * of a <code>Deck</code> in an easily readable format or performing
     * other similar functions.
     *
     * @return a <code>String</code> containing the rank, suit,
     *         and point value of the card.
     */
    //@Override
    public String cardToString(MyCard newCard) {
        String pointstring = String.valueOf(pointValue);
        String print = rank + " of " + suit + pointstring;
        return print;
    }
}

Конечное примечание: код должен создать «карту»Объект для карточной игры (Ellevens).

Спасибо !!

1 Ответ

0 голосов
/ 28 декабря 2018

cardToString - это метод в MyCard, вы должны вызывать его через ссылку.Измените

String printStuff = cardToString(testCard);

на

String printStuff = testCard.cardToString(testCard);

Хотя, возможно, было бы лучше, чтобы этот метод возвращал String на основе экземпляра this (что было бы более целесообразно).

public String cardToString() {
    return rank + " of " + suit + pointValue;
}

А потом

String printStuff = testCard.cardToString();

Затем я исправил ваш конструктор

public MyCard(String cardRank, String cardSuit, int cardPointValue) {
    this.rank = cardRank;
    this.suit = cardSuit;
    this.pointValue = cardPointValue;
}

И запустил его, получив

King of Hearts13
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...