zoukankan      html  css  js  c++  java
  • 20145320《Java程序设计》第一次实验报告

    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确实非常好用,他的许多方法都十分方便。但是有很多方法都不太懂,所以花费在百度上的时间比较多。

  • 相关阅读:
    KubeSphere 3.1.0 GA:混合多云走向边缘,让应用无处不在
    5.29 相约杭州!云原生 Meetup 第二期杭州站开启报名
    SQL查询每门课程的前几名
    JavaScript之构造函数
    wchar*与char *相互转换 [MultiByteToWideChar、WideCharToMultiByte函数用法]
    面试、笔试中常用的SQL语句(数据库知识必杀)一共50个!!!
    HTTP协议详解
    浅谈model, orm, dao和active record的区别
    ASP.NET 2.0中的跨页面提交
    YII框架yiic、gii工具使用方法
  • 原文地址:https://www.cnblogs.com/zqh20145320/p/5374330.html
Copyright © 2011-2022 走看看