1、给定某个数字如123456789,编程实现计算这个数字的各位数字之和
(1)问题分析和解题思路
本问题的首要关键是要能够获得该数字的总数位数(也就是该数字是几位数的数字),然后再分别获得各个数位上的数字的值,最后再将所获得的各个数位上的数字进行累加求和。
而要获得某个数字的总数位的个数,需要将该数字转换为字符串,从而获得转换后的字符串的长度(因为在Java程序中很容易能够获得一个字符串的长度)也就是该数字的总数位的个数;然后再应用循环语句从左到右逐个获得转换后的字符串的各个字符(也就是原数字的各个数位上的数字),将所获得的字符转换为int类型的整数值;最后再将这些整数值进行累加求总和处理。
(2)在MyEclipse开发工具中创建出一个类名称为SumSomeDigit,程序包名称为com.bluedream.javaoop,并且包含有main()方法的Java程序类,SumSomeDigit程序类的创建过程参看如下示例图所示。
(3)点击对话框中的“Finish”按钮,MyEclipse开发工具将帮助开发人员创建出SumSomeDigit类的初始程序,在SumSomeDigit类的初始程序中只包含有默认构造方法和main()方法。最终的程序结果示例参看如下示图所示。
(4)编程SumSomeDigit程序类中的相关程序代码以实现本问题的功能
在本示例的程序设计和实现中,作者严格遵守面向对象编程中所倡导的“分层分块”的设计原则以提高程序的可复用性。为止,在SumSomeDigit程序类中设计一个如下的方法:public int returnCaclResult(long someOneDigit),该方法接受待处理的数字(考虑到数字可能比较大,因此定义为long类型的参数),然后再经过returnCaclResult方法的处理,最终获得处理的结果并返回给调用者。returnCaclResult方法的程序代码参看上面的示例图所示。
在main()方法中给定待计算处理的数字,创建出SumSomeDigit类的对象实例,然后再通过该对象实例调用目标方法returnCaclResult,并将待计算的数字传给该方法,最后获得returnCaclResult方法计算和处理后的返回结果;将计算处理后的结果打印输出。main()方法的程序代码参看上面的示例图所示。
(5)执行本程序示例
在MyEclipse开发工具中右击源程序,在弹出的快捷菜单中选择“Run as”下拉菜单中的“Java Application”子菜单项目,将执行本示例SumSomeDigit类程序。
(6)SumSomeDigit类程序的执行结果将在MyEclipse开发工具的控制台窗口中显示,参看如下示例图所示。
2、对前面的示例程序进行扩展,允许用户通过键盘输入某个数字如123456789,编程实现计算这个数字的各位数字之和
(1)问题分析及解题思路
本问题是对前面的问题的进一步的功能扩展,计算处理的数字不是在程序中预先给定的,而是可以由用户(操作者)任意输入。因此,本问题的解题思路主要是如何获得用户所输入的数字——这可以通过JDK系统库中的Scanner(System.in).nextInt()方法实现此功能。
Scanner(System.in).nextInt()方法为java.util程序包中的一个获得用户从控制台输入的int类型的数据值的功能方法,在创建Scanner类的对象实例时需要传递标准的输入设备System.in,从而监听用户的键盘输入操作,并通过nextInt()方法返回用户所输入的各个整数值,直到按下回车键为止。
实现本问题的程序与前面示例的程序主要差别在于main()方法,将原来long someOneDigit =123456789;定义语句修改为从键盘中获得用户所输入的数字的相关程序代码。
(2)修改后的main()方法的程序代码示例如下示例图所示
(3)再执行扩展完善后的程序代码
在MyEclipse开发工具中右击源程序,在弹出的快捷菜单中选择“Run as”下拉菜单中的“Java Application”子菜单项目,将执行本示例SumSomeDigit类程序。
(4)扩展完善后的程序代码执行的结果参看如下示例图所示
为了验证扩展后的程序的功能是否正确,仍然输入123456789,程序计算处理后的结果仍然为45。与前面的示例程序的计算处理的结果是相同的。
为了进一步验证扩展的程序功能实现是否完全正确,再次执行该程序示例,但输入其它数值的数字如987654321。程序执行的结果参看如下示例图所示。
3、编程实现利用“/”和“%”运算符计算某个数字如123456789各个数位的数字之和
(1)问题分析及解题思路
本问题与前面的问题的差别主要体现在计算处理的功能实现要求不同,在计算某个数字的各个数位的数字之和时,必须要应用“/”(除法)和“%”(取余数)运算符。因此,实现本问题的程序代码与前面的程序示例的程序代码差别在于需要修改returnCaclResult方法体内的程序代码。
为了不破坏原始的returnCaclResult方法的程序代码,在SumSomeDigit类中再定义一个与returnCaclResult方法形成重载的returnCaclResult方法,但多增加一个标识参数boolean isExampleTwo 以示区分,即如下的方法原型定义:
public int returnCaclResult(long someOneDigit, boolean isExampleTwo)
(2)修改后的returnCaclResult方法的程序代码示例
其中的java.lang.Math.pow(double a, double b)方法是返回a的b次方,它是Java语言核心程序包中的常用程序类,主要包含有用于执行基本数学运算的方法;Math类中的所有执行方法都是静态(static)类型的方法,可以直接使用“类名.方法名”的形式进行调用,如:Math. pow ();在本问题的实现程序中应用该Math. pow ()方法实现将待计算处理的数字除以10的n次方,从而获得数字的各个数位上的数字值。
(3)修改main()方法中对returnCaclResult方法的调用程序代码
由于returnCaclResult(long someOneDigit,boolean isExampleTwo)方法是对原来的returnCaclResult(long someOneDigit)方法实现了重载,在参数方面多了另一个参数boolean isExampleTwo。该参数在目前没有实际的应用值,只是为了能够产生出重载的应用效果而人为地添加的。因此,需要修改main()方法程序体中对returnCaclResult方法的调用程序代码,修改完毕后的最终程序代码参看如下示例图所示。
(4)再执行本示例中的程序代码
在MyEclipse开发工具中右击源程序,在弹出的快捷菜单中选择“Run as”下拉菜单中的“Java Application”子菜单项目,将执行本示例SumSomeDigit类的程序。
(5)本示例中的程序代码执行的结果参看如下示例图所示
为了验证扩展后的程序的功能是否正确,仍然输入123456789,程序计算处理后的结果仍然为45。与前面的示例程序的计算处理的结果是相同的。
4、用户通过键盘输入某个数字如123456789,编程实现获得这个数字中各个数位的数字中的最大和最小的数字之值
(1)问题分析及解题思路
本问题与前面的两个问题有很大的差别,这是个求极值(极数)方面的问题——在数学分析中,在给定范围内的整个域,获得它们的最大值和最小值被统称为极值(极数)。
在Java的Arrays类中其实有一个sort()方法,该方法是Arrays类的静态方法,可以直接实现对数组进行排序。如下示图为JDK API帮助文档中的Arrays.sort()方法的定义说明局部截图。
public static void sort(int[] a)
对指定的 int 型数组按数字升序进行排序(从小到大的顺序)。该排序算法是一个经过调优的快速排序法,改编自 Jon L. Bentley 和 M. Douglas McIlroy 合著的 Engineering a Sort Function", Software-Practice and Experience Vol. 23(11) P. 1249-1265 (November 1993)。此算法在许多数据集上提供 n*log(n) 性能,这导致其他快速排序会降低二次型性能。
参数:a - 要排序的数组。
当然,Arrays.sort()方法有多个重载定义,在本示例中的各个数位上的数字值由于为int[]类型,因此选择public static void sort(int[] a)版本。
根据前面的分析可以清晰地获得本问题的程序代码实现要点,获得用户从键盘输入的数字,然后获得该数字上的各个数位上数字,将这些数位上的数字缓存到一个数组中,最后排序此数组,并打印其中的最大和最小的两个元素之值。此外,在程序设计和实现方面,需要针对本问题单独设计一个程序类,类名称为ExtremumSomeDigit,程序包仍然为com.bluedream.javaoop。
(2)在MyEclipse开发工具中创建出一个类名称为ExtremumSomeDigit,程序包名称为com.bluedream.javaoop,并且包含有main()方法的Java程序类,ExtremumSomeDigit程序类的创建过程参看如下示例图所示。
(3)点击对话框中的“Finish” 按钮,MyEclipse开发工具将创建出ExtremumSomeDigit的初始程序,在ExtremumSomeDigit的初始程序中只包含有构造方法和main()方法。最终的程序结果示例参看如下示图所示。
(4)编程ExtremumSomeDigit程序类中的相关程序代码以实现本问题的功能
printMaxAndMinDigit方法程序体内的代码示例,参看如下示例图所示。
main()方法程序体内的代码示例,参看如下示例图所示。
(5)再执行本示例中的程序代码
在MyEclipse开发工具中右击源程序,在弹出的快捷菜单中选择“Run as”下拉菜单中的“Java Application”子菜单项目,将执行本示例ExtremumSomeDigit类程序。
(6)本示例中的程序代码执行的结果参看如下示例图所示
为了验证本问题实例的程序功能是否正确,输入123456789这样比较长的数字,程序计算并处理后的打印结果参看如下示例图。