1、给定某个自然数,编程实现识别该自然数是否为回文数
(1)什么是回文数
对于什么是回文数(Palindrome Number),读者可以查询百科。定义如下:设n是一任意自然数。若将n的各位数字反向排列所得自然数n1与n相等,则称n为一回文数。
例如,若n=1234321,则称n为一回文数,因为它的n1=1234321;但若n=1234567,则n不是回文数,因为它的n1=7654321,但n1≠n。
(2)回文数的主要特性
1)数位为偶数个的自然数数字也可能是回文数,比如124421、2442、3663等。
2)小数没有回文数
首先小数不是自然数,尽管123.321、12.21和1234.4321等形式的小数,表面上看好像是回文数,但根据回文数的定义,回文数不涉及小数而只涉及自然数——而自然数是指用以计量事物的件数(我发表了5篇文章中的5为自然数)或表示事物次序的数(我发表的文章获得第1等奖中的1也为自然数),也就是用数码0,1,2,3,4……所表示的数。
3)回文数其实是呈中间对称的数(轴对称的数)
(3)问题分析和解题思路
本问题的关键是在于如何判断一个自然数是否为回文数,要判断一个自然数是否为回文数,可以根据回文数的定义来设计相关的算法——设N是一任意的自然数,只需要获得N的各位数字,然后再将这些数字反向排列组成一个新的数字,这样所获得的自然数N1如果与N相等,则可以判断出N则为一回文数。
从程序实现的技术角度来看,在Java编程中都很容易实现这些功能处理。
(4)在MyEclipse开发工具中创建出一个类名称为TestPalindromeNumber,程序包名称为com.bluedream.javaoop,并且包含有main()方法的Java程序类,TestPalindromeNumber程序类的创建过程参看如下示例图所示。
(5)点击对话框中的“Finish”按钮,MyEclipse开发工具将帮助开发人员创建出TestPalindromeNumber类的初始程序,在TestPalindromeNumber类的初始程序中只包含有默认构造方法和main()方法。最终的程序结果示例参看如下示图所示。
(6)编程示例中的功能实现的程序代码
在该Java程序中,获得用户从键盘中输入的一个数字变量,然后判断所输入的这个数字是否为回文数,并打印出判断的结果。最终的程序代码示例参看如下示图所示。
在main()方法中首先应用new Scanner(System.in).nextInt()方法获得用户键盘输入的某个数字,并将该数字转换为字符串以方便获得该数字的数位个数;然后再对用户所输入的数字分别从左到右和从右到左顺序获得对应数位上的数字,并识别它们是否相等——也就是从左向右获得输入的数字字符串中的各个字符(数字)与从右向左获得输入的数字字符串中的各个字符(数字)相比较,如果相同,则根据回文数的定义,该数字为回文数。
(7)对示例程序代码中的核心程序进行说明
在示例程序中的循环语句中之所以定义了两个循环控制变量loopCounterIntOne和loopCounterIntTwo,主要是因为需要分别控制对用户所输入的数字从左到右方向获取和从右到左方向获取对应数位上的数字,然后进行比较是否相等。
for(int loopCounterIntOne=0, loopCounterIntTwo = userInputNumberStringLength-1; loopCounterIntOne
(8)执行TestPalindromeNumber程序类示例代码
在MyEclipse开发工具中右击源程序,在弹出的快捷菜单中选择“Run as”下拉菜单中的“Java Application”子菜单项目以在Java虚拟机环境中执行示例,将执行本示例TestPalindromeNumber类程序。
(9)作者在显示的控制台中输入数字123321,程序将显示出判断的结果(程序判断正确),参看如下示例图所示。
(10)为了能够进一步地验证程序的功能实现是否存在隐藏的错误,为此,在显示的控制台中作者再输入数字123,将显示出判断的结果(程序判断正确)
2、优化程序代码示例以符合面向对象编程封装和代码重用的设计原则
(1)示例程序所存在的问题——没有实现程序的模块化
将解决复杂问题的功能程序代码分解为若干个小问题的功能程序代码的程序设计方法,称为模块化设计。在程序设计中尽可能将可能多次应用的一段功能代码设计为一个方法(函数),在面向对象的编程中还需要将这样的方法封装到某个类定义中。从而可以实现代码的重用以减少重复性的功能实现代码。
(2)问题分析和解题思路
对于前面的示例程序代码,只需要将判断某个数字是否为回文数的功能程序代码设计为一个方法(函数),该方法的名称为testPalindromeNumber,并将该方法封装在示例程序TestPalindromeNumber类中。在使用处则需要对该方法进行调用,并输入待识别的数字,同时获得识别的结果。
(3)TestPalindromeNumber类中的testPalindromeNumber方法的程序示例代码
(4)修改TestPalindromeNumber类中的main()方法的代码
在main()方法程序体内主要是创建出TestPalindromeNumber类的对象实例;然后获得键盘输入的数字,在调用testPalindromeNumber方法的同时,传入该数字;testPalindromeNumber方法根据回文数的识别算法,识别该数字是否为回文数,最后返回识别的结果。main()方法中的最终程序代码参看如下示例图所示。
(5)再执行优化后的程序代码
在MyEclipse开发工具中右击源程序,在弹出的快捷菜单中选择“Run as”下拉菜单中的“Java Application”子菜单项目,以在Java虚拟机环境中执行本示例TestPalindromeNumber类程序。参看如下示例图所示。
(6)在显示的控制台中继续输入数字123321,将显示出判断的结果(程序判断正确),参看如下示例图所示。
(7)再在显示的控制台中输入另一个数字123,将显示出判断的结果(程序判断正确),参看如下示例图所示。
3、再次优化程序代码以提高程序的健壮性和可靠性
(1)前面的示例程序所存在的不足——无法识别输入的数字是否是合法的数字
根据回文数的定义,所要识别的数字应该是自然数而不是任意的数字(包括负数)。但java.util程序包中的Scanner(System.in).nextInt()方法只能保证获得整数,而不能保证只能获得正整数。因此,当作者在控制台中输入如下的负数时(参看如下示例图所示),尽管本示例程序也能够给出判断的结果。但对于本示例的问题处理的范围其实是做了无用功,需要在接收数字之前先识别和排除与本问题无关的数字。
因此,需要优化前面的示例程序代码以识别用户所输入的数字是否为本问题的有效数字(正整数),如果为非法的数字则直接提示用户数字输入错误;此外,也还要识别是否输入非整数等其它格式的数据而导致程序出现异常抛出等问题。在程序设计和实现中必须要考虑到这些问题,否则程序在应用中将会出现各种意想不到的问题,从而降低了程序的健壮性和可靠性。
(2)问题分析和解题思路
首先,需要优化示例程序代码以识别所判断的数字是否为合理的范围(非负数和0),为此需要在main()方法内增加对负数进行识别的条件语句。
其次,0-9的10个一位数的自然数其实也是回文数。因此,还需要优化示例程序代码以识别所输入的数字是否为0-9的10个一位数的自然数。如果是这10个自然数之一,则直接显示判断的结果。
最后,如果输入的是非整数值,如123.321,Scanner类的nextInt()方法直接抛出InputMismatchException类型的异常而导致程序执行流程中断。因此需要对Scanner类的nextInt()方法的调用添加异常捕获的程序代码。
(3)完善main()方法体内的相关程序代码,最终的程序代码可以参看如下示例图所示
(4)再次执行完善后的程序代码,并验证相关的问题是否加以解决
对完善后的程序分别执行多次,每次都模拟相关的问题,验证程序是否能够正确地识别和处理相关的问题,最终的验证结果参看如下示例图所示。
(5)执行优化后的示例程序代码——输入合法的数字123
程序将提示该数字不是回文数,参看如下示例图所示。
(6)执行优化后的示例程序代码——输入不合法的数字 -123
程序将提示该所输入的数字不是正整数,需要重新输入,参看如下示例图所示。
(7)执行优化后的示例程序代码——输入合法的数字123321
程序将提示该数字是回文数,参看如下示例图所示。
(8)执行优化后的示例程序代码——输入不合法的数字-123321
程序将提示该所输入的数字不是正整数,需要重新输入,参看如下示例图所示。
(9)执行优化后的示例程序代码——输入不合法的数字123.321
程序将提示由于所输入的数字不是整数,将会导致系统出现异常抛出,需要重新输入数字,参看如下示例图所示。
计算机等级二级考试辅导:综合应用上机模拟题及解答(第3部分)
计算机等级二级考试辅导:综合应用上机模拟题及解答(第2部分)
计算机等级二级考试辅导:综合应用上机模拟题及解答(第1部分)
计算机等级考试辅导:“Java类的基本组成和使用”单元辅导文档
计算机等级考试辅导:面向对象编程的基本概念和特征单元辅导文档
举报/反馈