2018-2019-2 20175320实验一《Java开发环境的熟悉》实验报告
一、实验步骤及内容
(一)带包程序的编译运行
1、使用mkdir
命令创建如图所示目录
2、进入exp1
下的src目录,在src
目录中创建创建Hello.java
的文件,并在文件内编写带包的程序。
3、编辑完成后使用cd ..
命令返回exp1文件夹。
4、使用命令javac -d ./bin ./src/HelloJDB.java
编译程序,命令java -cp ./bin gsj.HelloJDB
运行程序。
5、在命令行中输入学号与姓名后回车即可得到运行结果
(二)IDEA下Java程序的开发与调试
1、按步骤安装好IDEA,并在界面中配置好JDK路径。
2、创建新项目并命名为HelloJDB
,HelloJDB项目的src文件中建立新的类HelloJDB
,在类中编写老师提供的如下代码:
1 public class HelloJDB {
2 public static void main(String[] args) {
3 int i = 5;
4 int j = 6;
5 int sum = add(i, j);
6 System.out.println(sum);
7
8 sum = 0;
9 for(i=0; i< 100; i++)
10 sum += i;
11
12 System.out.println(sum);
13 }
14
15 public static int add(int augend, int addend){
16 int sum = augend + addend;
17 return sum;
18 }
19}
3、在需要设置断点的行号后单击左键即可设置断点,在本次实验中我在第9行设置了断点。
4、单击菜单「Run」->「Debug...」,调试时程序停在第9行。
5、将断点改为条件断点,在断点处用鼠标右键单击,在弹出的属性框中设置i==50,按一下F9重新运行,之后可以在下面的窗口中看到i以及其他变量的值。
6、将断点改为临时断点,在断点处用鼠标右键单击,在弹出的属性框中选择「More」,在之后的窗口中选中「Remove Once hit」。
7、将断点改为方法断点,将光标移至怀疑出错的方法中的任意一行,使用菜单「Run」->「Toggle Method Breakpoint」即可。
8、可通过Step Into
和Step Over
图标进行单步运行,使用Resume
图标重新调试
(三)练习实现Fibonacci数列功能,并进行测试(正常情况,异常情况,边界情况)。
在本次实验中我采用了递归的技巧,将递归写进Function类的fib方法中,这样在主类Fibonacci中就可以定义一个Function类的对象object,使用for循环并通过对象调用fib方法从而将第n个斐波那契数的值放入数组的第n个空间中,最后再使用for循环输出长度为n的斐波那契数列的每一个值。
实验代码如下:
import java.util.Scanner; //引入类库中的类
class Function { //Function类用于实现计算第m个斐波那契数的值
public int fib(int m) { //fib方法采用了递归的编程技巧
if (m == 1 || m == 2) { //当m=1或m=2时返回数值1
return 1;
} else {
return fib(m - 1) + fib(m - 2); //其他情况下返回方法的递归调用
}
}
}
public class Fibonacci{
public static void main(String[] args) {
Function object; //声明一个Function类的对象object
int m,i,fibonacci[];
object = new Function();
Scanner scanner = new Scanner(System.in);
System.out.println("输入斐波那契数的个数:
");
m=scanner.nextInt(); //输入斐波那契数列的个数
while(m<=0){ //当输入不合法时重新输入,直到输入正确才退出循环
System.out.println("error,input again.
");
m=scanner.nextInt();
if(m>0){
break;
}
}
fibonacci = new int[m]; //给数组分配内存空间
for(i=0;i<m;i++){
fibonacci[i]=object.fib(i+1); //将第n个斐波那契数放入数组的第n个空间中
}
for(i=0;i<m;i++){
System.out.printf("第%d个数是 %d
",i+1,fibonacci[i]); //输出斐波那契数列
}
}
}
运行结果如图:
二、实验时遇到的问题:
- 问题1:在exp1目录中编译运行带包程序时出错
- 问题1解决方法:原本在运行带包程序时我都是按书上的步骤进入包的上一级目录进行编译运行,这次更换目录后编译运行就显示找不到主类,但经过不断尝试后,发现可以使用
javac -d <目标文件夹> <字节码文件路径>
来进行编译,使用java -cp <包所在文件夹> 包名.主类名
来进行运行。 - 问题2:IDEA中断点右击无反应
- 问题2解决方法:我在安装IDEA后添加了中文包,删除之后重新打开IDEA即可正常右击断点。
- 问题3:斐波那契数列的程序在JDB中进行调试时需要输入数据,但此时键盘输入被JDB占用导致无法正常输入数据。
- 问题3解决方法:上网查找资料后发现可以使用远程控制终端来进行调试,相关方法我已写入博客 解决键盘输入被JDB占用的问题。
三、实验感想
我在本次实验中编译运行了包中的文件,学习了如何在IDEA中设置断点,调试程序,最后动手编写了一个输出斐波那契数列的程序,前两个实验巩固了学习Java编程基础,最后一个实验让我对输入,数组以及递归语句有了更深的理解。这次的实验看似简单,我在实际操作中还是出现了问题,这暴露出我在平时学习中对代码理解不够透彻,基础不够扎实等问题。Java的学习离不开上手练习,只有实际操作才会发现平时自己注意不到的问题。
附上PSP时间:
步骤 | 耗时 | 百分比 |
---|---|---|
需求分析 | 15 | 13% |
设计 | 15 | 13% |
代码实现 | 45 | 39% |
测试 | 25 | 22% |
分析总结 | 15 | 13% |