2014-11-20 7 views
0

Колода Карт, содержащих 13 символов из 1-13, где значения показаны на карте представляют следующие числовые значения:колода карт с динамическим входным

'A' - 1 
'2' - 2 
'3' - 3 
'4' - 4 
'5' - 5 
'6' - 6 
'7' - 7 
'8' - 8 
'9' - 9 
'T' - 10 
'J' - 11 
'Q' - 12 
'K' - 13 

Программа должна удалить все экземпляры «K» карта и любые два последовательных номера, которые суммируются до 13.

Я написал программу для удаления экземпляров «K» и цифр, суммирующих до 13, но я не могу понять, как обеспечить ввод карточек от пользователя (с использованием класса сканера). Я знаю, что класс сканера принимает данные, но как я могу сравнить с существующим массивом с динамическим вводом. Пожалуйста, помогите

Вот мой код:

import java.util.Scanner; 
import java.util.*; 

public class CircleGame 
{ 
    static Scanner sc = new Scanner(System.in); 

    static int[] deckArray = {'A',2,3,4,5,6,7,8,9,'T','J','Q','K'}; 

    public int cardsLeft(int[] deck, int sum) 
    {   
     for(int i=0;i<deck.length;i++) 
     { 
      //char c = deck.charAt(i); 

      if(deckArray[i] == 'A') 
       deckArray[i] = 1; 
      if(deckArray[i] == 'T') 
       deckArray[i] = 10; 
      if(deckArray[i] == 'J') 
       deckArray[i] = 11; 
      if(deckArray[i] == 'Q') 
       deckArray[i] = 12; 
      if(deckArray[i] == 'K') 
       deckArray[i] = -1; 

      for(int j=0;j<deckArray.length;j++){ 
       for(int k=j+1;k<deckArray.length;k++){ 
        if(deckArray[j]+deckArray[k] == sum){ 
         deckArray[j] = -1; 
         deckArray[k] = -1; 
        } 
       } 
      } 
     } 
     int count = 0; 
     for(int aDeckArray:deckArray) 
     { 
      if (aDeckArray != -1) { 
       count++; 
      } 
     } 
      return count; 
    } 
    public static void main(String[] args) 
    { 
     CircleGame c = new CircleGame(); 
     c.cardsLeft(deckArray,13); 
    }  

} 

ответ

1

Если я вас понимаю хорошо, вы хотите, чтобы пользователь мог обеспечить колоду.

Наивный подход был бы сделать так:

Scanner sc = new Scanner(new InputStreamReader(System.in)); 

// building of a list containing all possible cards. This way, you have a link between the symbol and the number 
List<String> table = new ArrayList<String>(); 
table.add("A"); 
for (int i = 2; i <= 9; i++) { 
    table.add(String.valueOf(i)); 
} 
table.add("T"); 
table.add("J"); 
table.add("Q"); 
table.add("K"); 

int[] deck = new int[13]; 

for (int i = 0; i < 13; i++) { 
    String input = sc.nextLine(); 
    // if the given symbol is invalid, try again 
    if (!table.contains(input)) { 
    System.out.println("Invalid card"); 
    i--; 
    } else { 
    deck[i] = table.indexOf(input); // if "A"-> 1, if "4"-> 4, ... 
    } 
} 

// your internal logic to check if it is valid 

for (int i = 0; i < l; i++) { 
    if (deck[i] != -1) { 
    System.out.println(String.valueOf(deck[i])); 
    } 
} 
+0

любая идея, как я могу напечатать неудаленных карты колоды? – kittu

+0

@ KiritiKomaragiri я отредактировал мой ответ, это то, что вы ищете? – fxm

+0

Оцените свой быстрый ответ, но в качестве примера я отправляю образец требуемого вывода: 'Если пользователь вводит« KKKKKAQT23 » Возврат: 1 Карты K удаляются, оставляя AQT23. AQ затем удаляются, потому что они добавляют до 13, оставляя T23. Поскольку колода обертывается вокруг, а T и 3 складываются до 13, они также удаляются, просто оставляя 2.' – kittu

Смежные вопросы