JAVA编程-----猜姓氏游戏

  • 实验内容及要求

假设游戏者共有十人,且有10个不同的姓:张、王、李、赵、刘、于、许、金、钱、孙,魔术师将十个姓写在四张纸牌上,游戏者只需指出那几张纸上有自己的姓,魔术师就能准确的说出游戏者的姓,如图所示。

请编程实现:

  1. 分组输出姓氏,让用户选择姓氏所在的组。
  2. 给出你猜的姓氏。
  3. 在IDEA中新建“RolePlaying”项目。完成实验后,将项目导出为压缩包(“File”®“Export”®“Project to Zip File...”)。
  • 涉及的主要知识点
  1. JAVA语言的基础知识:变量定义,选择语句,循环语句,数组。
  2. 计算机基础中的进制转换。
  • 提示及预备知识

实际上是把这10个不同的姓依次编为1、2、3、4、5、6、7、8、9、10,再把这10个数用二进制表示为二进制1、10、11、100、110、111、1000、1001、1010,通过二制数据的规律将之后放在不同的组中,在用户指定的组后,根据相应的规律寻找到相应的姓氏。

2、简易代码

5.	package cn.inast.test;
import java.util.Scanner;
public class Example01 {
    public static void shuchu(char[] arr,int length){
        for(int i = 0; i<length;i++)//输出方法
        {
            System.out.print(arr[i]+" ");
        }
        System.out.println();
    }
    public static void caiMzi() {
        char [] xing1={'金','钱','孙'};//规律分组倒数第四位为1,二进制
        char [] xing2={'赵','刘','于','许'};//规律分组倒数第三位为1,二进制
        char [] xing3={'王','李','于','许','孙'};//规律分组倒数第二位为1,二进制
        char [] xing4={'张','李','刘','许','钱'};//规律分组倒数第一位为1,二进制
        System.out.print("1:");
        shuchu(xing1, xing1.length);//规律分组倒数第四位为1
        System.out.print("2:");
        shuchu(xing2, xing2.length);//规律分组倒数第三位为1
        System.out.print("3:");
        shuchu(xing3, xing3.length);//规律分组倒数第二位为1
        System.out.print("4:");
        shuchu(xing4,xing4.length);//规律分组倒数第一位为1
    }
    public static void main(String[] args) {
        char [] xing = {' ','张','王','李','赵','刘','于','许','金','钱','孙'};//静态初始化
        int[] ej = {0,0,0,0};//定义二进制数组
        caiMzi();//调用caiMzi方法
        System.out.println("请输入你所想的姓氏所在的位置:(以-1表示结束)");
        for(int i=0;i<10;i++) {
            Scanner scanner = new Scanner(System.in);
            int a = scanner.nextInt();
            if(a != -1)//若分组后,该卡片有其名字的记录为1
                ej[a - 1] = 1;
            if(a == -1)//定义结束函数
                break;
        }
        for(int j=0;j<4;j++)//输出对应的二进制数,转换成十进制数即为该玩家的姓
        {
            System.out.print(ej[j]);
        }
        System.out.println(" ");//换行
        System.out.println("你的姓氏为:");
        System.out.println(xing[2*2*2*ej[0]+2*2*ej[1]+2*ej[2]+ej[3]]);//输出该玩家的姓
    }

}

 3、改进代码

import java.util.Scanner;

public class GuessGame {
    public static void main(String[] args) {
        int quotient;
        int remainder=-1;
        int position;
        char[] firstNames={' ','李','王','张','刘','陈','杨','赵','黄','周','吴'};
        String[] groups=new String[]{"","","","",""};
        for (int i = 1; i <firstNames.length ; i++) {
            quotient=i;
            position=groups.length-1;
            while(quotient!=0)
            {
                remainder=quotient%2;
                quotient=quotient/2;
                if(remainder==1)
                {
                    groups[position]+=firstNames[i];
                }
                position--;

            }
        }
        for (int i =1;i<groups.length;i++) {
            System.out.println(i+":"+groups[i]);
        }
        System.out.println("请输入您所想的姓氏所在位置:(以-1表示结束):");
        char[] c=new char[]{'0','0','0','0'};
        int i=9999999;
        Scanner sc=new Scanner(System.in);
        while (true){
            i=sc.nextInt();
            if(i==-1)
            {
                break;
            }
            c[i-1]='1';
        }
        System.out.println(c);

        int answer=0;
        for (i=0;i<c.length;i++)
        {
            answer+=(c[i]-'0')*Math.pow(2,4-i-1);
        }
        System.out.println("您的姓氏为:");
        System.out.println(firstNames[answer]);

    }
}

4、运行实例

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值