자진화 같은 작은 게임에서 프로그래머가 되고 싶어요. 그들 중 대부분은 어렸을 때 그것을 가지고 놀았습니다! 이제 소후 면접 질문을 살펴보겠습니다! 코드를 사용하여 Zha Jinhua를 구현하는 방법을 알아보세요.
两个搜狐的程序员加了一个月班,终于放假了,于是他们决定扎金花渡过愉快的假期 。
총 52장의 일반 카드, 카드는 2,3,4,5,6,7,8,9, 10개의 J, Q, K, A 중 하나(크기가 증가함), 각 사람은 3장의 카드를 받습니다. 두 사람이 손에 들고 있는 카드 3장을 비교하여 더 큰 카드를 가진 사람이 승리합니다.
1. 3개의 동일한 카드는 표범입니다.
2. 3개의 카드가 서로 연결되어 직선을 이룹니다(A23은 포함되지 않습니다).
3. 레오파드>스트레이트>페어> 카드 종류가 같은 경우 카드 종류 값을 비교해보세요. (예: AAA>KKK, QAK>534, QQ2>10104) 두 플레이어 모두 특별한 카드 유형이 없는 경우 세 장의 카드 중 가장 큰 카드를 차례로 비교합니다. 더 큰 카드를 가진 사람이 승리합니다. 가장 높은 카드가 동일하면 두 번째로 높은 카드가 비교됩니다(예: 37K>89Q). 두 카드가 동일하면 무승부가 됩니다.
输入两个字符串代表两个玩家的牌(如”10KQ” “354”), 先输入的作为玩家1,后输入的作为玩家2
1 代表 玩家1赢 0 代表 平局 -1 代表 玩家2赢 -2 代表不合法的输入
KQ3 3Q9 10QA 6102 5810 7KK 632 74J 10102 K77 JKJ 926 68K 27A
1 1 -1 -1 1 1 -1
(1) 플레이어 1과 2의 문자열 입력을 받아 적법한지 확인
(2) 적법한 후 문자열을 문자열 배열로 분할합니다
(3) 문자열 배열 int 배열로 변환하고 정렬
(4) 3장의 카드가 같은지 확인
(5) 크기, 누가 지고 누가 이겼는지 비교
존재 10시에 문자열 쪼개짐의 문제: 문자열의 길이에 따라 쪼개짐을 판단할 수 있음
문자를 숫자로 변환: 먼저 얻은 모든 문자열을 대문자로 변환하여 소문자와 그런 다음 if를 사용하여 반환을 판단하세요
누가 지고 누가 이겼는지 비교하세요. 큰 것부터 작은 것까지 비교하고 먼저 표범이 있는지 판단한 다음 스트레이트를 판단하고 쌍을 판단하고 마지막으로 카드 없는 타입으로 판단
스트레이트 처리 문제
package 搜狐面试2016; import java.util.Arrays; import java.util.Scanner; public class Test1 { public static void main(String[] args) { // 2,3,4,5,6,7,8,9,10,J,Q,K,A Scanner scanner = new Scanner(System.in); boolean isContinue=true; while (isContinue) { //1.游戏规则 System.out.println("游戏规则:共52张普通牌,牌面为2,3,4,5,6,7,8,9,10,J,Q,K,A之一,大小递增,各四张; 每人抓三张牌。两人比较手中三张牌大小,大的人获胜。"); System.out.println("对于牌型的规则如下:"); System.out.println("1.三张牌一样即为豹子"); System.out.println("2.三张牌相连为顺子(A23不算顺子)"); System.out.println("3.有且仅有两张牌一样为对子 豹子>顺子>对子>普通牌型 在牌型一样时,比较牌型数值大小"); System.out.println("谁输谁赢:1 --代表玩家1赢;0 --代表 平局 ;-1 --代表玩家2赢 ;-2 --代表不合法的输入"); //2.分别出牌 System.out.println("请玩家1出牌:"); String num1 = scanner.next(); System.out.println("请玩家2出牌:"); String num2 = scanner.next(); //3.判断是否合法 boolean flag=isValid(num1, num2); if(!flag){ //不合法 System.out.println("-2"); }else { //输入合法---先拆分字符串---再转化为int数组 //4.拆分字符串 String[] nums1=getStrArray(num1); String[] nums2=getStrArray(num2); System.out.println("拆分后的字符串数组A:"+Arrays.toString(nums1)); System.out.println("拆分后的字符串数组B:"+Arrays.toString(nums2)); //5.转化为int数组 int[] nums11=strToNumber(nums1); int[] nums22=strToNumber(nums2); System.out.println("转化为int后的数组A:"+Arrays.toString(nums11)); System.out.println("转化为int后的数组B:"+Arrays.toString(nums22)); //6.获得三张牌的相等情况 int[] equalNum11=equalNum(nums11); int[] equalNum22=equalNum(nums22); System.out.println("三张牌的相等情况--数组A:"+Arrays.toString(equalNum11)); System.out.println("三张牌的相等情况--数组B:"+Arrays.toString(equalNum22)); //7.判断输赢 int whoWin=whoWin(equalNum11, nums11, equalNum22, nums22); System.out.println(""+whoWin); } //是否继续 System.out.println("是否继续?输入N或n退出,其他任意键继续!"); String string = scanner.next(); string=string.toUpperCase(); if("N".equals(string)){ isContinue=false; } } } /*1.判断输入的内容是否合法 * 不合法两种情况:(1)出现的字符不是2,3,4,5,6,7,8,9,10,J,Q,K,A (2)每种牌只有4张,超过4张则不合法了 *方法说明: *该方法只处理情况(1),情况(2)放在判断输赢的时候处理,因为第二种情况涉及牌面转化后计算的问题*/ public static boolean isValid(String num1, String num2) { String reg = "([2-9JQKA]|10){3}";// 正则匹配,只能出现2,3,4,5,6,7,8,9,10,J,Q,K,A,并且一共只能出现3次 boolean a = num1.matches(reg); boolean b = num2.matches(reg); // 有一方不合法就返回false if (a == false || b == false) { return false; } else { // 都合法 return true; } } // 1.拆分字符串,得到三个数字 public static String[] getStrArray(String num) { // 字符串的长度和拆分后的数组 int length = num.length(); String[] nums = new String[3]; // 无论输入的J,Q,K,A是否为大写,都改为大写 num.toUpperCase(); // 字符串不含10时,长度都为3 if (length == 3) { // nums=num.split("");//使用该方法拆分会多出一个空格位--比如33a-->[,3,3,1] for (int i = 0; i 2) { nums[0] = nums[2] = "10"; nums[1] = num.substring(2, 3); } else { // 两个1距离等于2时,说明两个10是挨在一起的 if (first == 0) { nums[0] = nums[1] = "10"; nums[2] = num.substring(4); } else { nums[0] = num.substring(0, 1); nums[1] = nums[2] = "10"; } } } else { // 字符串为3个10 for (int i = 0; i b[1]) { return 1; } else if (a[1] primaryB[0]) { return 1; } else if (primaryA[0] b[1]) { return 1; } else if (a[1] thirdB) { return 1; } else if (thirdA primaryB[2]) { return 1; } else if (primaryA[2] primaryB[1]) { return 1; } else if (primaryA[1] primaryB[0]) { return 1; } else if (primaryA[0] <h2><strong>테스트 실행</strong></h2><p><strong>길이가 불법입니다</strong><br><img src="https://img.php.cn/upload/article/000/000/001/383c341ff337c87b48f4468a5b9909cf-0.png" alt="코드로 Zha Jinhua 게임을 구현하는 방법"></p><p><strong>카드 1장 6이 나타납니다 5번은 불법입니다</strong> <br><img src="https://img.php.cn/upload/article/000/000/001/112731fc5aabcfefb7340343c06be2b1-1.png" alt="코드로 Zha Jinhua 게임을 구현하는 방법"></p><p><strong>Leopard</strong><br><img src="https://img.php.cn/upload/article/000/000/001/112731fc5aabcfefb7340343c06be2b1-2.png" alt="코드로 Zha Jinhua 게임을 구현하는 방법"></p><p><strong>스트레이트와 페어</strong><br><img src="https://img.php.cn/upload/article/000/000/001/112731fc5aabcfefb7340343c06be2b1-3.png" alt="코드로 Zha Jinhua 게임을 구현하는 방법"></p><p><strong>는 모두 문자, 스트레이트와 페어</strong><br><img src="https://img.php.cn/upload/article/000/000/001/4d65838ea7c1c524e17fdc04439ab32c-4.png" alt="코드로 Zha Jinhua 게임을 구현하는 방법"></p><p><strong> 1개가 나타납니다. 0, 두 직진</strong> <br><img src="https://img.php.cn/upload/article/000/000/001/4d65838ea7c1c524e17fdc04439ab32c-5.png" alt="코드로 Zha Jinhua 게임을 구현하는 방법"></p> <p> <strong>카드 종류는 없고 직접 사이즈를 비교해 보세요</strong><br><img src="https://img.php.cn/upload/article/000/000/001/4d65838ea7c1c524e17fdc04439ab32c-6.png" alt="코드로 Zha Jinhua 게임을 구현하는 방법"></p>
위 내용은 코드로 Zha Jinhua 게임을 구현하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!