20145320《Java程序设计》第一次实验报告
2016-04-10 15:53
567 查看
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确实非常好用,他的许多方法都十分方便。但是有很多方法都不太懂,所以花费在百度上的时间比较多。相关文章推荐
- ASA用ASDM管理时报unable to launch device manage xxxx.xxx.xxx.xxx
- 20145311 实验一 "Java开发环境的熟悉"
- 20145227 《Java程序设计》第6周学习总结
- java中的接口和抽象类
- 20145210姚思羽《Java程序设计》实验一实验报告
- struts2 action
- 【java】关于static关键字在重写父类方法时的作用
- JAVA的Class.forName(clsName)ClassLoader的loadClass(clsName)的区别
- 1章 初识Java
- No qualifying bean of type [XXX.XXX] found for dependency 解决方法
- Java基础---------2016.4.10(2)
- Java 信号量 Semaphore 介绍
- JAVA中this用法总结
- spring自带的定时器@Scheduled
- 20145307陈俊达第六周JAVA学习总结
- java插入排序(个人总结)
- Java实现数组反转翻转的方法
- JavaWeb总结(一)—Servlet
- Quartz使用-入门使用(java定时任务实现)
- 20145327 《Java程序设计》第六周学习总结