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. Cygwin 编译 ffmpeg

    1.在官网下载linux下的压缩包 https://ffmpeg.zeranoe.com/builds/source/ffmpeg/ffmpeg-3.2.4.tar.xz 2.进入cygwin,假定将 ...

  2. Windows2012R2 NTP时间同步

    Windows2012R2 NTP时间同步 Windows2012R2里没有了internet时间,需要使用另外的方式去做时间同步 下面分两个情况 两个情况,两个情况都需要用修改组策略的方式来做 情况 ...

  3. 【原】Java学习笔记005 - 流程控制

    package cn.temptation; public class Sample01 { public static void main(String[] args) { // 程序的流程控制(流 ...

  4. China Tightens Recycling Import Rules

    China Tightens Recycling Import Rules We have all seen the pictures of cities in China with air poll ...

  5. kaptcha验证码的使用

    使用kaptcha可以方便的配置: 验证码的字体 验证码字体的大小 验证码字体的字体颜色 验证码内容的范围(数字,字母,中文汉字!) 验证码图片的大小,边框,边框粗细,边框颜色 验证码的干扰线(可以自 ...

  6. gradlew和gradle的区别

    概念理解 gradlew就是对gradle的包装和配置,gradlew是gradle Wrapper,Wrapper的意思就是包装. 因为不是每个人的电脑中都安装了gradle,也不一定安装的版本是要 ...

  7. How Cigna Tuned Its Spark Streaming App for Real-time Processing with Apache Kafka

    Explore the configuration changes that Cigna’s Big Data Analytics team has made to optimize the perf ...

  8. 容易被误读的IOSTAT

    iostat(1)是在Linux系统上查看I/O性能最基本的工具,然而对于那些熟悉其它UNIX系统的人来说它是很容易被误读的.比如在HP-UX上 avserv(相当于Linux上的 svctm)是最重 ...

  9. 【入门】Spring-Boot项目配置Mysql数据库

    前言 前面参照SpringBoot官网,自动生成了简单项目点击打开链接 配置数据库和代码遇到的问题 问题1:cannot load driver class :com.mysql.jdbc.Drive ...

  10. 通过Docker发布RestAPI遇到的种种问题

    目标:发布一个分词API 问题1:Docker外无法访问API 原因: Docker映射的地址是0.0.0.0:8888端口,而flask启动的时候默认地址是127.0.0.1:5000,需要手动配置 ...