【问题标题】:Java Printing error toString() won't printJava 打印错误 toString() 不会打印
【发布时间】:2015-09-09 00:02:04
【问题描述】:

我创建了一个模拟普通扑克牌的类 Card。在这个类中,我们将创建一个 toString() 方法来返回卡片的字符串表示形式。我们还必须创建另一个名为 CardTestDriver 的类来打印特定的卡片。我已经为这些类编写了代码,但是当我运行它时,什么都没有打印出来。我不确定出了什么问题,如果有人能看到错误在哪里会有所帮助吗?一切都在编译,但没有打印。这也是我第一次使用枚举类型,所以也许我做错了什么?帮助将不胜感激!

这是我的卡片类:

public class Card{

   public enum Suit { 
    CLUBS, DIAMONDS, HEARTS, SPADES; 
   }

   public enum Rank { 
       ACE, ONE, TWO, THREE, FOUR, FIVE, SIX, SEVEN, EIGHT, 
                   NINE, TEN, JACK, QUEEN, KING
   }
   public enum Status {
    FACEUP, FACEDOWN
   }

  final Rank rank;
  final Suit suit;
  final Status status;

   public Card (final Rank rank, final Suit suit, final Status status) 
   {
    this.rank = rank;
    this.suit = suit;
    this.status = status;

   }

   public String toString()
   {
       return rank + " " + suit + " " + status;
   }

   }

这是我的 CardTestDriver.java 类

public class CardTestDriver{

    public void main(String[] args) { 

     new Card (Card.Rank.SEVEN,Card.Suit.SPADES,Card.Status.FACEDOWN);

     System.out.println(toString());
    } 
}

【问题讨论】:

  • 尝试打印卡片的实际实例,System.out.println(new Card (Card.Rank.SEVEN,Card.Suit.SPADES,Card.Status.FACEDOWN)); ...
  • 我试过了,但它不起作用 - 已编译,但没有打印出来
  • 为我打印 SEVEN SPADES FACEDOWN 就好了
  • @onay - 问题可能是主方法缺少“静态”声明。你在开这个班吗?如果是这样,必要的方法签名是public static void main(String[] args)
  • 是的,我也尝试过,但结果相同,没有打印出来

标签: java


【解决方案1】:

你要调用卡片的toString方法:

Card card = new Card (Card.Rank.SEVEN,Card.Suit.SPADES,Card.Status.FACEDOWN);
System.out.println(card.toString());

【讨论】:

  • 这是一个静态方法,所以你不能在没有实例的情况下从Object调用toString()CardTestDriver 永远不会被实例化。
  • @ElliottFrisch 是的。回答得有点快:)
  • @ElliottFrisch - 你在这里有所收获; Op 没有从静态上下文中调用 toString();事实上,main 方法根本不会被使用,是吗?
【解决方案2】:

您需要打印实际对象,例如 System.out.println(new Card(Card.Rank.SEVEN, Card.Suit.SPADES, Card.Status.FACEDOWN));...

public class CardTestDriver {

    public static void main(String[] args) {
        System.out.println(new Card(Card.Rank.SEVEN, Card.Suit.SPADES, Card.Status.FACEDOWN));
    }

    public static class Card {

        public enum Suit {
            CLUBS, DIAMONDS, HEARTS, SPADES;
        }

        public enum Rank {
            ACE, ONE, TWO, THREE, FOUR, FIVE, SIX, SEVEN, EIGHT,
            NINE, TEN, JACK, QUEEN, KING
        }

        public enum Status {
            FACEUP, FACEDOWN
        }

        final Rank rank;
        final Suit suit;
        final Status status;

        public Card(final Rank rank, final Suit suit, final Status status) {
            this.rank = rank;
            this.suit = suit;
            this.status = status;

        }

        @Override
        public String toString() {
            return rank + " " + suit + " " + status;
        }

    }
}

这会将SEVEN SPADES FACEDOWN 打印到控制台就好了

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-08-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-10
    • 2014-06-02
    相关资源
    最近更新 更多