Покерная игра Ошибка логики Java

if (first == 11) 
{card1s = "Jack";
}else {
if (second == 11) 
{card2s = "Jack";
} else {
if (third == 11) 
{card3s = "Jack";
}
 else {
if (fourth == 11) 
{card4s = "Jack";
 }
else {
if (fifth == 11) 
{card5s = "Jack";
 }
else {
if (first == 12) 
{card1s = "Queen";
 }
else {
if (second == 12) 
{card2s = "Queen";
 }
else {
if (third == 12) 
{card3s = "Queen";
 }
else {
if (fourth == 12) 
{card4s = "Queen";
 }
else {
if (fifth == 12) 
{card5s = "Queen";
 }
else {
if (first == 13) 
{card1s = "King";
 }
else {
if (second == 13) 
{card2s = "King";
 }
else {
if (third == 13) 
{card3s = "King";
 }
else {
if (fourth == 13) 
{card4s = "King";
 }
else {
if (fifth == 13) 
{card1s = "King";
 }
else {
if (first == 1) 
{card1s = "Ace";
 }
else {
if (second == 1) 
{card2s = "Ace";
 }
else {
if (third == 1) 
{card3s = "Ace";
 }
else {
if (fourth == 1) 
{card4s = "Ace";
 }
else {
if (fifth == 1) 
{card5s = "Ace";
 }
 else {
 card1s = null;
 card2s = null;
 card3s = null;
 card4s = null;
 card5s = null;
}}}}}}}}}}}}}}}}}}}}
 if ((first >= 11) | (first == 1))
System.out.println("The first card is: " + card1s + first);

Это часть моей покерной программы, которая используется для перевода карточки в словах (например, 11 - это Джек, а 12 - королева), результат должен печатать переведенное слово вместе с числом, которое используется для определения слова, Программа компилируется без проблем, но проблема в том, что когда я запускаю эту программу, она создаст "Первая карта: Jack13" или "Queen13".

1 ответ

У вас есть много повторяющегося кода, а switch более apporpriate здесь. Также вы должны использовать методы. Пример:

public static void main(String[] args) {
 // ...
 String card1s = getCardAsString(first);
 // ...
 if ((first >= 11) || (first == 1))
 System.out.println("The first card is: " + card1s + first);
}

private static String getCardAsString(int i) {
 switch (i) {
 case 1:
 return "Ace";
 case 11:
 return "Jack";
 case 12:
 return "Queen";
 case 13:
 return "King";
 default:
 return String.valueOf(i); // or return null; not sure what you need
 }
}

if s:

private static String getCardAsString2(int i) {
 if (i == 1)
 return "Ace";
 if (i == 11)
 return "Jack";
 if (i == 12)
 return "Queen";
 if (i == 13)
 return "King";
 return String.valueOf(i);// or return null;
}

licensed under cc by-sa 3.0 with attribution.