Java综合实验1题目: 猜心术---猜姓氏游戏

news2025/1/16 0:53:47

一、 实验内容及要求

假设游戏者共有十人,且有10个不同的姓:张、王、李、赵、刘、于、许、金、钱、孙,魔术师将十个姓写在四张纸牌上,游戏者只需指出那几张纸上有自己的姓,魔术师就能准确的说出游戏者的姓,如图所示。
在这里插入图片描述
请编程实现:
(1) 分组输出姓氏,让用户选择姓氏所在的组。
(2) 给出你猜的姓氏。
二、 涉及的主要知识点

  1. JAVA语言的基础知识:变量定义,选择语句,循环语句,数组。
  2. 计算机基础中的进制转换。
    三、 提示及预备知识
    实际上是把这10个不同的姓依次编为1、2、3、4、5、6、7、8、9、10,再把这10个数用二进制表示为二进制1、10、11、100、110、111、1000、1001、1010,通过二制数据的规律将之后放在不同的组中,在用户指定的组后,根据相应的规律寻找到相应的姓氏。
    实现示例图:
    在这里插入图片描述

解法一:

思路讲解:
将这十个姓氏按顺序编号为1~10,它们对应的的二进制数值:
1 张 1
2 王 10
3 李 11
4 赵 100
5 刘 101
6 于 110
7 许 111
8 金 1000
9 钱 1001
10 孙 1010
分成四组之后:
(1)张 1 李 11 刘 101 许 111 钱 1001
(2)王 10李 11 于 110 许 111 孙 1010
(3)赵 100 刘 101 于 110 许 111
(4)金 1000 钱 1001 孙 1010
通过观察我们可以发现:
第一组从右往左数第一位都是1
第二组从右往左数第二位都是1
第三组从右往左数第三位都是1
第四组从右往左数第四位都是1
由于数组的索引是从左往右的,所以我们最好将组别进行逆序一下,变为第一组表示4四位二进制数字从右往左数第一位为1…这样做理解起来更清晰,当然不变也可以,但是代码相应的要改变
变换组别之后:
(1)金 1000 钱 1001 孙 1010
(2)赵 100 刘 101 于 110 许 111
(3)王 10李 11 于 110 许 111 孙 1010
(4)张 1 李 11 刘 101 许 111 钱 1001
定义一个长度为4的数组,接收二进制数字的每一位上的数字.
输入你的姓名在第几组之后,将数组的第几个位置处变为1(注意数组的索引=输入的位置-1)
将这个数组里面的元素依次输出来就是所选姓氏对应的二进制,可以直接输出,也可以通过将各位看做是千位,百位,十位,个位,再用元素乘以对应的十进制权值输出这个数字
根据存放所选姓氏对应的二进制的长度为4的数组中的元素,计算它对应的十进制数字,也就是计算出来我们给姓氏编的1~10的号码
**最后,**通过(位置-1)得到存放十个姓氏的数组索引,找到对应的姓氏.

分析完之后,我们可以发现,猜心术的奇妙之处在于分组的巧妙,分组有它的规律😎

解法一代码如下:

import java.util.Scanner;

public class Guess2 {
    public static void main(String[] args) {
        char[] Name={'张','王','李','赵','刘','于','许','金','钱','孙'};
        System.out.println("1.金钱孙\n2.赵刘于许\n3.王李于许孙\n4.张李刘许钱");

        int[] num=new int[4];
        for (int i = 0; i < 4; ) {
            System.out.println("请输入您所想的姓氏所在位置:(以-1结束):");
            Scanner sc=new Scanner(System.in);
            int firstName=sc.nextInt();
            if(firstName==1){
                num[0]=1;
            } else if (firstName==2) {
                num[1]=1;
            }else if (firstName==3){
                num[2]=1;
            } else if (firstName==4) {
                num[3]=1;
            } else if (firstName==-1) {
                break;
            } else{
                System.out.println("输入错误,请重新输入");
                continue;
            }
            i++;
        }
        //二进制表示
        int Num=num[0]*1000+num[1]*100+num[2]*10+num[3]*1;
        System.out.println(Num);
        System.out.println("您的姓氏为:");
        //转换为10进制
        int Num2=(int)(num[0]*Math.pow(2,3)+num[1]*Math.pow(2,2)+num[2]* Math.pow(2,1)+num[3]*Math.pow(2,0));
        //由于姓氏是从1开始编号的,所以在数组中的下标要记得-1
        System.out.println(Name[Num2-1]);


    }
}

在这里插入图片描述
在这里插入图片描述
解法一的注意点:
循环次数是数组num的长度4,注意输入相应的第几组将数组里面对应位置处改为1,如果输入的不合法,提示重新输入,索引不++,要用到continue,continue的作用是跳过后面的代码再次进入循环.
在这里插入图片描述

解法二:

解法更简单,思路一样,但是其中利用了一些Java的语法知识,可以达到省略一些代码的目的,更直接

import java.util.HashMap;
import java.util.Scanner;

public class mindGuessing {
    public static void main(String[] args) {
        HashMap Name=new HashMap();
        Name.put(1,'张');
        Name.put(10,'王');
        Name.put(11,'李');
        Name.put(100,'赵');
        Name.put(101,'刘');
        Name.put(110,'于');
        Name.put(111,'许');
        Name.put(1000,'金');
        Name.put(1001,'钱');
        Name.put(1010,'孙');
        System.out.println("1:金钱孙\n2:赵刘于许\n3:王李于许孙\n4:张李刘许钱");
        System.out.println("请输入所想的姓氏所在的位置:(以-1表示结束)");
        int get, temp= 0;
        int[] group = new int[4];
        Scanner in = new Scanner(System.in);
        while ((get = in.nextInt()) != -1) {
            group[temp] = get;
            temp++;
        }
        int num= 0;
        for (int j = 0; j < group.length; j++) {
            if (group[j] == 1) {
                num = num + 1000;
            } else if (group[j] == 2) {
                num = num + 100;
            } else if (group[j] == 3) {
                num = num + 10;
            } else if (group[j] == 4) {
                num = num + 1;
            }
        }
        System.out.println(num);
        System.out.println(Name.get(num));


    }
}

在这里插入图片描述

你学会了吗小伙伴们🥰记得点赞收藏博客,关注后续更多的java内容o~💕

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/273616.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

ChatGPT 为我制作了一张地图

有人说&#xff1a;一个人从1岁活到80岁很平凡&#xff0c;但如果从80岁倒着活&#xff0c;那么一半以上的人都可能不凡。 生活没有捷径&#xff0c;我们踩过的坑都成为了生活的经验&#xff0c;这些经验越早知道&#xff0c;你要走的弯路就会越少。 今天在刷视频的时候看到了…

Java 并发在项目中的使用场景

1、并发编程的三个核心问题&#xff1a;&#xff08;1&#xff09;分工&#xff1a;所谓分工指的是如何高效地拆解任务并分配给线程&#xff08;2&#xff09;同步&#xff1a;而同步指的是线程之间如何协作&#xff08;3&#xff09;互斥&#xff1a;互斥则是保证同一时刻只允…

本科大数据专业能找到大数据开发的工作么

本科大数据专业能不能找到大数据开发的工作取决于你在校期间大数据学科学习的怎么样~ 目前大二就还有时间去学习&#xff0c;趁着空余时间找个完整的学习路线去学习&#xff0c;争取能够在校招的时候就找到心仪的工作技术过关的话是完全没有问题的&#xff0c;而且加上你还有兴…

PythonWeb开发基础(三)类Flask框架请求封装

课程地址&#xff1a;Python 工程师进阶技术图谱 文章目录类Flask框架请求封装HTTP请求解析的python实现1、解析查询字符串2、多值问题使用webob库解析请求Bug记录bug&#xff1a;AttributeError: module cgi has no attribute parse_qs类Flask框架请求封装 Web服务器 本质是…

【C++提高编程】list 容器详解(附测试用例与结果图)

目录1. list容器1.1 list基本概念1.2 list构造函数&#xff08;初始化&#xff09;1.3 list 赋值和交换1.4 list 大小操作1.5 list 插入和删除1.6 list 数据存取1.7 list 反转&#xff08;reverse&#xff09;、排序&#xff08;sort&#xff09;和去重&#xff08;unique&…

电脑技巧:电脑状态监控神器TrafficMonitor介绍

有的时候我们为了解决某些电脑问题&#xff0c;需要监控电脑的实时网速、CPU、内存等的占用情况。一般情况下我们可以打开电脑任务管理器&#xff0c;就可以实时监控硬件状态&#xff0c;但如果查看频率较高的话&#xff0c;需要每次进入任务管理器就显得比较麻烦。今天小编分享…

【漏洞修复】 CVE Linux 系统应用漏洞修复笔记

这里写自定义目录标题说明SSL/TLS协议信息泄露漏洞(CVE-2016-2183)漏洞信息解决办法验证方法修复步骤说明查询当前使用的openssl版本号下载并安装新版本的openssl替换nginx中使用的openssl到最新版说明 此文章主要记录工作中遇到的漏洞以及修复过程。 SSL/TLS协议信息泄露漏洞…

【LeetCode】员工的重要性 | 图像渲染 | 岛屿问题

​&#x1f320; 作者&#xff1a;阿亮joy. &#x1f386;专栏&#xff1a;《阿亮爱刷题》 &#x1f387; 座右铭&#xff1a;每个优秀的人都有一段沉默的时光&#xff0c;那段时光是付出了很多努力却得不到结果的日子&#xff0c;我们把它叫做扎根 目录&#x1f449;员工的重…

力扣SQL刷题4

目录1158. 市场分析 I1280. 学生们参加各科测试的次数1174. 即时食物配送 II585. 2016年的投资1158. 市场分析 I 题型&#xff1a;表1和表2连接时&#xff0c;如何把没有对应数据输出来。即表1中所有id列对应的表2数据输出&#xff0c;没用的输出0 解答1&#xff1a;left join…

【Linux】权限

&#x1f525;&#x1f525; 欢迎来到小林的博客&#xff01;&#xff01;       &#x1f6f0;️博客主页&#xff1a;✈️小林爱敲代码       &#x1f6f0;️博客专栏&#xff1a;Linux之路       &#x1f6f0;️社区&#xff1a; 进步学堂       …

关于软考的一些前期准备

国家软考的中级职称证书&#xff0c;含金量较高且没有报考资质限制 报名时间和考试时间具体请看官网&#xff1a;中国计算机技术职业资格网 不同的资格证书时间和要求不一样&#xff0c;注意查看 上半年&#xff1a; 下半年&#xff1a; 下半年&#xff1a; 软件评测师考试说…

Spring Boot 中事半功倍的一些工具类

系列文章地址&#xff1a;https://blog.csdn.net/perfect2011/article/details/124603278在日常开发中经常有这样那样的小功能需要实现&#xff0c;这些一般会作为工具类存在&#xff0c;在项目中有一些通用的功能&#xff0c;Spring内置了需要工具类&#xff0c;而且经过了大量…

京东一面:20种异步,你知道几种? 含协程

背景说明&#xff1a; 异步&#xff0c;作为性能调优核心方式之一&#xff0c;经常被用于各种高并发场景。 很多场景多会使用到异步&#xff0c;比如&#xff1a; 场景1&#xff1a; 超高并发 批量 写 mysql 、批量写 elasticSearch 场景2&#xff1a; 超高并发 批量 IO 场景…

30分钟掌握 Hive SQL 优化(解决数据倾斜)

Hive SQL 几乎是每一位互联网分析师的必备技能&#xff0c;相信每一位面试过大厂的童鞋都有被面试官问到 Hive 优化问题的经历。所以掌握扎实的 HQL 基础尤为重要&#xff0c;既能帮分析师在日常工作中“如鱼得水”提高效率&#xff0c;也能在跳槽时获得一份更好的工作 offer。…

【23种设计模式】设计模式介绍与分类

前言 本文为 【23种设计模式】设计模式介绍与分类 相关知识介绍&#xff0c;下边将对什么是设计模式&#xff0c;设计模式的分类与23种设计模式的关键点进行详尽介绍~ &#x1f4cc;博主主页&#xff1a;小新要变强 的主页 &#x1f449;Java全栈学习路线可参考&#xff1a;【…

蓝桥算法两周训练营--Day2:DP

T1&#xff1a;P1048 [NOIP2005 普及组] 采药 - 洛谷 代码&#xff1a; 1、二维Dp&#xff1a; package 蓝桥算法两周训练营__普及组.Day2_dp;import java.util.Scanner;/*** author yx* date 2023-02-05 13:16*/ public class t1 {// P1048 [NOIP2005 普及组] 采药 - 洛…

java春招大厂面试,差点让面试官给我聊挂喽!

作者&#xff1a;小傅哥 博客&#xff1a;https://bugstack.cn 沉淀、分享、成长&#xff0c;让自己和他人都能有所收获&#xff01; 八股文整的挺好&#xff0c;算法也刷的够多&#xff0c;但问到项目就很拉胯。 这可能是现在大部分没有实际项目经验的校招生和一直从事边角料开…

环境变量【Linux】

文章目录&#xff1a;Linux环境变量介绍常用的环境变量如何查看环境变量命令搜索路径PATH与环境变量相关的命令环境变量的组织方式通过代码的方式获取环境变量通过系统调用获取或设置环境变量环境变量的全局属性&#xff08;继承&#xff09;Linux环境变量介绍 环境变量&#…

【王道数据结构】第五章(下) | 树 | 二叉树

目录 一、树的存储结构 1、双亲表示法(顺序存储)&#xff1a; 2、孩子表示法(顺序链式) 3、孩子兄弟表示法(链式存储&#xff09; 二、树、森林的遍历 1、树的先根遍历 2、树的后根遍历 3、层序遍历&#xff08;队列实现&#xff09; 4、森林的遍历 三、二叉排序树 …

电子技术——IC偏置-电流源、电流镜、电流舵

电子技术——IC偏置-电流源、电流镜、电流舵 IC偏置设计基于恒流源技术。在IC中的一个特定的区域&#xff0c;会生成一个精确的DC电流&#xff0c;这称为 参考电流 &#xff0c;之后通过电流镜复制到各个所需支路&#xff0c;并且通过电流舵进行电流转向。这项技术为IC的多级放…