`

Java编程那些事儿39—流程控制综合示例1

阅读更多
Java编程那些事儿39—流程控制综合示例1
郑州游戏学院陈跃峰
5.6 综合示例
在一般的学校学习流程控制时,重点是放在流程控制的相关语法,其实为了能成为一个合格的程序员,仅仅学好语法是远远不够的,还需要通过大量的练习来适应程序设计语言的思维方式,并且熟练地把自己的解决问题的步骤形成代码,这些都需要通过大量的阅读代码和编写代码来实现。
所以在学习流程控制时,重点是解决实际的问题,而不是仅仅停留在语法层面上,这个是很多在校学生学习程序时最突出的一个问题。
在遇到一个实际问题时,首先要能够思考出解决这个问题的数学步骤或逻辑步骤,然后才能编写对应的代码,所以遇到实际问题是,一定要积极思考,并且善于思考,对于一个相同的问题,不同的逻辑就可以写出不同的代码,所以在思考解决问题的方式时,需要进行发散性的思维,而这些理性的思维很多都是建立在数学基础以及对语法的熟悉基础之上。
下面,通过一系列的实际问题,来说明解决实际问题的步骤以及书写的对应的代码。
5.6.1 示例讲解
5.6.1.1 最大公约数
问题:求两个自然数的最大公约数。
这两个都是基础的数学问题,最大公约数指两个数字公共的约数中最大的,例如数字6的约数有1、2、3、6,数字9的约数有1、3、9,则数字6和数字9的公共约数有1和3,其中3是最大的公约数。
第一种思路:从1开始循环,每次把符合要求(即同时是两个数字的约数)的值都存储起来,那么最后一个存储起来的就是最大的约数。
则实现的代码如下:
int n = 6;
int m = 9;
int result = 1;
for(int i = 1;i <= n;i++){
if((n % i == 0) && (m % i == 0)){
result = i;
}
}
System.out.println(result);
使用该思路,每次都存储得到的公共约数,那么最后一个存储的就是两个数字的最大公约数。
第二种思路:从两个数字中最小的数字开始循环,每次减1,那么第一次得到的公共约数就是所求的最大公约数。
则实现的代码如下:
int n = 6;
int m = 9;
int result = n > m ?m : n;
for(int i = result;i >= 1;i--){
if((n % i == 0) && (m % i == 0)){
result = i;
break;//结束循环
}
}
System.out.println(result);
当然,解决这个问题,还有很多其它的方法,这里演示的这两种实现只是最自然的实现而已,采用类似的原理也可以求两个数字的最小公倍数的结构。
5.6.1.2 百元百鸡问题
问题描述:每只母鸡3元,每只公鸡4元,每只小鸡0.5元,如果花100元钱买100只鸡,请问有哪些可能?说明:每种鸡的数量都可以为零。
其实这个问题是数学上的组合问题,只需要把所有的情况列举出来,然后来判断是否符合要求即可。这样的重复列举的问题,在程序上可以使用循环进行解决。
第一种思路:当母鸡的数量为0时,公鸡的数量从0-100,当公鸡的数量每变化一次,小鸡的数量就从0变化到100,使用如下数值组合来描述这个思路:
母鸡数量 公鸡数量 小鸡数量
0 0 从0变化到100
0 1 从0变化到100
0 2 从0变化到100
……
1 0 从0变化到100
1 1 从0变化到100
……
100 100 100
上面列举出了所有公鸡、母鸡和小鸡的数量都是0-100时的所有组合,总计是101的三次方种,这样的穷举结构直接存在嵌套,在程序实际实现时,通过循环之间的嵌套就可以实现,则实现的代码如下:
for(int i = 0;i <= 100;i++){//母鸡数量
for(int j = 0;j <= 100;j++){ //公鸡数量
for(int k = 0;k <= 100;k++){ //小鸡数量
//判断数量是否为100,以及金额是否为100
if((i +j + k == 100) && (i * 3 + j * 4 + k * 0.5 == 100)){
System.out.println(“母鸡数量:” + i + “ 公鸡数量:” + j + “ 小鸡数量” + k);
}
}
}
}
按照for语句的执行流程,循环变量变化1,则内部的循环执行一次,而在循环嵌套时,循环体又是一个新的循环,则该循环执行完成的一组循环。这里通过循环的嵌套实现了所有数值的穷举。在循环的内部,只需要按照题目要求判断一下数量和金额是否符合要求即可。
但是这样的代码效率比较差,可以通过简单的优化来提高程序的执行效率。
第二种思路:由于母鸡每只的金额是3元,所以100元最多购买的母鸡数量是100/3=33只,同理100元最多购买的公鸡数量是25只,而按照100元100只的要求,小鸡的数量应该为100减去公鸡和母鸡的数量,这样代码就可以简化为如下的结构:
for(int i = 0;i <= 33;i++){//母鸡数量
for(int j = 0;j <= 25;j++){ //公鸡数量
int k = 100 –i – j;//小鸡数量
//判断金额是否为100
if (i * 3 + j * 4 + k * 0.5 == 100){
System.out.println(“母鸡数量:” + i + “ 公鸡数量:” + j + “ 小鸡数量” + k);
}
}
}
}
这样,就可以大幅提高程序的执行效率,从而提高程序的执行速度。当然该代码还可以继续进行优化,那样可以再次提供程序的执行效率。
分享到:
评论

相关推荐

    Java编程那些事儿55—方法重载和参数传递

    ### Java编程那些事儿55—方法重载和参数传递 #### 方法重载(Overloading) 在Java编程语言中,**方法重载**(Overloading)是一个非常重要的概念,它允许我们定义多个具有相同名称但参数列表不同的方法。这种方法...

    java那些事儿

    通过阅读《Java编程那些事儿》并结合代码示例,初学者可以动手编写简单的程序,逐步建立起对Java语言的理解。同时,熟悉软件下载和安装的过程也是提升技能的重要步骤,因为这将帮助他们更好地搭建和管理开发环境。 ...

    针对“VC++的那些事儿”的MDI应用示例

    显示MFC框架的MDI编程,其中代码的注释非常详细,如果你按照本人在“VC++的那些事儿”中描述的学习思想去学习,应该对VC++编程的代码阅读大有收获。自定义类的代码类几乎是一行注释一行代码,MFC框架的生命周期的...

    Java那些事儿之(一)读取property配置文件

    在Java编程中,管理应用程序的配置参数是一项至关重要的任务。`properties`文件是Java中用于存储配置信息的标准格式,它以键值对的形式保存数据,易于读写且跨平台兼容。本文将深入探讨如何在Java中读取和操作`...

    Java开源项目之「自学编程之路」

    这个项目不仅涵盖了基础理论,还包括实战经验和技术文章,帮助你更好地理解和掌握Java编程。 首先,学习Java编程的基础至关重要。这包括理解基本语法、数据类型、控制结构(如if语句和循环)、类与对象的概念,以及...

    java文集

    ext学习笔记一 小试iBatis RIA(Rich Internet Application)的现状和未来 Java应用中域名解析不过期的解决方法 Java编程那些事儿45—数组使用示例1 一步步熟悉OFBiz 用Java做客户端调用.NET写...

    租房系统静态页面供java初学者用来学习

    【标题】:“租房系统静态页面供java初学者用来学习” 这个标题揭示了资源的主要内容,即一个用于教学目的...通过这个项目,Java初学者可以逐步提升技能,从单纯的前端开发到前后端交互,全面掌握Web应用的开发流程。

    Java gui简单程序

    在Java编程领域,GUI(图形用户界面)是创建桌面应用程序不可或缺的一部分。本示例程序"Java GUI简单程序"旨在教你如何构建一个基本的GUI界面,同时整合数据库连接、查询功能,并利用JTable来展示查询结果。这是一个...

    人工智能-动物产生式系统代码.c

    选择c、c++、java等编程语言编写程序,采用基于产生式规则的知识表示方法,正向推理或反向推理机制,根据用户给出的动物特征,实现对动物的自动识别。要求知识库与控制系统相互独立,系统完成后除了能识别已有的7种...

    JTree 更新版 不错的树形控件

    压缩包中的“JTree”文件可能是一个包含了示例代码或者更新后JTree类的Java源文件。为了更好地理解这个更新版JTree控件的工作方式,你可以检查这个文件,查看其中的方法和类,看看它们是如何扩展和优化了标准JTree的...

    labuladong的刷题三件套.zip

    这些题目通常会有详细的解题思路和代码示例,帮助学习者深入理解概念,并提升实际编程能力。 在学习和实践过程中,理解每种数据结构的特点和适用场景,以及各种算法的时间复杂度和空间复杂度,是非常重要的。通过...

    EasyUI API中文版

    - 示例代码:通过官方示例和社区分享的代码,可以快速上手和解决问题。 - 在线论坛和问答社区:如Stack Overflow等,是寻求帮助和交流经验的好地方。 总的来说,EasyUI 提供了一套完整的前端解决方案,使得开发者...

Global site tag (gtag.js) - Google Analytics