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. jQuery 源码理解的基础

    /** * Created by cyk on 14-4-17. */function Person() { var temp = this; //this指向Person console.log(& ...

  2. git两种合并方法 比较merge和rebase

    18:01 2015/11/18git两种合并方法 比较merge和rebase其实很简单,就是合并后每个commit提交的id记录的顺序而已注意:重要的是如果公司用了grrit,grrit不允许用m ...

  3. POJ 1654 Area(水题)

    题目链接 卡了一下精度和内存. #include <cstdio> #include <cstring> #include <string> #include &l ...

  4. 【JAVA】ConcurrentHashMap

    HashTable 写操作时候,Lock全表    源码:  public synchronized V put(K key, V value) {  // Make sure the value i ...

  5. mapreduce作业状态一直是ACCEPTED

    搭建yarn环境后,执行 hadoop/bin/hadoop jar hadoop/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.4.1.jar ...

  6. TCP连接探测中的Keepalive和心跳包

    TCP连接探测中的Keepalive和心跳包 tcp keepalive 心跳 保活 Linuxtcp心跳keepalive保活1. TCP保活的必要性 1) 很多防火墙等对于空闲socket自动关闭 ...

  7. [转][LeetCode]Longest Common Prefix ——求字符串的最长公共前缀

    题记: 这道题不难但是很有意思,有两种解题思路,可以说一种是横向扫描,一种是纵向扫描. 横向扫描:遍历所有字符串,每次跟当前得出的最长公共前缀串进行对比,不断修正,最后得出最长公共前缀串. 纵向扫描: ...

  8. HTTP头部解析

    当我们打开一个网页时,浏览器要向网站服务器发送一个HTTP请求头,然后网站服务器根据HTTP请求头的内容生成当次请求的内容发送给浏览器.你明白HTTP请求头的具体含意吗?下面一条条的为你详细解读,先看 ...

  9. 运维、linux运维是什么?

    从不知道运维是什么 到后来接触了linux运维 后来玩遍了运维常用的各种开源软件发现原来运维是这么回事 又到了后来,运维真的是我理解的这些吗?会软件,会配置,会部署.会调优,会处理故障...但是总觉得 ...

  10. 解决HDU爆栈的问题

    转载:http://forum.byr.edu.cn/article/ACM_ICPC/51264 大家懂的,鉴于HDU用的是windows服务器,所以stack大小及其坑爹,稍微深一点的递归栈就会s ...