20155330 实验一《Java开发环境的熟悉》(Windows+IDEA)实验报告
实验知识点
- JVM、JRE、JDK的安装位置与区别;
- 命令行运行javac;java;javac -cp; java -cp;
- PATH,CLASSPATH,SOURCEPATH的设定方法与应用;
- 包管理:package;import;javac -d ;
- Eclipse(Netbeans)管理Java项目,调试:断点、单步执行等;
- Java基础语法:类型与类型转换;变量;运算符;流程控制等;
- JDK帮助文档的使用。
实验内容及步骤
使用JDK编译、运行简单的java程序
命令行下的程序开发
-
步骤一(新建文件夹):
- 打开windows下的cmd(Windows键+R)
- 输入cd Code命令进入Code目录
- 输入md 20155330test建立以自己学号命名的文件夹
- 输入cd 20155330test进入文件夹
- 输入md exp1建立“实验一”文件夹
- 输入cd exp1进入“实验一”文件夹
-
步骤二(编译、运行java程序):
- 使用vim编辑器编辑java程序,并在vim编辑器中输入以下内容
- 在命令行下编译、运行,结果如下
- 使用vim编辑器编辑java程序,并在vim编辑器中输入以下内容
使用IDEA编辑、编译、运行、调试Java程序
-
创建HelloJDB文件,输入下面代码:
public class HelloJDB { public static void main(String[] args) { int i = 5; int j = 6; int sum = add(i, j); System.out.println(sum); sum = 0; for(i=0; i< 100; i++) sum += i; System.out.println(sum); } public static int add(int augend, int addend){ int sum = augend + addend; return sum; } }
运行结果如下:
-
在需要设置断点的一行左侧单击鼠标,出现红色圆点。如下在第五行设置了断点,Debug单步调试后输出了结果:
在IDEA中可选择单步调试的方式有如下三种:
-
单击Step Over继续向下执行,执行完方法。得到运行结果sum=11。
Debug 常用快捷键
快捷键 | 介绍 |
---|---|
F7 | 在 Debug 模式下,进入下一步,如果当前行断点是一个方法,则进入当前方法体内,如果该方法体还有方法,则不会进入该内嵌的方法中 必备 |
F8 | 在 Debug 模式下,进入下一步,如果当前行断点是一个方法,则不进入当前方法体内 必备 |
F9 | 在 Debug 模式下,恢复程序运行,但是如果该断点下面代码还有断点则停在下一个断点上 必备 |
Alt + F8 | 在 Debug 的状态下,选中对象,弹出可输入计算表达式调试框,查看该输入内容的调试结果 必备 |
Ctrl + F8 | 在 Debug 模式下,设置光标当前行为断点,如果当前已经是断点则去掉断点 |
Shift + F7 | 在 Debug 模式下,智能步入。断点所在行上有多个方法调用,会弹出进入哪个方法 |
Shift + F8 | 在 Debug 模式下,跳出,表现出来的效果跟 F9 一样 |
Ctrl + Shift + F8 | 在 Debug 模式下,指定断点进入条件 |
Alt + Shift + F7 | 在 Debug 模式下,进入下一步,如果当前行断点是一个方法,则进入当前方法体内,如果方法体还有方法,则会进入该内嵌的方法中,依此循环进入 |
练习:实现凯撒密码,并进行测试。
- 实现凯撒密码代码如下:
import java.util.Scanner;
public class Caesar {
public static void main(String args[]) throws Exception {
System.out.println("请输入明文:");
Scanner sc = new Scanner(System.in);
String s = sc.nextLine();
System.out.println("请输入密钥:");
Scanner sc1 = new Scanner(System.in);
int key = sc1.nextInt();
Encryption(s, key);
System.out.println("请输入密文:");
Scanner sc2 = new Scanner(System.in);
String s1 = sc2.nextLine();
System.out.println("请输入密钥:");
Scanner sc3 = new Scanner(System.in);
int key1 = sc3.nextInt();
Decrypt(s1, key1);
}
public static void Encryption(String str, int k) {// 加密
String string = "";
for (int i = 0; i < str.length(); i++) {
char c = str.charAt(i);
if (c >= 'a' && c <= 'z')
{
c += k % 26;
if (c < 'a')
c += 26;
if (c > 'z')
c -= 26;
} else if (c >= 'A' && c <= 'Z')
{
c += k % 26;
if (c < 'A')
c += 26;
if (c > 'Z')
c -= 26;
}
string += c;
}
System.out.println(str + " 加密后为:" + string);
}
public static void Decrypt(String str, int n) {// 解密
int k = Integer.parseInt("-" + n);
String string = "";
for (int i = 0; i < str.length(); i++) {
char c = str.charAt(i);
if (c >= 'a' && c <= 'z')
{
c += k % 26;
if (c < 'a')
c += 26;
if (c > 'z')
c -= 26;
} else if (c >= 'A' && c <= 'Z')
{
c += k % 26;
if (c < 'A')
c += 26;
if (c > 'Z')
c -= 26;
}
string += c;
}
System.out.println(str + " 解密后为:" + string);
}
}
-
设计思路:
凯撒密码的实质是移位密码体制,通过把字母移动一定的位数来实现加密和解密。由于字符在计算机中的存储是以ASCII码的形式存储,那么只要在用户输入的字符串每位加上一定的数字便能得加密到一串密文,解密的过程相似。在程序中给出了输入明文/密文和密钥提示。
-
运行结果:
实验过程中遇到的问题
- 问题1:在命令行下编译运行java时出现以下问题
- 解决方案:在尝试了更改环境变量添加ClASSPATH各种网络上常见方法后发现,是由于将JDK和JRE文件夹存在了电脑上的Program Files而不是Program Files(x86)中,在移动文件夹后问题得到了解决。
实验体会与总结
由于之前的密码学实验刚好也是类似的程序设计,所以在设计代码方面没有太多的难处,核心的思想是差不多的。需要注意的是,在java中的一些语法特别是输入输出方面与之前的C有所不同。这次的程序进行了简单的模块化,将加/解密分别进行了编写。但是java作为一门面向对象语言,在这方面的运用还有所欠缺,目前自编程序大多数还是继承了之前C语言的思想,希望在不断的学习中能够更好的运用java语言。
步骤 | 耗时 | 百分比 |
---|---|---|
需求分析 | 10min | 10% |
设计 | 15min | 15% |
代码实现 | 50min | 50% |
测试 | 5min | 5% |
分析总结 | 20min | 20% |