Использование инструкций switch для программы для игры в карты (Java)

#java #switch-statement

#java #оператор switch

Вопрос:

До сих пор я разобрался с моей программой, просто я не понимаю эти инструкции, которые мне дали (или, по крайней мере, понимаю, как их выполнять).

Когда я набираю 10, выводится «10 из», но когда я пытаюсь набрать 10S 10 пик, выводится только «Пики».

Надеюсь, кто-нибудь здесь может дать мне либо решение, либо указать мне правильное направление в решении моей проблемы:

Используйте оператор SWITCH, чтобы присвоить переменной результата начальное значение — значение карты

Используйте второй оператор SWITCH для объединения с результирующей переменной масти карты «

вот код:

 import java.util.*;


public class CardConverter {

    public static void main(String[] args) {
        Scanner keyboard = new Scanner(System.in);
        
        //will hold string that user will input
        String card, face, suit, resu<
        
        //getting input from user and telling them correct format
        System.out.println("Please enter either the number or face value intial of a card followed by the initial of it's suit (ie. QH for Queen of Hearts)");
        card = keyboard.nextLine();
        //gets first value
        face = card.substring(0);
        //sets substring for 10 only
        //substring for after all single digit/letter card faces
        suit = card.substring(1);
        
        
        //to print face and word of
        switch (face)
        {
        case "10":
            System.out.println("10 of ");
            break;
        case "2":
            System.out.println("2 of ");
            break;  
        case "3":
            System.out.println("3 of ");
            break;
        case "4":
            System.out.println("4 of ");
            break;  
        case "5":
            System.out.println("5 of ");
            break;
        case "6":
            System.out.println("6 of ");
            break;
        case "7":
            System.out.println("7 of ");
            break;
        case "8":
            System.out.println("8 of ");
            break;
        case "9":
            System.out.println("9 of ");
            break;
        case "J":
            System.out.println("Jack of ");
            break;
        case "Q":
            System.out.println("Queen of ");
            break;
        case "K":
            System.out.println("King of ");
            break;
        case "A":
            System.out.println("Ace of ");
            break;  
        }   
        //to print out card suit
        switch (suit)
            {
            case "H":
                    System.out.println("Hearts");
                break;
            case "C":
                System.out.println("Clubs");
                break;  
            case "S":
                System.out.println("Spades");
                break;
            case "D":
                System.out.println("Diamonds");
                break;
        }
    }
}
  

Комментарии:

1. Подсказка: card.substring(0); дает вам какое значение? Это что-нибудь в операторах case?

Ответ №1:

Ваша проблема начинается с card.substring(0); , что равно card , потому что подстрока из начала строки. Может быть, вы хотели card.charAt(0); ? Но это также неправильно, потому "10S" что будет иметь три символа, два для номинального значения.

Вам нужно будет специально обрабатывать трехсимвольный ввод или быть умнее с substring -ing .

Вы знаете, что масть всегда будет последним символом, поэтому используйте charAt для этого длину строки to .

 int suitIndex = s.length() - 1;
String suit = "" s.charAt(suitIndex);
String face = s.substring(0,suitIndex);
  

Вы также можете упростить случаи

 case "J":
    System.out.println("Jack of ");
    break;
case "Q":
    System.out.println("Queen of ");
    break;
case "K":
    System.out.println("King of ");
    break;
case "A":
    System.out.println("Ace of ");
    break;  
default:
    System.out.println(face   " of "); // handle all the numbers
    break;
  

Комментарии:

1. Ваше предложение было на самом деле идеальным решением, большое спасибо