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虚拟机中的终端进行如下操作
-
2、通过
vim Hello.java
来编辑代码,并用javac -d . Hello.java
来编译代码,最后用java zy.Hello
运行带包代码
(二)IDEA下Java程序开发、调试
-
打开IDEA新建Java项目
-
运行代码用
Alt+Shift+F10
快捷键
- 设置断点,直接在代码左侧单击右键
-
运行断点用
Alt+Shift+F9
快捷键;继续向下单步执行可使用Step IntoF7
和Step OverF8
-
或者直接
F9
快捷键运行完毕
-
条件断点:
-
在断点出单击右键出现设置
-
从上一个断点通过快捷键
F9
执行至条件断点
(三)练习
- 要求:实现凯撒密码并进行安全加固,并进行测试(正常情况,异常情况,边界情况)
- 凯撒密码:通过把字母移动一定的位数来实现加密和解密。明文中的所有字母都在字母表上向后(或向前)按照一个固定数目进行偏移后被替换成密文。位数就是凯撒密码加密和解密的密钥。
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;
}
}
测试
- 正常情况
- 异常情况
- 边界情况
3、IDEA测试
-
正常情况
-
异常情况
- 边界情况
三、实验过程中遇到的问题
- 会出现密文出现乱码的问题,已解决
四、实验体会与总结
- 在做前两个实验的过程中让我对代码的理解和对IDEA调试方面的理解都加深了,弥补了之前对与断点调试的理解运用不恰的问题
- 对于第三个练习实验,凯撒密码算法的编写让我思考了很久,在这里我又发现了自己对于Java代码和C语言功底的不足,通过资料查找和时间才算是完成了这个实验,也算是触及了密码算法实现的一角,加深了对其的理解
步骤 | 耗时 | 百分比 |
---|---|---|
需求分析 | 7min | 5% |
设计 | 10min | 7% |
代码实现 | 100min | 73% |
测试 | 5min | 4% |
分析总结 | 15min | 11% |