2018-2019-2 20175209 实验一《Java开发环境的熟悉》实验报告

一、实验内容及步骤

1.使用JDK编译、运行简单的Java程序

  • cd 20175209进入20175209文件夹
  • mkdir 20175209exp1建立20175209文件夹
  • 分别使用mkidr srcmkdir bin建立src和bin目录
  • 通过vim src/Hello.java 编写Hello.java
  • javac -d bin src/Hello.java编译代码
  • cd bin java wzh.Hello运行代码

    实验截图:

2.使用IDEA调试Java程序

  调试代码这一部分按照博客链接http://www.cnblogs.com/rocedu/p/4421202.html完成即可,注意的是博客中讲的IDEA的快捷键有些电脑可能无法使用(比如我),如果出现这种情况,在使用快捷键的同时还需要按“Fn”键即可利用快捷键操作。

  调试截图:







3.练习

题目1. 实现凯撒密码并进行安全加固,并进行测试(正常情况,异常情况,边界情况)。

实验程序:

import java.io.*;
import java.util.*;
public class shiyan1 {
  public static void main(String[] args) {
    Scanner in = new Scanner(System.in);
    int a;
    System.out.println("凯撒密码计算");
    do{
      System.out.println("1.加密 2.解密");//要执行的操作
      System.out.println("请输入要执行的操作");
      int n = in.nextInt();
      if(n == 1) {
        try {
          EncryptAndDecrypt person = new EncryptAndDecrypt();
          System.out.println("明文:");
          Scanner scan = new Scanner(System.in);
          String sourceString = scan.next();
          System.out.println("密钥:");
          Scanner scanner = new Scanner(System.in);
          int password = scanner.nextInt();
          String secret = person.encrypt(sourceString, password);
          System.out.println("密文:" + secret);
        }
        catch(EncryptAndDecryptException e) {
          System.out.println("Warning:");
          System.out.println(e.warnMess());
        }
      }
      else if(n == 2) {
        try {
          EncryptAndDecrypt person = new EncryptAndDecrypt();
          System.out.println("密文:");
          Scanner scan = new Scanner(System.in);
          String sourceString = scan.next();
          System.out.println("密钥:");
          Scanner scanner = new Scanner(System.in);
          int password = scanner.nextInt();
          String source = person.decrypt(sourceString,password);
          System.out.println("明文:"+source);
        }
        catch(EncryptAndDecryptException e) {
          System.out.println("Warning:");
          System.out.println(e.warnMess());
        }
      }
      System.out.println("输入1继续,输入0结束:");
      a = in.nextInt();
    }while(a==1);
  }
} class EncryptAndDecrypt {
  String encrypt(String sourceString,int password) throws EncryptAndDecryptException { //加密算法
    char [] c = sourceString.toCharArray();
    int m = c.length;
    for(int k=0;k<m;k++){
      if((c[k]>=65&&c[k]<=90)||(c[k]>=97&&c[k]<=122)){
        int mima=(c[k] -'a' + password) % 26 + 'a'; //加密,同时转码
        c[k]=(char)mima;
      }
      else {
        throw new EncryptAndDecryptException(sourceString);
      }
    }
    return new String(c); //返回密文
  }
  String decrypt(String sourceString,int password) throws EncryptAndDecryptException { //解密算法
    char [] c = sourceString.toCharArray();
    int m = c.length;
    for(int k=0;k<m;k++){
      if((c[k]>=65&&c[k]<=90)||(c[k]>=97&&c[k]<=122)){
        int mima=((c[k] + 26) -'a' - password) % 26 + 'a'; //解密,同时转码
        c[k]=(char)mima;
      }
      else {
        throw new EncryptAndDecryptException(sourceString);
      }
    }
    return new String(c); //返回明文
  }
} class EncryptAndDecryptException extends Exception {
  String message;
  public EncryptAndDecryptException(String sourceString) {
    message="输入错误!";
  }
  public String warnMess() {
return message;
}
}

运行结果:

二、实验中遇到的问题

1.首先在写移位环节的代码时,只考虑到ASCII码表的转换差值,没有将所得的结果mod26运算导致运行时出现错误(这里由于当时程序时忘记了截图,现在写好的程序已经看不到这个问题了,所以只有改好的截图),正确方法是应该在进行完差值运算后要将结果mod26再加上'a'的值

2.在明密文转换时开始总是运行失败,自己一直找不到原因,在网上进行相关查找发现自己输入是以字符串String形式输入的,而在进行转换时需要一位一位转换,因此需要char [] c = sourceString.toCharArray();语句将其放进数组中进行按位比较

3.在程序写好测试边界时,发现程序每次只能完成一组操作,这样测试起来会非常麻烦,因此我在程序之中加上了一个do--while 循环,由操作者确定执行操作的次数,这时用到了一个变量来控制程序的进行和停止,这里要注意的是,这个变量虽然要在循环内部输入,但定义时一定要在循环外部定义,否则会提示出现错误。

三、实验心得体会:

  • 本次练习的题目为凯撒密码,大致看了一下几个题目,感觉这个题目的难度相对偏高,利用现有的知识编写可能相对困难,在编写EncryptAndDecrypt类是需要用到关键字throws、throw还有try-catch 语句,这些内容暂时还没有学到,所以在写题目的时候比较吃力,因此上网寻找了一些简单的代码并参考了相关程序,参考连接https://blog.csdn.net/lbllol365/article/details/78822123和https://blog.csdn.net/qq_40956679/article/details/80896922
  • 对于IDEA中调试部分的掌握是非常有必要的,包括哪些快捷键,在调试比较复杂的代码时可以节省大量的时间
  • 本次实验非常综合,我的题目对我来说难度也不小,需要反复的修改,尤其是其中还会涉及到少量暂时没有学到的东西,老师建议我们结对学习我认为也是十分必要的,在关键时候互相讨论可能会有更简单的方法解决,而不是花费大量时间去网上现场学习
  • 通过本次实验也发现了自己在编写程序之前对于程序框架的构造还不够全面,对于其中部分问题的操作方法也没有合理的考虑,因此在写程序时总会出现一些可以被避免的错误,这些也需要在写其他程序时多加练习

2018-2019-2 20175209 实验一《Java开发环境的熟悉》实验报告的更多相关文章

  1. 20145308刘昊阳 《Java程序设计》实验一 Java开发环境的熟悉 实验报告

    20145308刘昊阳 <Java程序设计>实验一报告 实验名称 Java开发环境的熟悉 实验内容 使用JDK编译.运行简单的Java程序 2.使用Eclipse 编辑.编译.运行.调试J ...

  2. 20175316 盛茂淞 2018-2019-2 《Java程序设计》实验一 Java开发环境的熟悉 实验报告

    20175316 盛茂淞 2018-2019-2 <Java程序设计>实验一 Java开发环境的熟悉 实验报告 一.实验要求 1.使用JDK编译.运行简单的Java程序: 2.使用IDEA ...

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

    20165327<Java程序设计>实验二 <Java面向对象程序设计>实验报告 实验二 <Java面向对象程序设计> 一.实验报告封面 课程:Java程序设计 班 ...

  4. 20165205 实验一 java开发环境的熟悉 实验报告

    20165205 实验一 Java开发环境的熟悉 一.实验报告封面 课程:Java程序设计 班级:1652班 姓名:刘喆君 学号:20165205 指导教师:娄嘉鹏 实验日期:2018年4月2日 实验 ...

  5. 20162327实验一Java开发环境的熟悉实验报告

    20162327 <程序设计与数据结构>第一次实验报告 基础知识 1.JDB的使用 使用JDB调试程序需要以下五个步骤: 1.设置断点 stop in 2.run 3.print 4.ne ...

  6. 实验一Java开发环境的熟悉

    实验一Java开发环境的熟悉 实验内容 •命令行下Java程序开发 •IDEA下Java程序开发.调试 •练习(通过命令行和Eclipse两种方式实现,在Eclipse下练习调试程序) •实现凯撒密码 ...

  7. 20175316 盛茂淞 实验一 Java开发环境的熟悉

    20175316 盛茂淞 实验一 Java开发环境的熟悉 实验目的 使用JDK编译.运行简单的Java程序 实验要求 1.建立"自己学号exp1"的目录 2.在"自己学号 ...

  8. 20155327实验一 Java开发环境的熟悉

    20155327实验一 Java开发环境的熟悉 实验内容 1.使用JDK编译.运行简单的java程序 2.使用IDEA编辑.编译.运行.调试java程序 实验步骤 1.使用JDK编译.运行简单的jav ...

  9. 20165233 实验一 Java开发环境的熟悉

    20165233 实验一 Java开发环境的熟悉 实验要求 1.没有Linux基础的同学建议先学习<Linux基础入门(新版)><Vim编辑器> 课程: 2.完成实验.撰写实验 ...

  10. 20155231 java实验一 Java开发环境的熟悉

    20155231 java实验一 Java开发环境的熟悉 实验要求 没有Linux基础的同学建议先学习<Linux基础入门(新版)><Vim编辑器> 课程: 完成实验.撰写实验 ...

随机推荐

  1. iOS 设置View阴影

    iOS 设置View投影 需要设置 颜色 阴影半径 等元素 UIView *shadowView = [[UIView alloc] init]; shadowView.frame = CGRectM ...

  2. javascript Json和String互转

      var jsonText = "{\"id\":\"123\",\"name\":\"tom\",\&qu ...

  3. table 的宽度设置无效

    1.在table 标签添加样式 table-layout: fixed; 必须设置width的值:<table style="table-layout: fixed"> ...

  4. sklearn使用——梯度下降及逻辑回归

    一:梯度下降: 梯度下降本质上是对极小值的无限逼近.先求得梯度,再取其反方向,以定步长在此方向上走一步,下次计算则从此点开始,一步步接近极小值.需要注意的是步长的取值,如果过小,则需要多次迭代,耗费大 ...

  5. Scrapy案例02-腾讯招聘信息爬取

    目录 1. 目标 2. 网站结构分析 3. 编写爬虫程序 3.1. 配置需要爬取的目标变量 3.2. 写爬虫文件scrapy 3.3. 编写yield需要的管道文件 3.4. setting中配置请求 ...

  6. About Pull Strings 英语走后门议论文

    About pull strings Author : Pleiades_Antares 1. From ancient times to the present, the "going b ...

  7. html+css 制作简易导航栏

    二话不说直接上代码(萌新:实在也没什么好说的) <!DOCTYPE html> <html lang="en" xmlns="http://www.w3 ...

  8. 【Python 补充01】Python运算符

    Python运算符 举个简单的例子 4 +5 = 9 . 例子中,4 和 5 被称为操作数,"+" 称为运算符. 1.算术运算符 + - * / # 加减乘除 % # 取模(返回除 ...

  9. 【Topcoder 1879】Scheduling

    题意:给一个\(dag\),每一个点有一个访问时间. 现在可以同时访问两个点,但当连向这个点的所有点都被访问完成后才可以访问这个点. 问最短访问时间. 思路:一眼贪心.可惜是错的. 第二眼暴搜.就这么 ...

  10. tiff图片拆分

    本程序下载地址: tiff格式的图片可以由多张图片合成, 也可以拆分为多张图片.不管是合成或者拆分,都借助了第三方开源库Cximage,对于这个图像库的使用,我们没有必要去一行一行的去看它的代码实现, ...