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. SQL Server非域(跨域)环境下镜像(Mirror)的搭建步骤及注意事项

    在实际的生产环境下,我们经常需要跨域进行数据备份,而创建Mirror是其中一个方案.但跨域创建Mirror要相对复杂的多,需要借助证书进行搭建. 下面我们将具体的步骤总结如下: 第一部分 创建证书 S ...

  2. ffmpeg相关函数整理

    1.av_read_frame() 该函数用于读取具体的音/视频帧数据,从流中读取数据帧到 AVPacket,AVPacket保存仍然是未解码的数据 int av_read_frame(AVForma ...

  3. anaconda --包管理和环境管理器

    前言: 以下所有的命令都Win10环境的 Anaconda Prompt 中 环境管理 创建虚拟环境 conda create --name env_name python 也可以指定 Python ...

  4. 网络编程 单纯UDP通信

    网络编程 单纯UDP通信 1,UDP发送端 2,UDP接收端 UDP发送端: #include <stdio.h> #include <unistd.h> #include & ...

  5. spring boot 中使用 jpa以及jpa介绍

    1.什么是jpa呢?JPA顾名思义就是Java Persistence API的意思,是JDK 5.0注解或XML描述对象-关系表的映射关系,并将运行期的实体对象持久化到数据库中.12.jpa具有什么 ...

  6. centosFTP服务搭建及权限配置

    引用一个其他大佬对vsftpd的描述: vsftpd 是“very secure FTP daemon”的缩写,安全性是它的一个最大的特点. vsftpd 是一个 UNIX 类操作系统上运行的服务器的 ...

  7. LeetCode算法题-Island Perimeter(Java实现)

    这是悦乐书的第238次更新,第251篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第105题(顺位题号是463).您将获得一个二维整数网格形式的地图,其中1代表土地,0代 ...

  8. 【English】20190320

    valid有效的 [ˈvælɪd]  solitary独立的 [ˈsɑ:ləteri] data definition not valid unless solitary qualifying有资格的 ...

  9. Python开发【内置模块篇】

    动态导入模块 动态导入模块 导入一个库名为字符串的 module_t = __import__('m1.t') print (module_t) #m1 import importlib m=impo ...

  10. ideal中项目resources下txt文件读取不到的问题。

    这次做项目,原来用到了一个txt文件,在ideal中项目启动后报读取不到txt文件.项目原来是在eclipse中的. 在网上找了些文章,发现ideal中要读取到resources下的文件需要加上下面红 ...