AIDE手机编程初级教程(零基础向) 2.6.4 开发一个游戏之判断相似度

第二章 第一个游戏

系列教程导航

2.6 开发一个游戏


2.6.4 判断相似度


文章目录




过程分析

    上一节,我们设计了一个产生随机数的工具函数。这一节,我们接着设计第二个工具函数:判断两个数字的相似度。输出的结果就是综述篇里面说的几A几B。

    为了设计这个函数,我们首先需要获取两个数字的各个数位上的数字,然后分别进行判断。上一节我们是采用模运算和除法相结合的方式取各个数位的,但是此时用这个方法不太好。首先,我们输入的数字是字符串(可能首位是0,所以不能用数字),所以要转为整数;其次,两个数字需要用8个变量来分别记录其各个数位,需要比较4*4=16次(每两位都需要比较一次),写出来就会很复杂。为此,我们使用另一个方法来获取数位上的数字。

    根据面向对象的思想,Java中的一切都可以是对象,字符串也不例外。字符串作为对象,也许就有很多函数(当然,这些函数都是早就由别人写好了的)。事实上,字符串本身就有这样的一个函数:charAt,可以用来获取给定位置的字符

    由于字符串可以看成是由字符一个个连起来的,所以自然可以把每一个字符从左到右编一个号,也就是它们的“位置”。注意编号是从0开始的。举个例子,对于字符串"5468",字符'5'的“位置”是0,字符'4'在1位置,'6'在2位置,'8'在3位置。于是假如我们想要获取2位置的字符,就可以这样

char a = “5468”.charAt(2);

    这样就很方便了,我们可以很容易地获取到各个数位上的数字。不过,更重要的是,有了它,我们就可以很方便地比较两个数字的各个数位。

    接下来,我们来分析如何比较两个数字的各个数位。一个很自然的思路是,假设两个数字分别是a和b,我们首先获取数字a的第一个数位,记作x,然后依次获取数字b的各个数位,都与x比较一次。然后再取数字a的第二个数位,重复刚才的步骤。看出来了吗?这里已经出现了循环,而且有两个循环:一个循环控制a的数位,另一个循环控制b的数位。

    接下来,我们结合代码具体实现一下以上的思路。




实现

    我们首先把函数定义出来。如下:

在这里插入图片描述

    这个函数输出的是A和B的值,所以我们需要定义两个变量来记录A和B:

在这里插入图片描述
Java严格区分大小写,故此处A,B和a,b不冲突

    然后,我们回忆一下循环结构的知识。此处应该用for语句还是while语句呢?事实上,两者都可以用,不过我觉得for语句看起来会更优美一些。于是我们写下一个for语句,用于控制数字a的数位。

在这里插入图片描述

    接着,我们再写一个循环,用于控制数字b的数位:

在这里插入图片描述

    现在我们只需比较x和y就可以了,因为它们会分别取遍a和b的各个数位。

在这里插入图片描述

    如果此时i和j相等的话,说明a和b的这个数位上的数字是一样的,A加1;反之,说明a和b存在相同的数字,但是位置不一样,B加1。所以此处我们使用if else结构:

在这里插入图片描述

    最后,我们把判断结果返回:

在这里插入图片描述

注意此处A和B是变量,而"A"和"B"是字符串,中间的加号是连接符。假如A是2,B是1,那么返回的结果是"2A1B"




后记

    在本节,我们完成了第二个工具函数。事实上,根据综述篇的分析,我们已经完成了这个游戏的一大半了。下一篇文章,我们会逐步完成游戏的核心部分:对玩家的不同输入做出回复。

    由于本节没有修改MainActivity.java的其他部分 故我只放出本节所涉及的函数的代码,其他的代码可以在上一篇文章的末尾找到。

//比较两个数字相似度的函数
private String getSimilarity(String a, String b){
	int A = 0;		
	int B = 0;
	//外循环,控制数字a的数位
	for(int i = 0 ; i < 4 ; ++i){
		//获取数字a位置i上的数字
		char x = a.charAt(i);
		//内循环,控制数字b的数位
		for(int j = 0 ; j < 4 ; ++j){
			//获取数字b位置j上的数字
			char y = b.charAt(j);
			//比较x和y
			if(x == y){
				if(i == j){
				    //x和y在相同的位置
					A++;					
				}else{
					//x和y不在相同的位置		
					B++;
				}
			}
		}
	}
	//返回判断结果
	return A + "A" + B + "B";
}

感谢你的阅读!本教程会长期不定时更新。本人不是大神,也会犯错,如果有建议或者提问的话,欢迎评论留言!

作者头像

  • 4
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
开发手册目录 │ Addison Wesley - JDBC API Tutorial and Reference 3rd Edition (2003).chm │ ajax教程.chm │ AngularJS 中文API参考手册.chm │ Bootstrap-中文-API.chm │ css2.chm │ CSS4.0中文参考手册.chm │ cssv3.4.0.chm │ DHTML_DOC_CN.chm │ DHTML手册.chm │ dom4j.chm │ DOM_help.chm │ DOM中文参考手册CHM·chm.chm │ DOM文档对象模型手册.chm │ DTD.chm │ EasyUI-API+1.3.2.chm │ Ext2.2API中文版.CHM │ Ext3.2中文API.CHM │ Hibernate3.2.chm │ Hibernate3.2API.chm │ html5参考手册.chm │ HTML入门与提高.CHM │ Html标签一览表.chm │ html语法教程.chm │ HTTP1.1.chm │ J2EE_1.5_API.CHM │ J2EE_1.6_API.chm │ Java+EE+6+API+Specifications.CHM │ JavaEE_API_5[1].0.chm │ JavaScript Professional Projects.chm │ JavaScript20.chm │ JavaScript中文手册.CHM │ JavaScript手册.chm │ JavaScript语言中文参考手册.chm │ java_ee_api_中英文对照版.chm │ java_ee_api_中英文对照版.chw │ jBPM 4.4 API.chm │ jdk 1.7_api_doc.CHM │ JDK_API_1_6_zh_CN.CHM │ JDK_API_1_6_zh_CN.chw │ jquery1.7 中文手册.chm │ JQuery_1.4_API.CHM │ jQuery文档.chm │ JSP API.chm │ Jsp帮助文档.chm │ JSP语法.chm │ Linux基础命令教程豪华版.chm │ Linux常用命令大全.chm │ lucene_3.6.1_API.CHM │ MySQL_5.1_zh.chm │ POI_3.8_API.CHM │ Servlet API[China].chm │ Servlet-API.chm │ servlet.chm │ Spring-Reference_zh_CN.chm │ spring2.5.5_API.chm │ Spring3.0.2-RELEASE-API.chm │ Struts2.chm │ struts2中文教程.chm │ struts2标签.chm │ tomcat5.5中文帮助文档.chm │ W3CSchool .chm │ W3CSchool.chm │ w3school完整版.CHM │ WebGL自修教程.chm │ XML+Schema官方教程(9loong中文版)修正版2009.04.chm │ XmlSchema标准参考手册.chm │ XPathTutorial.chm │ 样式表中文手册.chm │ 网页制作完全手册.chm │ 英语资料大全.chm └─hadoop api

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值