实验一 Java开发环境的熟悉 实验报告
Java开发环境的熟悉-1
第一步的内容相当基础,不再赘述。
Java开发环境的熟悉-2
断点的设置以及单步调试是编程中调试的重要方式。例如下图就是设置了一个断点。
单步调试。
Java开发环境的熟悉-3
这次的实验指导这个环节才算是真正的开始。我的题目是第七题,也就是实现求两个数的最大公约数和最小公倍数的功能,数从命令行输入,并进行测试。
我认为这个题目的核心有两点:第一点是如何求出最大公约数,第二点是如何对可能出现的错误情况进行讨论。第一点在进行了思考之后,最简便的实现方法还是递归运算。有关代码如下:
public static int get_gcd(int a, int b) {
int max, min;
max = (a > b) ? a : b;
min = (a < b) ? a : b;
if (max % min != 0) {
return get_gcd(min, max % min);
} else
return min;
}
要对两个数字进行取余的操作就需要对两个数进行大小的区分。这也就是最开始几行代码的意义所在。另外,在这一部分,为了减少代码行数,我使用了一个三元运算符?这个运算符的使用使得本来要是用if-else的几行代码简化到了一行以内,虽然使用和阅读上似乎没有那么直接了当,但是有相关基础的人应该也能够一目了然的知道这么写的意义所在。另外,递归算法实现的就是辗转相除法,相信读者都能明白,也不做赘述。
最小公倍数的求解就相对简单很多了,两者的成绩和最大公约数做个除法就可以得到结果。代码如下:
public static int get_lcm(int a, int b) {
return a * b / get_gcd(a, b);
}
我这样的编程方法,核心问题就聚焦在了最大公约数上面。所以在确定了编程思路之后我首先解决的问题就是最大公约数,并对其进行了一些优化(上文提到的用三元运算符代替if-else语句)。
之后解决的就是之前课上提到的如何从命令行直接输入信息。我这里采用了一个临时数组来完成这个任务:
public static void main(String[] args) {
int [] tmp = new int [args.length];
for(int i=0; i<args.length;i++) {
tmp[i]= Integer.parseInt(args[i]);
}
int n1 = tmp[0];
int n2 = tmp[1];
System.out.println("(" + n1 + "," + n2 + ")" + "=" + get_gcd(n1, n2));
System.out.println("[" + n1 + "," + n2 + "]" + "=" + get_lcm(n1, n2));
}
代码部分的构思与解释就告一段落。因为我是通过VB与主系统共享文件夹来实现的文件运行,在这一部分的操作之中出现了一个小插曲。因为我的共享文件夹是独立在另一个路径下,而我在调试完成程序没有问题之后才通过命令行将.java文件转移到了实验目录下,打算重新编译运行之后上传到码云当中。但是由于已经编译完成,这个文件已经变成乱码了...而我在转移之前有没有进行备份,所以源文件就丢失了...这个教训告诉我在进行会对源文件产生影响的操作之前,最好进行一下备份。
实验心得
我这次分配到的实验题目并不是非常难。我的心得有这么几点
- 在可能的情况下要简化代码,提高空间利用率。即从多角度思考实现代码的简化
- 要养成备份的习惯,特别是有些操作可能会对源文件产生不可逆影响时。
- 编程开始前要对如何解决问题、解决问题的先后次序有清晰的认识,江大问题划分成一个个小问题去解决,这样不会编到一半不知道下一步要做什么,甚至不知道自己完成了什么没完成什么。提前做好规划,可以节省很多时间。