博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
20165318 《Java程序设计》实验一(Java开发环境的熟悉)实验报告
阅读量:6330 次
发布时间:2019-06-22

本文共 5374 字,大约阅读时间需要 17 分钟。

20165318 《Java程序设计》实验一(Java开发环境的熟悉)实验报告

一、实验报告封面

课程:Java程序设计        班级:1653班        姓名:孙晓暄        学号:20165318

指导教师:娄嘉鹏                              实验日期:2018年4月2日

实验时间:13:45 - 3:25                    实验序号:实验一

实验名称:Java开发环境的熟悉

实验题目:实现凯撒密码并进行安全加固,并进行测试(正常情况,异常情况,边界情况)

实验内容

1.使用JDK编译、运行简单的Java程序;
2.使用IDEA 编辑、编译、运行、调试Java程序。

实验要求

1.没有Linux基础的同学建议先学习《Linux基础入门(新版)》《Vim编辑器》 课程;
2.完成实验、撰写实验报告,注意实验报告重点是运行结果,遇到的问题(工具查找,安装,使用,程序的编辑,调试,运行等)、解决办法(空洞的方法如“查网络”、“问同学”、“看书”等一律得0分)以及分析(从中可以得到什么启示,有什么收获,教训等);
3.实验报告中统计自己的PSP(Personal Software Process)时间;
4.严禁抄袭。

二、实验内容及步骤

(一)使用JDK编译、运行简单的java程序

  • 命令行下的程序开发
    步骤一(新建文件夹):打开windows下的git bash → 输入cd java命令进入java目录 → 输入mkdir 20165318test建立以自己学号命名的文件夹 → 输入cd 20165318test进入文件夹 → 输入mkdir exp1建立“实验一”文件夹 → 输入cd exp1进入“实验一”文件夹 → 输入mkdir src ,mkdir bin,建立src和bin文件夹。

1296414-20180331145235847-68462444.png

步骤二(编译、运行java程序):使用git bash中的vim编辑器编辑java程序 → 在命令行下编译、运行

1296414-20180331145431936-395088483.png

1296414-20180331145442100-1662743140.png

1296414-20180331145450956-1319540071.png

(二)使用IDEA编辑、编译、运行、调试Java程序

1、新建「HelloJDB」类,输入如下代码:

1296414-20180331150554666-115337148.png

2、运行「HelloJDB」,单击运行按钮(或使用Alt+Shift+F10快捷键)

1296414-20180331150918827-1721472083.png

3、设置断点,单步运行。

在需要设置断点的一行左侧单击鼠标,出现红色圆点。比如如下在第七行设置了断点:

1296414-20180331151458891-1026603527.png

在上方Run菜单找到Debug...进行单步调试(或使用Alt+Shift+F9快捷键):

1296414-20180331151749893-775332610.png

运行到第七行截止,结果如下:

1296414-20180331151855734-1094839367.png

继续向下单步执行可使用Step Into(快捷键F7)和Step Over(快捷键F8)

1296414-20180331153641280-364316820.png

Step Over(F8):程序向下执行一行(如果当前行有方法调用,这个方法将被执行完毕返回,然后到下一行)

Step Into(F7):程序向下执行一行。如果该行有自定义方法,则运行进入自定义方法(不会进入官方类库的方法)

Force Step Into:进入任何方法

Step Out(Shift+F8):如果在调试的时候进入了一个方法,并觉得该方法没有问题,就可以使用stepout跳出该方法,返回到该方法被调用处的下一行语句。值得注意的是,该方法已执行完毕。

Run to Cursor:将程序运行到光标处。

可使用Resume(快捷键F9)直接运行完毕,如下图:

1296414-20180331153816308-1243282305.png

4、条件断点

如果想查看大循环中出现的问题,可以通过条件断点来解决。如下图所示设置条件断点,使用Resume(快捷键F9)从上一个断点直接运行到此条件断点。

1296414-20180331161016867-1351812187.png

(三)练习:实现凯撒密码并进行安全加固,并进行测试(正常情况,异常情况,边界情况)

要求』:通过命令行和IDEA两种方式实现,在IDEA下练习调试程序。

1、设计思路

我们知道凯撒密码是一种代换密码。他的基本思想是:通过把字母移动一定的位数来实现加密和解密。明文中的所有字母都在字母表上向后(或向前)按照一个固定数目进行偏移后被替换成密文。位数就是凯撒密码加密和解密的密钥。

我要实现使用凯撒密码在不同密钥下对明文,进行加密;或对密文进行解密。

2、代码撰写

shiyan1.java

/** * Created by SXX on 2018/3/31 */import java.io.*;import java.util.Scanner;public class shiyan1 {    public static void main(String[] args)  {        EncryptAndDecrypt person = new EncryptAndDecrypt();        System.out.print("请选择加密还是解密:(加密输入1,解密输入2)");        Scanner scanner = new Scanner(System.in);        int n = scanner.nextInt();        if (n == 1) {            System.out.print("请输入明文:");            Scanner scanner1 = new Scanner(System.in);            String m = scanner1.nextLine();            System.out.print("请输入密钥:");            Scanner scanner2 = new Scanner(System.in);            int k = scanner2.nextInt();            try {                String serct = person.encrypt(m, k);                System.out.println("密文是:" + serct);            }            catch (EadException e){                System.out.println(e.warnMess());            }        } else {            System.out.print("请输入密文:");            Scanner scanner1 = new Scanner(System.in);            String m = scanner1.nextLine();            System.out.print("请输入密钥:");            Scanner scanner2 = new Scanner(System.in);            int k = scanner2.nextInt();            try {                String source = person.decrypt(m, k);                System.out.print("明文是:" + source);            }            catch (EadException e){                System.out.println(e.warnMess());            }        }    }}

EncryptAndDecrypt.java //凯撒密码

public class EncryptAndDecrypt {    String encrypt(String sourceString, int password) throws EadException{   //加密算法        char[] c = sourceString.toCharArray();        int m = c.length;        for (int i = 0; i < m; i++) {            if(c[i]>122||c[i]<65||(c[i]>90&&c[i]<97)){                throw new EadException(sourceString);            }            int mima = (c[i] - 'a' + password) % 26 + 'a';          //加密            c[i] = (char) mima;        }        return new String(c);                                       //返回密文    }    String decrypt(String sourceString, int password) throws EadException{   //解密算法        char[] c = sourceString.toCharArray();        int m = c.length;        for (int i = 0; i < m; i++) {            if(c[i]>122||c[i]<65||(c[i]>90&&c[i]<97)){                throw new EadException(sourceString);            }            int n = c[i] - 'a' - password;            if (n <= 0) {                n = n + 26;            }            int mima = n % 26 + 'a';          //解密            c[i] = (char) mima;        }        return new String(c);                          //返回明文    }}

EadException.java //自定义异常类

public class EadException extends Exception{    String message;    public EadException(String sourceString){        message = "所输入的字符不符合要求";    }    public String warnMess(){        return message;    }}

3、运行结果

命令行实现:
  • 正常情况

1296414-20180331183830367-2087922371.png

  • 边界情况

1296414-20180331183910334-602303086.png

1296414-20180331183925982-1218877132.png

  • 异常情况

1296414-20180331183944656-1960714408.png

IDEA调试:
  • 正常情况

1296414-20180331185021466-436849369.png

  • 边界情况

1296414-20180401203048463-954948700.png

1296414-20180401203055766-1419113357.png

  • 异常情况

1296414-20180401201819689-856986135.png

1296414-20180401202542865-447753887.png

1296414-20180401202732402-1398463864.png

三、实验过程中遇到的问题

  • 问题1:当输入字母处于临界值时,不能正常字母,出现异常字符,如下图:

1296414-20180331185436884-1813776217.png

  • 解决过程:使用终端计算后发现,解密时,当字母对应ASCII码取余26,如果是负数,就会输出异常字符,在程序中添加if语句,负数是加上26,就可以解决了。

  • 问题2:在使用异常类时,我本来想直接使用IOException异常类,但是程序报错。

  • 解决过程:在查阅Scanner类会出现的异常时发现,IOException异常类用于,参数有流的情况下,而我的代码中没有使用流。因此我自己定义了一个异常类,问题得以解决。

四、实验体会与总结

“纸上得来终觉浅,绝知此事要躬行。”书上的代码敲的有3000多行了,真正掌握了书上多少知识点我并不清楚。“实践是检验真理的唯一标准。”实验使我将理论用于实际,对课本知识有了更深的理解。

刚开始看到这个题目的时候,感觉不是很难,但仔细分析之后发现,要真正完整的实现凯撒密码,考虑到尽可能多的情况并不容易,我最初只是进行了一个大致的设计,然后就开始上手编代码,其中遇到很多没有想到的情况,就要打断原来的思路,甚至颠覆之前的想法,这使我编写代码的效率大大降低。因此,敲代码前先构思好整体的框架,尽可能多的想会出现的问题及解决方法,在再编写时用细节一点一点的填充。

之前看书时,我不太理解为什么要将不同的类分开,觉得这样查看起来很麻烦。但这次实验使我感觉到编写时将不同的类分开的好处。最初的代码,我将两个大类都放在一起,出现问题时,要一直上下翻看对比,在自定义异常类时,我将所有的类都分开了,一目了然,运行出现问题时,也比较好查看。

这个代码算是我真正自己编写的代码,编完之后,一股成就感油然而生。这次实验不仅使我更加深入的理解了教材上的知识点,而且锻炼了我的思考能力,让我意识到拥有正确的编程思想的重要性。

码云链接:

代码上传截图:

1296414-20180331193756179-540085208.png

步骤 耗时 百分比
需求分析 4min 4%
设计 5min 5%
代码实现 60min 64%
测试 4min 5%
分析总结 20min 22%

转载于:https://www.cnblogs.com/sunxiaoxuan/p/8682582.html

你可能感兴趣的文章
我的Git忽略文件
查看>>
大型网站技术架构(五)网站高可用架构
查看>>
HTML5 Session Local Storage
查看>>
青春路上,岁月如烟
查看>>
Linux实用工具
查看>>
将centos7打造成桌面系统
查看>>
puppet基本配置
查看>>
Spring常用注解
查看>>
linux登录日志
查看>>
yum不能升级
查看>>
又见那风鸣
查看>>
网络公开课《八一建军节引发的Oracle数据库思考:虚拟私有数据库》
查看>>
Ubuntu下完全卸载Nginx
查看>>
华三企业网关新增IP地址段
查看>>
我的友情链接
查看>>
java找出最低分及他在数组找中的位置
查看>>
在一个每一行从左到右递增每一列从上到下递增的二维数组中查找一个整数是否存在——3...
查看>>
PHP 做网站真好用
查看>>
word - 如何让 图片任意移动
查看>>
多态and接口
查看>>