Java实践
作者:互联网
昨天是我们正式上Java的第一天,老师昨天主要为我们讲了3个板块的内容:大道至简——编程精义、Java语法基础、Java课后实践。首先老师让上一次课堂测验的优秀同学展示之间的代码,通过优秀同学的代码我明白了大道至简的编程思路:分解、模块识别、抽象、算法。在写一道编程题的时候,我们首先要将问题一步步的分解成若干个组件,再将多次出现的相似功能设成独立的方法,调试每个独立组件的健壮性,再测试整个系统的性能,这样就完成了一个程序的编程。在课堂中老师让我们输出两个double类型的数据相加,通过测试我们发现当直接输出一个double类型的数据是可能会出现“数学上不精确的情况”,这个问题是与浮点数在计算机内部的表示方法有关。要想解决这个问题就需要用到BigDecimal类来实现,BigDecimal类是包含在Java.math.BigDecimal中,可以通过这样定义来输出:BigDeciaml double1=new BigDecimal(Double.tostring(3.14))来输出浮点数据类型。
以上是老师在前两节课上讲的内容,在最后两节课上老师让我们写了三个程序,实际上是一个程序,只是将其分成了三个测试点,这三个测试点层层推进,一步步的深化,充分体现了大道至简的编程思路——分解。第一个测试点要求我们写一个能自动生成30道小学四则运算题目的软件,在看见这一道题的时候我首先想到的是Random生成随机数,但通过实践我发现这样是有些困难的,生成的随机数字倒是没有什么问题,关键是随机生成加减乘除的符号,在加减乘除方面我是用的是switch case语句,通过随机生成的数字来进行选择,但Random生成的随机数是Random类型的,而switch case语句需要int型,然后我打算将Random强制类型转化为int型,但是我没有强制类型转化成功,只好找其他的方法产生随机数,然后我发现了 int r=(int)(Math.random()*max)的方法产生随机数,这样就解决了switch case要求的int类型。由此课堂测试一完成了。课堂测试二要求所出的题目不能重复,并且可以定制所出题目的数量,每一行有几道题,可以定制这个要求很简单,只要用for循环就可以达成,用户输入题目数量max和每行的题目数n,i<max生成题目,如果(i+1)%n==0换行,否则输出空格。题目避免重复我想到的解决方法是String数组储存题目,每一次要输出的时候判断一下,如果重复的话,一直产生新的题目,直至不重复,以上是我在做测试二的思路。测试三对我来说难度比较大,定制是否有乘法、数值的范围都比较简单操作数的个数也还可以,就用for循环,生成每道题的随机数就可以,难的是定制是否有括号,首先我需要判断用户是否要求有括号,其次我需要计算机随机产生0、1,0代表这道题没有括号,1代表这道题有括号,从而达到计算机随机产生括号的要求,然后难点就来了,产生的括号要随机,也就是说任何合理的地方都可以产生括号,我的思路是在生成两个包含0 1的随机数由此来判断前括号、或括号出现的位置,因为每道题目需要一个括号,所以前括号随机生成一次就可以,定义一个boolean falg1=true 当前括号生成后flag=false,通过if语句使其不再产生前括号,关于后括号的出现就更难了,我需要判断前括号是否产生,只有前括号产生了后括号才可以出现,还要判断在前括号产生的前提下,最后一个随机数产生后,后括号是否出现,如果没有需要强制后括号出现,在实际输出时还要防止括号只括到一个数也就是说前括号和后括号不能在同一次循环中产生,由此有需要一个判定条件。将这些问题解决后测试三完成了。
标签:编程,Java,BigDecimal,大道至简,int,Random,实践 来源: https://www.cnblogs.com/cinan/p/16676314.html