2016-02-03 4 views
1

Мне просто нужна быстрая помощь с моим toString. Это включает в себя игральные карты.Ошибка toString Ошибка: несовместимые типы: int не может быть преобразован в String "

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. Тем не менее, я бегу в ошибку:

"error: incompatible types: int cannot be converted to String"

ответ

2

Добавление двух char S вместе фактически добавляет их значения Юникода и возвращает целое число. Если вы хотите, чтобы вместо того, чтобы объединить их вместе, как String, то сделайте следующее:

return rank2 + "" + suit; 

Это сформирует String и присоединять suit до конца rank2. Так что если rank2 был «J», а suit - «H», «JH» будет возвращен.

+1

«char» не является значением ASCII. Это блок кода Unicode/UTF-16. –

3

В Java, char типа рассматривается как int. char Тип поддерживает арифметическую операцию, поэтому их можно добавить. Поэтому, когда вы используете оператор +, он добавляет свои значения. Но поскольку тип char и тип int являются разными примитивными типами, они несовместимы для арифметической операции.

Если вам нужна конкатенации, то вам необходимо изменить свой код:

return String.valueOf(rank2) + String.valueOf(suit); 
+0

Этот ответ может быть улучшен, если он точно объяснил, почему OP получает ошибку несовместимых типов. – DNA

2

Дело в том, что символ может быть прочитан как значение int. При попытке выполнить арифметические функции на символе он будет использовать значение байта символа. Java не может неявно использовать int в String, поскольку String не рассматривается как примитивный тип данных в Java. Вам нужно использовать метод .valueOf() класса String, чтобы явно указать Java, что вы хотите использовать его как String.

String.valueOf(input_your_value_here); 
0

Наиболее эффективным способом для этого будет следовать

return new StringBuilder(rank2).append(suit).toString(); 

Вот только создается один объект и решает цель.