java实验Java面向对象编程_20155218 《Java程序设计》实验三(Java面向对象程序设计)实验报告...

本文是一篇关于Java面向对象编程的实验报告,涵盖了代码重构和凯撒密码的实现。学生通过IDEA进行了代码格式化,为搭档的代码增加了JUnit测试用例,并进行了至少三项重构操作。此外,还介绍了凯撒密码的加密和解密算法,展示了具体的Java实现。
摘要由CSDN通过智能技术生成

20155218 《Java程序设计》实验三(Java面向对象程序设计)实验报告

一、实验内容及步骤

(一)编码标准

在IDEA中使用工具(Code->Reformate Code)把代码重新格式化。

1f3b5072247cd4bbcf5998eeaec5eba2.png

(二)在码云上把自己的学习搭档加入自己的项目中,确认搭档的项目加入自己后,下载搭档实验二的Complex代码,加入不少于三个JUnit单元测试用例

要求:提交搭档项目git log的截图,包含上面git commit的信息,并加上自己的学号水印信息。

ba34063f32afae0e52e285e2681c3b97.png

d5a11742c4b59233fb059515d6757d1f.png

(三)完成重构内容

要求:下载搭档的代码,至少进行三项重构,提交重构后代码的截图,加上自己的学号水印。提交搭档的码云项目链接。

搭档原代码截图:

8b5889d463aa7682adfb7f37f936ddfd.png

原代码在该用类的地方使用了结构体并且每次打印角色信息都这么写代码违反了DRY原则,造成代码重复。

修改之后

3dce7d78106281dacf0e45bdfc2e186c.png

(四)以结对的方式完成Java密码学相关内容的学习

-凯撒密码:

import java.util.Scanner;

/**

* 密码:凯撒密码

* */

public class Caeser {

public static void main(String[] args) {

System.out.println("[A 加密][J 解密],Please Choose One");

Scanner c=new Scanner(System.in);//创建Scanner键盘输入对象

String s1=c.nextLine();//获取本行的字符串

if(s1.equalsIgnoreCase("A")){

System.out.println("请输入明文:");

Scanner sc=new Scanner(System.in);

String s=sc.nextLine();

System.out.println("请输入密钥:");

Scanner sc1=new Scanner(System.in);

int key=sc1.nextInt();//将下一个输入项转换成int类型

Encryption(s, key);

}else if(s1.equalsIgnoreCase("J")){

System.out.println("请输入密文:");

Scanner sc=new Scanner(System.in);

String s=sc.nextLine();

System.out.println("请输入密钥:");

Scanner sc1=new Scanner(System.in);

int key=sc1.nextInt();//将下一个输入项转换成int类型

Decrypt(s, key);//調用解密方法

}

}

public static void Encryption(String str,int k){//加密

String string="";

for (int i = 0; i < str.length(); i++) {

char c=str.charAt(i);

if(c>='a'&&c<='z'){//如果字符串中的某个字符是小写字母

c+=k%26;//移动key%26;

if(c

c+=26;

if(c>'z')

c-=26;

}else if(c>='A'&&c<='Z'){//如果字符串中的某个字符是大写字母

c+=k%26;//移动key%26;

if(c

c+=26;

if(c>'Z')

c-=26;

}

string+=c;//将加密后的字符串连成字符串

}

System.out.println(str+" 加密后为: "+string);

}

public static void Decrypt(String str,int n){//解密

int k=Integer.parseInt("-"+n);

String string="";

for (int i = 0; i < str.length(); i++) {

char c=str.charAt(i);

if(c>='a'&&c<='z'){//如果字符串中的某个字符是小写字母

c+=k%26;//移动key%26;

if(c

c+=26;

if(c>'z')

c-=26;

}else if(c>='A'&&c<='Z'){//如果字符串中的某个字符是大写字母

c+=k%26;//移动key%26;

if(c

c+=26;

if(c>'Z')

c-=26;

}

string+=c;//将解密后的字符串连成字符串

}

System.out.println(str+" 加密后为: "+string);

}

}

-RSA密码:

8eaffb69f75f67d10b4e77218ab8a5db.png

三、总结与分析

(一)遇到的问题及解决方案:

问题一:

805782fa0066ffdecc28b4f33780ce9f.png

做该实验的时候“*”出现了问题。

解决方案:因为“”表示通配符,不会运行后面的语句。将“”换成“x”即可。

问题二:

( 二)PSP

步骤

耗时

百分比)

需求分析

10min

11.11%

设计

15min

16.66%

代码实现

40min

44.44%

测试

5min

5.55%

分析总结

20min

22.22%

Java程序设计》课程实验指导书程序代码(答案)(实验三),个人原创,仅供参考与交流。 希望多多交流,共同进步! 实验三 类和对象 一、实验目的: 掌握Java类的结构、类的定义、方法和属性的定义以及对象的实现; 掌握类及其成员修饰符的使用;掌握构造函数的使用;方法的参数传递和返回值的用法; 掌握类变量与实例变量,以及类方法与实例方法的区别。 三、实验内容: 1.定义一个学生类(Student),属性有private的名字(name), public的年龄(age),专业(specialty)和封装name属性的方法:setName(),getName(),getspecialty()编写Application,创建一个学生对象,设置name和age属性值,然后调用一个方法(此方法将对象作为参数传递,在方法中打印出学生的名字name和年龄age)。(学生类仅包含静态成员变量和方法。) 2.定义一个类Point,代表一个点,public属性有x和y,方法有显示点坐标 show(),构造函数有两个参数分别给x,y赋值,在main方法中构造两个对象,再创建一方法(getMiddle)为取两个点构成线段的中点的坐标,参数为2个点对象,调用此方法后得到一个新的点,编写Application,显示该对象的坐标值。 3.定义一个复数(z=x+iy)类Complex,包含: 两个属性:实部x和虚部y 默认构造函数 Complex(),设置x=0,y=0 构造函数:Complex(int i,int j) 显示复数的方法:showComp()将其显示为如: 5+8i或5-8i 的形式。 求两个复数的和的方法:(参数是两个复数类对象,返回值是复数类对象)public Complex addComp(Complex C1,Complex C2) 求两个复数的差的方法:(参数是两个复数类对象,返回值是复数类对象)public Complex subComp(Complex C1,Complex C2) 求两个复数的乘积的方法:(参数是两个复数类对象,返回值是复数类对象,新复数实部=两复数实部乘积-两复数虚部乘积,新复数虚部=两复数实部与虚部交叉乘积之和,)public Complex multiComp(Complex C1,Complex C2) 比较两个复数是否相等的方法(参数是两个复数类对象,返回值是boolean类型)public boolean equalComp(Complex C1,Complex C2) 在Application中测试该类的方法,实部x和虚部y可由main方法参数提供输入。 三、实验要求: 1. 正确地定义类、方法和属性; 2. 学会方法的参数传递和返回值的用法; 3. 熟练使用类及其成员修饰符 4.使用构造函数创建类的对象; 5. 类变量与实例变量,以及类方法与实例方法的使用 6.程序应包括各个被调用方法的执行结果的显示。 7.写出实验报告。要求记录编译和执行Java程序当中的系统错误信息提示,并给出解决办法。(附运行界面、源代码)。 四、实验步骤: 1.(第1题)定义一个学生类(Student)及它的属性和方法;定义主类和main(),在main()方法中创建学生对象,并通过对象调用它的方法setName(),getName(),输出学生的名字name和年龄age。 2. (第2题) 定义类Point及它的属性、方法和构造函数,定义主类和main(),在main()方法中创建两个坐标对象,,并通过对象调用getMiddle方法后得到一个新的点坐标,调用show()显示该对象的坐标值。 3. (第3题)定义一个复数(z=x+iy)类Complex,及它的属性、方法和构造函数;定义主类和main()方法,在main()方法中创建两个复数类Complex对象,并通过复数类对象调用它们的属性和方法,输出方法执行结果。 五、自做实验 1. 构造一个类来描述屏幕上的一个点,该类的构成包括点的x和y两个坐标,以及一些对点进行的操作,包括:取得点的坐标值,对点的坐标进行赋值,编写应用程序生成该类的对象并对其进行操作。 2. 编写实现:有一个三角形类Triangle,成员变量有底边x和另一条边y,和两边的夹角a(0<a<180),a为静态成员,成员方法有两个:求面积s(无参数)和修改角度(参数为角度)。 3. 编写实现: 构造函数为 Triangle(int xx,int yy,int aa) 参数分别为x,y,a赋值 在main方法中构造两个对象,求出其面积,然后使用修改角度的方法,修改两边的夹角,再求出面积值。(提示:求高的方法 h=y*Math.sin(a) ) 注意:构造方法用于对成员变量初始化,无参数的构造方法将成员变量初始化为0值。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值