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. linq 左连接后实现与主表一对一关系数据

    var query1 = from r in _residentRepository.GetAll() join i in _inLogRepository.GetAll() on r.Id equa ...

  2. python3 shell 中添加清屏

    在windows中: 安装目录 \Lib(  D:\Python37\Lib) 中添加 ClearWindow.py 文件,文件内容: """ Clear Window ...

  3. 索引-mysql

    什么是索引 索引的四大作用 (参考百度百科:百度百科-索引) 索引的优缺点 索引分类 什么地方需要建索引 索引优化 什么是索引? 宏观来说,索引是一种检索工具,目录也是一种检索工具,但是两者是有区是别 ...

  4. Python 位操作运算符

    & 按位与运算符:参与运算的两个值,如果两个相应位都为1,则该位的结果为1,否则为0 (a & b) 输出结果 12 ,二进制解释: 0000 1100 | 按位或运算符:只要对应的二 ...

  5. kubernetes-核心资源之Ingress

    1.Ingress 在Kubernetes中,服务和Pod的IP地址仅可以在集群网络内部使用,对于集群外的应用是不可见的.为了使外部的应用能够访问集群内的服务,在Kubernetes中可以通过Node ...

  6. Hive:ORC File Format存储格式详解

    一.定义 ORC File,它的全名是Optimized Row Columnar (ORC) file,其实就是对RCFile做了一些优化. 据官方文档介绍,这种文件格式可以提供一种高效的方法来存储 ...

  7. H5页面长按导致app崩溃问题解决

    每天学习一点点 编程PDF电子书.视频教程免费下载:http://www.shitanlife.com/code 最近用H5页面做了个安卓的项目,但是在H5页面中长按文字内容,会导致APP崩溃掉... ...

  8. token

    18f9nWvThC274lo3USjgfeldynt0t/r/w0yjLbj9 http://app-static.acc5.com/app/testpost.php

  9. 使用 ESP8266 制作 WiFi 干扰器 - 无需密码即可使用任何 WiFi

    嘿,朋友,我是 Kedar,你有没有想阻止所有的 WiFi信号?或者只是想从 WiFi 踢某人或邻居 WiFi .那么,本玩法是你等待结束的时刻了.这是为你提供的.仅需 $8 的 DIY Wifi 干 ...

  10. 一款DMA性能优化记录:异步传输和指定实时信号做async IO

    关键词:DMA.sync.async.SIGIO.F_SETSIG. DMA本身用于减轻CPU负担,进行CPU off-load搬运工作. 在DMA驱动内部实现有同步和异步模式,异步模式使用dma_a ...