java实验的技术问题及解决方法,2018-2019-2 20175313 实验一《Java开发环境的熟悉》实验报告...

本文详细记录了一次使用JDK编译运行Java程序的过程,包括在命令行和IDEA中的操作步骤。作者通过实现一个求质数的程序,演示了如何处理编译错误和调试代码,强调了理解-d参数在编译过程中的作用。此外,作者还分享了在解决问题过程中遇到的困难和解决方案,以及使用IDEA进行调试的经验,提倡结对编程以提高效率和代码质量。

一、实验内容及步骤

使用JDK编译、运行简单的Java程序

cd code进入code文件夹

mkdir 20175313创建20175313文件夹

ls查看当前目录

cd 20175313,mkdir exp1,cd exp1,用pwd查看当前工作路径

vim Hello.java编辑Hello.java

javac -d . Hello.java编译代码

java zlx.Hello运行代码

实验截图如下:

b82118c9b9a784f57df31085975d6ffe.png

6b1b2280ac8c15841e5cb913d35a439e.png

使用IDEA调试Java程序

设置断点

单步运行

step into(快捷键F5)

step over(快捷键F6)

两个断点之间的跳跃Resume(快捷键F8)

设置条件断点

实验截图如下:

c650935ed1f37bbaa5bc5023570724b5.png

二、练习

题目5:实现求正整数1-N之间所有质数的功能,并进行测试(正常情况,异常情况,边界情况)。

代码为:

import java.util.*;

public class primeNumber2 {

public static void main(String[] args) {

Scanner scanner = new Scanner(System.in);

int flag=0;

System.out.println("请输入一个数:");

int number = scanner.nextInt();

//while(scanner.hasNextInt()){

System.out.println(number);

if(number<0){

System.out.println("负数没有素数与合数之分");

}

else if(number==1||number==0){

System.out.println(number+"既不是素数也不是合数");

}

else {

for(int j=2;j

flag=0;

for (int i = 2; i < j; i++) {

if (j % i == 0) {

flag = 1;

break;

}

}

if(flag==0){

System.out.println(number+"是素数");

}

}

}

}

}

运行结果截图:

4b4bdd0687a9a43581bed7081553e5fa.png

三、实验过程的理解

javac -d . Hello.java-d参数的作用

是指定生成java包的根目录,-d .是在当前目录上编译生成java包。

如果省略了-d,则仅仅是在当前目录生成的class文件。

JVM、JRE、JDK的安装位置与区别:

JVM:只认识*.class文件,能够将class文件中的字节码指令进行识别并调用操作 系统上的API完成动作。

JRE:JRE = JVM+Java类库

JDK:JDK = JRE+小工具

四、实验过程中遇到的问题以及解决方案

带有package的编译运行问题及解决方案

问题:在编辑*.java源文件中含有包名为zlx时,我首先在当前目录建立了一个名为zlx的文件夹,然后进入该文件夹,进行vim Hello.java,javac -d . Hello.java,java zlx.Hello,我cd一下发现,在zlx文件夹下又建了一个文件夹名为zlx。

36a4d7a6a2b0d6a850749ac663e91123.png

解决方案:通过各种途径了解到javac -d . Hello.java 中-d参数表达的意义,从而明白的出现该现象的原因。

c48411e4af60235c7107598ea77461ff.png

分析:javac -d . Hello.java -d参数的作用是指定生成java包的根目录,该程序中有zlx这个包,-d后会在当前目录下生成zlx这个包,因此,不需要我们自己去创建zlx这个文件夹然后再将源文件写入zlx目录下。

启示:这使我联想到了教材中tom.jiafei的那个例子,它是在源程序中定义了package tom.jiafei这个包名,我当初的解决方法 (https://www.cnblogs.com/xiannvyeye/p/10544611.html) 了解的-d的用法之后,我的解决方法是:

48a810e0ea15584630a1e822f61cadaf.png

程序运行结果与预期不符问题及解决方案

问题:运行结果本应该输出1-100的所有素数,但是却什么也没有输出。

0a0ae8e6f7cf085692787e9eb1fa2845.png

解决方案:通过IDEA调试查看问题出现在哪里。

28e80fa37d2f9e369368efa4f9d3ce51.png

更改后运行结果截图:

7350e6c0f2b2b58d74cff259960ad1dd.png

五、实验体会与总结

一个程序是由很多模块构成的,也就是所谓的类,虽然我这个实验比较简单不需要多个类,但是很多内容是共通的,比如一个带包源文件的编译,在我们解决了一个问题之后,相应的一类的问题就都解决了。例如:编译带包源文件Hello.java就联想到了tom.jiafei那个例子的编译。

当程序运行结果与自己意料中的不一样时,可以使用调试工具,IDEA可以很清楚的查看到每一步每一个变量的变化。

像这类的实验我觉得如果能够通过结对来完成,应该能够达到较好的效果。就像我的System.out.println()放错了位置,如果是结对一起写的话,这个问题应该在当场就会被发现,这样就能节省调试的时间,提高效率。而且两个人结对还能够提高代码的质量,设计出一个更好的实现该功能的程序。

步骤

耗时

百分比

需求分析

10min

10%

设计

10min

10%

代码实现

45min

45%

测试

25min

25%

分析总结

10min

10%

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值