刘谦2024年春晚模式java代码实现

本文详细展示了如何用Java编写代码模拟刘谦的扑克牌魔术,根据用户输入的名字、地域和性别调整牌堆,实现神秘的牌术效果。
摘要由CSDN通过智能技术生成

步骤 1:将准备好的 4 张扑克牌平均撕成两份,并叠在一起。

步骤 2:将牌堆顶数量为【名字字数】的牌移至牌堆底。

步骤 3:将前三张牌放在牌堆中间并取出牌堆顶的牌,放置在一旁。

步骤 4:取出牌堆顶的若干张牌插入牌堆中间,此处选择的牌数为南方人取 1 张,北方人取 2 张,若不确定是南方人还是北方人取 3 张。

步骤 5:男生扔掉牌堆顶 1 张,女生扔掉牌堆顶 2 张。

步骤 6:执行“见证奇迹的时刻”循环,每说一个字,就取出牌堆顶一张牌放置在牌堆底。

步骤 7:从牌堆顶开始,每次先将牌堆顶的一张牌放在牌堆底,再扔掉牌堆顶的一张牌,重复以上操作直到只剩一张牌,检查此牌和放置在一旁的牌是否吻合。若吻合,则魔术成功。

java代码实现,直接拷贝可用

public class LiuQianTest {
    public static void main(String[] args) throws InterruptedException {
        String nameStr = "";
        int name = 0;
        String nsStr = "";
        int ns = 3;
        String sexStr="";
        Scanner scanner = new Scanner(System.in);
        while (nameStr.isEmpty()) {
            System.out.print("\033[34m1.请输入名字:\033[0m");
            if (scanner.hasNextLine()) {
                nameStr = scanner.nextLine();
                if (!nameStr.isEmpty()) {
                    break;
                } else {
                    System.out.println("\033[31m提示:名字不能为空,请重新输入!\033[0m");
                }
            }
        }
        name = nameStr.length();
        System.out.print("\033[34m2.请输入所处地域,选项为南、北、其他:\033[0m");
        if (scanner.hasNextLine()) {
            nsStr = scanner.nextLine();
        }
        if(nsStr.equals("北")){
            ns = 2;
        }else if(nsStr.equals("南")){
            ns = 1;
        }else{
            ns = 3;
        }
        while (true) {
            System.out.print("\033[34m3.请输入性别:\033[0m");
            if (scanner.hasNextLine()) {
                sexStr = scanner.nextLine();
                if (sexStr.equals("男") || sexStr.equals("女")) {
                    break;
                } else {
                    System.out.println("\033[31m提示:性别只能为男或女,且不能为空,请重新输入!\033[0m");
                }
            }
        }
        int sex = sexStr.equals("男")?1:2;
        scanner.close();
        String hideCard = "";
        final String INCANTATION = "见证奇迹的时刻";
        // step1 随机四张牌
        String[] cardOne = {"方块1", "梅花2", "黑桃4", "红桃Q"};
        int cardOneLength = cardOne.length;
        // step2 撕开堆叠
        String[] cardTwo = new String[cardOneLength * 2];
        for (int i = 0; i <2; i++) {
            for (int j = 0; j < cardOneLength; j++) {
                int cardTwoIndex = cardOneLength*i+j;
                cardTwo[cardTwoIndex] = i==0?(cardOne[j]+"上"):(cardOne[j]+"下");
            }
        }
        // step3 牌堆顶数量为【名字字数】的牌移至牌堆底
        String[]  cardThree = cardTwo.clone();
        for(int i=0;i<name;i++){
            String[] cardThree1 = Arrays.copyOf(cardThree,1);
            String[] cardThree2 =  Arrays.copyOfRange(cardThree,1,cardThree.length);
            cardThree =  Stream.concat(Arrays.stream(cardThree2), Arrays.stream(cardThree1)).toArray(String[]::new);
        }
       // step4  将前三张牌放在牌堆中间并取出牌堆顶的牌,放置在一旁
        final int  TOP_THREE = 3;
        int middle = (cardThree.length- TOP_THREE)/2;
        String[] cardFour1 = Arrays.copyOf(cardThree,TOP_THREE);
        String[] cardFour2 = Arrays.copyOfRange(cardThree,TOP_THREE,cardThree.length);
        String[] cardFour3 = Arrays.copyOf(cardFour2,middle);
        String[] cardFour4 = Arrays.copyOfRange(cardFour2,middle,cardFour2.length);
        String[] cardFour5 =  Stream.concat(Arrays.stream(cardFour3), Arrays.stream(cardFour1)).toArray(String[]::new);
        String[] cardFour6 =    Stream.concat(Arrays.stream(cardFour5), Arrays.stream(cardFour4)).toArray(String[]::new);
        String[] cardFour = Arrays.copyOfRange(cardFour6, 1, cardFour6.length);
        hideCard = cardFour6[0];
        System.out.println("\033[33m隐藏的扑克牌为【"+hideCard.substring(0, hideCard.length() - 1)+"】\033[0m");
        // step5 取出牌堆顶的若干张牌插入牌堆中间,此处选择的牌数为南方人取 1 张,北方人取 2 张,若不确定是南方人还是北方人取 3 张。
        int middleStep5 = (cardFour.length- ns)/2;
        String[] cardFive1 = Arrays.copyOf(cardFour,ns);
        String[] cardFive2 = Arrays.copyOfRange(cardFour,ns,ns+middleStep5);
        String[] cardFive3 = Arrays.copyOfRange(cardFour,ns+middleStep5,cardFour.length);
        String[] cardFive4 =  Stream.concat(Arrays.stream(cardFive2), Arrays.stream(cardFive1)).toArray(String[]::new);
        String[] cardFive =  Stream.concat(Arrays.stream(cardFive4), Arrays.stream(cardFive3)).toArray(String[]::new);
        // step6 男生扔掉牌堆顶 1 张,女生扔掉牌堆顶 2 张。
        String[] cardSix = Arrays.copyOfRange(cardFive,sex,cardFive.length);
        // System.out.println("数组cardSix:" + Arrays.toString(cardSix));
        // step7 执行“见证奇迹的时刻”循环,每说一个字,就取出牌堆顶一张牌放置在牌堆底。
        String[] cardSeven = cardSix.clone();
        for(int i=0;i<INCANTATION.length();i++){
            String[] cardSeven1 = Arrays.copyOf(cardSeven,1);
            String[] cardSeven2 =  Arrays.copyOfRange(cardSeven,1,cardSeven.length);
           cardSeven =  Stream.concat(Arrays.stream(cardSeven2), Arrays.stream(cardSeven1)).toArray(String[]::new);

         }
        // step8 从牌堆顶开始,每次先将牌堆顶的一张牌放在牌堆底,再扔掉牌堆顶的一张牌,重复以上操作直到只剩一张牌,检查此牌和放置在一旁的牌是否吻合。若吻合,则魔术成功。
        String[] cardEight = cardSeven.clone();
        for(int i=0;i<cardSeven.length;i++){
            if(cardEight.length==1){
                break;
            }else{
                String[] cardEight1 = Arrays.copyOf(cardEight,1);
                String[] cardEight2 =  Arrays.copyOfRange(cardEight,1,cardEight.length);
                cardEight =  Stream.concat(Arrays.stream(cardEight2), Arrays.stream(cardEight1)).toArray(String[]::new);
                cardEight = Arrays.copyOfRange(cardEight,1,cardEight.length);
            }
        }
        System.out.println("\033[35m---------------接下来,就是见证奇迹的时刻---------------\033[0m");
        Thread.sleep(2000);
        System.out.println("\033[33m最终的结果为:【"+cardEight[0].substring(0, cardEight[0].length() - 1)+"】\033[0m");
        System.out.println("\033[36m比对结果为:"+hideCard.substring(0, hideCard.length() - 1).equals(cardEight[0].substring(0, cardEight[0].length() - 1))+"\033[0m");
    }

}

 

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值