java程序设计实验3,20165227 《Java程序设计》实验一(Java开发环境的熟悉)实验报告...

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

###一、实验报告封面

课程:Java程序设计 班级:1652班 姓名:朱越 学号:20165227

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

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

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

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

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

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

实验知识点:

JVM、JRE、JDK的安装位置与区别;

命令行运行javac;java;javac -cp; java -cp;

PATH,CLASSPATH,SOURCEPATH的设定方法与应用;

包管理:package;import;javac -d ;

Eclipse(Netbeans)管理Java项目,调试:断点、单步执行等;

Java基础语法:类型与类型转换;变量;运算符;流程控制等;

JDK帮助文档的使用。

###二、实验步骤 ####(一)命令行下Java程序开发

1、打开Linux虚拟机中的终端进行如下操作

235e0fa901a81b047dd7ef0b55cf67b9.png

2、通过vim Hello.java 来编辑代码,并用javac -d . Hello.java 来编译代码,最后用java zy.Hello 运行带包代码

e61e1e4ff00da2e1d2e3d25bc11af427.png

####(二)IDEA下Java程序开发、调试

打开IDEA新建Java项目

04f3a13dccead79fa9ac6e6d79239e71.png

运行代码用Alt+Shift+F10 快捷键

112514e0c65ac63611ee7fe114e309a6.png

设置断点,直接在代码左侧单击右键

d7308c4b000462258871b37804eb4c8f.png

运行断点用Alt+Shift+F9 快捷键;继续向下单步执行可使用Step IntoF7 和Step OverF8

b3774568eb015e89a0d03b5a7eaa402a.png

或者直接F9 快捷键运行完毕

0a5ea73d4334fb8ae620490a1071fe75.png

条件断点:

在断点出单击右键出现设置

a4df568e4295b9e1247fec22b0e74b8c.png

从上一个断点通过快捷键F9 执行至条件断点

2099524b02188abb011f27815eb544fd.png

###(三)练习

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

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

测试代码

import java.io.*;

import java.util.Scanner;

public class K {

public static void main(String[] args) {

Caeser person = new Caeser();

System.out.println("========================================");

System.out.println("==========加密输入1,解密输入2==========");

System.out.println("========================================");

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.print("密文是:" + serct);

}

catch (E 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 (E e){

System.out.println(e.warnMess());

}

}

}

}

密码算法

public class Caeser {

String encrypt(String sourceString, int password) throws E{

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 E(sourceString);

}

int mima = (c[i] - 'a' + password) % 26 + 'a';

c[i] = (char) mima;

}

return new String(c);

}

String decrypt(String sourceString, int password) throws E{

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 E(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);

}

}

异常代码

public class E extends Exception{

String message;

public E(String sourceString){

message = "输入错误!";

}

public String warnMess(){

return message;

}

}

#####测试

正常情况

8354b61dc7df9ddc198ff3acfeedd147.png

异常情况

e4f40d5c137017b97fed95872981d13f.png

边界情况

e4a10a28fd6f962aa9b16d872f9182f7.png

#####3、IDEA测试

正常情况

0632098691148f6fe60939e0a0081804.png

异常情况

d95dfa32f2be7fcdf0c6ba7409b18656.png

边界情况

5495d894d7889cf1433b74333478f184.png

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

会出现密文出现乱码的问题,已解决

###四、实验体会与总结

在做前两个实验的过程中让我对代码的理解和对IDEA调试方面的理解都加深了,弥补了之前对与断点调试的理解运用不恰的问题

对于第三个练习实验,凯撒密码算法的编写让我思考了很久,在这里我又发现了自己对于Java代码和C语言功底的不足,通过资料查找和时间才算是完成了这个实验,也算是触及了密码算法实现的一角,加深了对其的理解

步骤

耗时

百分比

需求分析

7min

5%

设计

10min

7%

代码实现

100min

73%

测试

5min

4%

分析总结

15min

11%

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值