Java: toString出错 "错误:不兼容的类型:无法将int转换为String"

4

我只需要快速帮助我的toString方法。这涉及到纸牌。

public class Card
{
  //Data
  private int rank;
  private char rank2;
  private char suit;

  //more codes (constructor etc.)

  //toString
    public String toString ( )
    {
    if (rank == 11)
        rank2 = 'J';
    else if (rank == 12)
        rank2 = 'Q';
    else if (rank == 13)
        rank2 = 'K';
    else if (rank == 14)
        rank2 = 'A';
    else
        return rank2 + suit; // <----error here.
    }

我正在尝试找出如何返回一张牌的点数和花色。例如,如果有人输入11作为点数和'S'作为花色,则应该返回JS。但是,我遇到了一个错误:
"错误:不兼容类型:int无法转换为String"
4个回答

5
在Java中,char类型被视为intchar类型支持算术运算,所以它们可以相加。因此,当您使用+运算符时,它会添加它们的值。但是由于char类型和int类型是不同的原始类型,它们无法进行算术运算。
如果您需要字符串连接,则需要更改代码为:
return String.valueOf(rank2) + String.valueOf(suit); 

1
如果解释清楚了为什么OP会收到不兼容类型的错误,那么这个答案可能会更好。 - DNA
看起来DNA ^评论的改进已经成功编辑了。 - cellepo

5

将两个char相加实际上是添加它们的Unicode值并返回一个整数。如果您希望将它们作为String连接起来,可以执行以下操作:

return rank2 + "" + suit;

这将形成一个String(字符串)并将suit(花色)附加到rank2(点数2)的末尾。所以如果rank2是'J'(牌点为Jack),suit是'H'(花色为Hearts),则返回“JH”。


2
一个 char 不是 ASCII 值,它是一个 Unicode/UTF-16 代码单元。 - Tom Blodget
看起来Tom Blodget的澄清已经被纠正/编辑到了这个答案中。 - cellepo

3
这样做效率最高的方式如下:
return new StringBuilder(rank2).append(suit).toString();

这里只创建了一个对象并解决了问题。


2

问题在于char可以被解释成int值。当对字符进行算术运算时,将使用字符的字节值。Java不能将int隐式转换为String,因为在Java中String不被视为原始数据类型。您需要使用String类的.valueOf()方法,以明确告诉Java您想要它作为字符串。

String.valueOf(input_your_value_here);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接