Как часть моей программы, я печатаю «игральные карты» в консоли.Я использую символы юникода для мастей карт, поэтому я убедился, что консоль использует кодировку UTF-8.Однако с символами Unicode у меня возникают две странные проблемы, которые немного сложно объяснить;см. прикрепленную картинку.
- Символ юникода, кажется, изменяет размер шрифта текста после него (на рисунке видно, что после символа звездочки и цифры имеют меньший размер шрифта; буквы всегда имеют обычный размер)
- Символ Unicode печатается в виде знака вопроса, когда он находится сразу после числового символа, но будет правильно печататься на оставшейся части строки после буквенного символа (на рисунке см. Стопку 3, где он печатается? После9, но печатает правильный символ от J до)
Изображение консоли:
(Обратите внимание, я начинающий программист, поэтому мой код, вероятно, не очень эффективен!)
// Creates 2 character arrays for the card's suit and rank, then puts them into a string array in a form like "Q of ♧" (queen of clubs)
String allCards[] = new String[52];
char suit[] = {'\u2667', '\u2662', '\u2664', '\u2661'};
char rank[] = {'A', '2', '3', '4', '5', '6', '7', '8', '9', 'T', 'J', 'Q', 'K'};
int k=0;
for(int i=0; i<4; i++)
{
for(int j=0; j<13; j++)
{
allCards[k] = rank[j] + " of " + suit[i];
k++;
}
}
// Puts 21 random cards into an array, cardFullStack
Random r = new Random();
String cardFullStack[] = new String[21];
for(int i=0; i<21; i++)
{
int cardIndex = r.nextInt(52);
cardFullStack[i] = allCards[cardIndex];
}
// Prints 3 stacks of 7 cards each, see picture attached above.
for(int i=0; i<3; i++)
{
System.out.println("Stack " + (i+1) + ":");
System.out.println("****** ****** ****** ****** ****** ****** ****** ");
System.out.println("* * * * * * * * * * * * * * ");
for(int j=0; j<7; j++)
{
// ISSUE LINE:
// Should get the rank and suit of the card, and print something like "* Q♧ *"
System.out.print("* " + cardFullStack[7*i+j].charAt(0) + cardFullStack[7*i+j].charAt(5) + " * ");
}
System.out.println();
System.out.println("* * * * * * * * * * * * * * ");
System.out.println("****** ****** ****** ****** ****** ****** ****** ");
}
Я действительно понятия не имею, почему возникают эти проблемы.Это лучшее, что я мог заставить карты появляться.Я ценю любую помощь, которую вы можете предложить.Спасибо!