如何显示数组中所有卡牌?重写toString方法技术求助
解决Java中Card对象输出内存地址的问题
嘿,我完全懂你遇到的麻烦——当你打印自己创建的Card数组元素时,出来的全是Card@wods903je0d这种看不懂的内存地址,对吧?这其实是Java的默认行为在搞鬼,咱们重写toString()方法就能轻松搞定。
为什么会出现这种情况?
所有Java类都默认继承自Object类,而Object类里的toString()方法默认返回的是:
getClass().getName() + '@' + Integer.toHexString(hashCode())
翻译过来就是「类名@哈希码十六进制」,也就是你看到的那些奇怪字符串。咱们要做的就是在Card类里重新定义这个方法,让它返回咱们想要的卡牌信息。
怎么重写toString()方法?
找到你的Card类,在里面添加下面这段代码就行——根据你的Card类实际属性调整内容:
假设你的Card类有suit(花色)和rank(点数)两个核心属性,重写后的方法可以这样写:
public class Card { // 你的Card类属性,比如: private String suit; // 比如"红桃"、"黑桃"、"方块" private String rank; // 比如"A"、"K"、"10"、"2" // 你的构造方法、getter/setter方法... @Override public String toString() { // 按你想要的格式返回卡牌信息,这里举个例子 return rank + " of " + suit; // 如果你想更中式一点,也可以写成:suit + rank } }
打印数组的小提醒
如果要打印整个卡牌数组,记得用Arrays.toString()方法,而不是直接打印数组本身——直接打印数组还是会输出数组的内存地址。示例代码:
import java.util.Arrays; // 假设你已经初始化好了cardArray数组 Card[] cardArray = new Card[52]; // 初始化卡牌的代码... // 正确打印方式 System.out.println(Arrays.toString(cardArray));
这样一来,输出的就会是像[A of 红桃, K of 黑桃, ...]这种清晰的卡牌信息,再也看不到乱糟糟的内存地址啦!
内容的提问来源于stack exchange,提问作者Waynar Bocangel
相关产品推荐
相关产品推荐

