简化描述
四种花色:分别用大写字母 P,K,H,T 表示
13种点数: 1-13
纸牌可以用ABC 的形式来表示:A 代表花色,BC代表数字,如果数字小于 10,会有一位补 0。
eg:花色是 P,数字是 9 的纸牌会表示成 P09。
一副完整的纸牌:13*4=52
要求:
你的程序要读入一个字符串,表示缺少的纸牌有哪些。
如果包含相同的纸牌(花 色数字都相同)输出 GRESKA,否则输出每种花色剩余的纸牌数量。
示例分析:
输入:P01K02H03H04
第一步:分割字符串
P01 K02 H03 H04 (每三个分为一组)
第二步:查重
利用set容器的特性:无重复性
如果set的大小等于s数组的大小,则没有重复元素,否则有重复元素
第三步:确定每种花色剩余的个数
第四步:完整代码
|
|
package 程序艺术方法实验;
import java.util.HashSet; import java.util.Scanner; import java.util.Set;
// B 纸牌识别 public class Card { public static void main(String[] args) { String str; Scanner scanner = new Scanner(System.in); System.out.println("请输入字符串:"); str = scanner.nextLine(); split(str); }
public static void split(String str) { String s[] = new String[str.length() / 3];//声明一个字符串数组保存分割出的字符串 int n = 0;//计数 for (int i = 0; i < str.length() / 3; i++) { s[i] = str.substring(n, n + 3);//从0开始每3个分割到一个字串保存进s[]数组 n = n + 3; } int count = 0; Set<String> set = new HashSet<String>();//声明一个泛型为String类型的set容器 for (String string : s) set.add(string);//将前面分割出的字符串添加进set容器中 if (set.size() == s.length) {//无重复元素 int p = 13;//记录牌的数量 int k = 13; int h = 13; int t = 13; for (String string : s) {//遍历字符串数组中的所有元素 switch (string.charAt(0)) {//判断每个元素第一个英文字母 case 'P': p--; break; case 'K': k--; break; case 'H': h--; break; case 'T': t--; break; } } System.out.printf("%d %d %d %d", p, k, h, t); } else//有重复元素 System.out.println("GRESKA"); } } |