20145320《Java程序设计》第一次实验报告

北京电子科技学院(BESTI)实验报告

课程:Java程序设计

班级:1453

指导教师:娄嘉鹏

实验日期:2016.04.08 18:30

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

实验内容:实现凯撒密码,并进行测试

实验代码如下:

package experiment1;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Scanner; public class Experiment1 { String eStr = new String();// 加密字符串
String dStr = new String();// 解密字符串 public static void main(String[] args) { System.out.print("请输入密钥:");
Scanner s = new Scanner(System.in);
int key = s.nextInt() % 26; // %26的意义是获取密钥的偏移值
Experiment1 ks = new Experiment1();
ks.E(key);// 加密
ks.D(key);// 解密
} /**
* 加密 公式
*/
void E(int k) {
try {
System.out.println("请输入一段明文:");
char b[];
BufferedReader br2 = new BufferedReader(new InputStreamReader(System.in));
String str2 = br2.readLine();
b = str2.toCharArray();//字符串转化为字符数组
char ch = ' ';
for (int i = 0; i < str2.length(); i++) {
if (b[i] >= 'a' && b[i] <= 'z') {
ch = (char) ((b[i] - 'a' + k) % 26 + 'a');
}
if(b[i] >= 'A' && b[i] <= 'Z'){
ch =(char) ((b[i] - 'A' + k) % 26 + 'A');
}
eStr.append(ch);// 拼接字符串
}
System.out.println("密文为:"+eStr+" 密匙为:" + k);
} catch (IOException e) {
System.out.println(error.NogetMessage());
}
} /**
* 解密 公式
*/
void D(int k) {
try{
char b[];
b = eStr.toString().toCharArray();//把里面不是字符串转化为字符串后再转化为字符数组
char ch =' ';//初始化
for (int i = 0; i < eStr.length(); i++) {
if (b[i] >= 'a' && b[i] <= 'z') {
ch = (char)((b[i] - 'a' + 26 - k)% 26 +'a');
}
if(b[i] >= 'A' && b[i] <= 'Z'){
ch=(char)((b[i]-'A'+26-k)%26+'A');
}
dStr.append(ch);// 拼接字符串
}
System.out.println("明文:"+dStr);
}catch (IOException e) {
System.out.println(error.NogetMessage());
}
}

程序的核心算法:

for (int i = 0; i < eStr.length(); i++) {
if (b[i] >= 'a' && b[i] <= 'z') {
ch = (char)((b[i] - 'a' + 26 - k)% 26 +'a');
}
if(b[i] >= 'A' && b[i] <= 'Z'){
ch=(char)((b[i]-'A'+26-k)%26+'A');
}

凯撒密码属于比较简单的密码,其核心算法实现起来比较简单,关键在于ascii码与字符的相互转换。

程序的结果截图:



特殊说明:密钥可以不为3,支持大小写、中间可有空格。

遇到的难题与解决方案:

1.

在c语言中有一个gets()可以让用户直接输入一段字符,我在想java应该也会有这样的方法,然后上网搜索果然有,如下这段就是输入明文的

BufferedReader br2 = new BufferedReader(new InputStreamReader(System.in));
String str2 = br2.readLine();

InputStreamReader(System.in)方法继承于实例java.io.InputStreamReader

关于输入流java.io.InputStreamReader实例在第十章有介绍。

2.

又一次无意间忘记输入,出现了错误IOException然后想到第九章刚学的对错误的处理,就使用了try...catch语句。

3.

与c语言不一样的是,C语言无法直接定义字符串,要想收集字符串需要定义字符数组。但是java可以定义字符串使用String,但是也遇到一个问题,就是在加密过程中需要一个一个字符加密,不能直接加密字符串。后来通过百度得知语句str2.toCharArray是把字符串str2转化为字符数组,这样就能加密解密了。

4.

开始原本想用一个字符数组记录加密后的密文,但是不会把字符数组赋给字符串dStr,后来网上查到一dStr.append(ch)可以把字符ch一个个接到dStr中,很方便。

感想与总结:

对比于C语言,java确实非常好用,他的许多方法都十分方便。但是有很多方法都不太懂,所以花费在百度上的时间比较多。

20145320《Java程序设计》第一次实验报告的更多相关文章

  1. 20145205 《Java程序设计》实验报告五:Java网络编程及安全

    20145205 <Java程序设计>实验报告五:Java网络编程及安全 实验要求 1.掌握Socket程序的编写: 2.掌握密码技术的使用: 3.客户端中输入明文,利用DES算法加密,D ...

  2. 20145213《Java程序设计》实验报告一:Java开发环境的熟悉(Windows+IDEA)

    20145213<Java程序设计>实验报告一:Java开发环境的熟悉(Windows+IDEA) 实验要求 使用JDK编译.运行简单的Java程序. 使用IDEA编辑.编译.运行.调试J ...

  3. 20145206邹京儒《Java程序设计》实验报告一:Java开发环境的熟悉(Windows+IDEA)

    20145206<Java程序设计>实验报告一:Java开发环境的熟悉(Windows+IDEA) 实验内容及步骤 1.使用JDK编译.运行简单的Java程序: 建立实验目录: 在IDEA ...

  4. 20145221 《Java程序设计》实验报告四:Android开发基础

    20145221 <Java程序设计>实验报告四:Android开发基础 实验要求 基于Android Studio开发简单的Android应用并部署测试; 了解Android组件.布局管 ...

  5. 20145221 《Java程序设计》实验报告三:敏捷开发与XP实践

    20145221 <Java程序设计>实验报告三:敏捷开发与XP实践 实验要求 以结对编程的方式编写一个软件,Blog中要给出结对同学的Blog网址 记录TDD和重构的过程,测试代码不要少 ...

  6. 20145221 《Java程序设计》实验报告一:Java开发环境的熟悉(Windows+IDEA)

    20145221 <Java程序设计>实验报告一:Java开发环境的熟悉(Windows+IDEA) 实验要求 使用JDK编译.运行简单的Java程序: 使用IDEA 编辑.编译.运行.调 ...

  7. 20145301《Java程序设计》实验报告一:Java开发环境的熟悉

    20145301<Java程序设计>实验报告一:Java开发环境的熟悉 课程:Java程序设计 实验名称:Java开发环境的熟悉 实验目的与要求: 1.没有Linux基础的同学建议先学习& ...

  8. 20145212《Java程序设计》实验报告一:Java开发环境的熟悉(Windows+IDE)

    20145212<Java程序设计>实验报告一:Java开发环境的熟悉(Windows+IDE) 实验内容及步骤 1.命令行下的JAVA程序开发 建立并进入实验目录: 撰写简单的Hello ...

  9. 20145233韩昊辰 《Java程序设计》实验报告一:Java开发环境的熟悉(Windows+IDEA)

    20145233 <Java程序设计>实验报告一:Java开发环境的熟悉 实验要求 使用JDK编译.运行简单的Java程序: 使用IDEA 编辑.编译.运行.调试Java程序. 实验内容 ...

  10. 20145221 《Java程序设计》实验报告二:Java面向对象程序设计

    20145221 <Java程序设计>实验报告二:Java面向对象程序设计 实验要求 初步掌握单元测试和TDD 理解并掌握面向对象三要素:封装.继承.多态 初步掌握UML建模 熟悉S.O. ...

随机推荐

  1. 【BZOJ2473/2120】维护队列 分块+二分

    Description 你小时候玩过弹珠吗? 小朋友A有一些弹珠,A喜欢把它们排成队列,从左到右编号为1到N.为了整个队列鲜艳美观,小朋友想知道某一段连续弹珠中,不同颜色的弹珠有多少.当然,A有时候会 ...

  2. linq中join的用法

    join方法 public static IEnumerable<TResult> Join<TOuter, TInner, TKey, TResult>( this IEnu ...

  3. CodeForces 670D1 暴力或二分

    今天,开博客,,,激动,第一次啊 嗯,,先来发水题纪念一下 D1. Magic Powder - 1   This problem is given in two versions that diff ...

  4. AngularJS 乱记

    1. 前端简单逻辑 <title data-ng-bind="{true:' ('+notice_count+') '}[notice_count > 0]+{true:glob ...

  5. (转) 使用Speech SDK 5.1文字转音频

    下载地址: http://www.microsoft.com/en-us/download/details.aspx?id=10121 SeppchSDK51.exe 语音合成引擎 SpeechSDK ...

  6. (转)深入理解flash重绘

    深入理解Flash Player重绘 Flash Player 会以SWF内容的帧频速度来刷新需要变化的内容,而这个刷新的过程,我们通常称为“重绘(redraw)”,相信即便是初级的菜鸟也知道,只要使 ...

  7. HDU3466 背包DP

    Proud Merchants Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 131072/65536 K (Java/Others) ...

  8. ZK 使用Clients.response

    参考: http://stackoverflow.com/questions/11416386/how-to-access-au-response-sent-from-server-side-at-c ...

  9. C# 安装和卸载 Windows Service

    特别注意: 安装Window Service 的时候,一定要用管理员打开命令提示符(cmd) 1. 创建Windows Service 服务项目 2. Service设计界面:右键-->选择安装 ...

  10. openoffice从word转pdf问题

    http://www.oschina.net/question/227511_87517