• 20165115 实验一 Java开发环境的熟悉 实验报告


    实验一 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文件转移到了实验目录下,打算重新编译运行之后上传到码云当中。但是由于已经编译完成,这个文件已经变成乱码了...而我在转移之前有没有进行备份,所以源文件就丢失了...这个教训告诉我在进行会对源文件产生影响的操作之前,最好进行一下备份。

    实验心得

    我这次分配到的实验题目并不是非常难。我的心得有这么几点

    • 在可能的情况下要简化代码,提高空间利用率。即从多角度思考实现代码的简化
    • 要养成备份的习惯,特别是有些操作可能会对源文件产生不可逆影响时。
    • 编程开始前要对如何解决问题、解决问题的先后次序有清晰的认识,江大问题划分成一个个小问题去解决,这样不会编到一半不知道下一步要做什么,甚至不知道自己完成了什么没完成什么。提前做好规划,可以节省很多时间。
  • 相关阅读:
    gedit保存出现The file has been changed since reading it!!! Do you really want to write to it (y/n)?y
    8051处理器与Quatus Signal TypeⅡ进行板级调试
    DesignWare I2C模块的验证
    Denali NAND FLASH控制器的验证
    openocd安装与调试
    SPI协议介绍
    CAN协议学习(二)MCAN控制器介绍
    CAN协议学习(一)协议介绍
    Remosaic技术学习
    ISP算法:深入聊聊lens shading
  • 原文地址:https://www.cnblogs.com/zcy20165115/p/8686374.html
Copyright © 2020-2023  润新知