20155228 实验一《Java开发环境的熟悉》实验报告
实验内容
使用JDK编译、运行简单的Java程序;
使用IDEA 编辑、编译、运行、调试Java程序。
实验要求
没有Linux基础的同学建议先学习《Linux基础入门(新版)》《Vim编辑器》 课程;
完成实验、撰写实验报告,实验报告模板见QQ群,注意实验报告重点是运行结果,遇到的问题(工具查找,安装,使用,程序的编辑,调试,运行等)、解决办法(空洞的方法如“查网络”、“问同学”、“看书”等一律得0分)以及分析(从中可以得到什么启示,有什么收获,教训等);
实验报告中统计自己的PSP(Personal Software Process)时间;
严禁抄袭。
实验知识点
JVM、JRE、JDK的安装位置与区别;
命令行运行javac;java;javac -cp; java -cp;
PATH,CLASSPATH,SOURCEPATH的设定方法与应用;
包管理:package;import;javac -d ;
Eclipse(Netbeans)管理Java项目,调试:断点、单步执行等;
Java基础语法:类型与类型转换;变量;运算符;流程控制等;
JDK帮助文档的使用。
实验步骤
命令行下Java程序开发
1.进入终端:
在图形界面下鼠标右键可以打开终端,打开的终端所处的位置就是打开终端前所在文件夹的位置。或者使用快捷键ctrl
+t
。
2.新建Code目录并进入:
在home
目录下输入mkdir Code
新建目录Code
,并输入cd Code
进入Code
目录。如果不在home
目录下可以输入cd ~
返回到home
目录。输入ls
可以查看当前文件夹下所有文件的名字。
3.建立并进入实验目录:
输入mkdir 20155228
新建实验目录,输入cd 20155228
进入实验目录,输入mkdir exp1
新建实验一目录,输入cd exp1
进入实验一目录。输入pwd
可以查看现在所处位置。
4.新建vim文档编写代码:
输入vim Hello.java
新建vim文档并进入编辑。打开文档后按a
进入插入模式,输入以下代码。
package ljp;
import java.util.Scanner;
public class Hello{
public static void main(String[] args){
System.out.println("Input your first name, please:");
Scanner s = new Scanner(System.in);
String name = s.next();
System.out.println("Hello " + name + " !");
}
}
第一行代码的package使得代码在编译后将class文件放到java文件所在目录下的名为ljp文件夹中,如果没有就新建一个。
第二行代码的import是调用API方法java.util.Scanner
5.编译运行代码:
输入javac -d . Hello.java
编译代码,输入java ljp.Hello
运行代码。
编译代码的命令中
-d
是后面输入要编译的代码的位置,命令中.
是指当前文件夹。运行代码的命令中
ljp.Hello
是指运行当前目录下名为ljp
中的名为Hello
的代码。
IDEA下Java程序开发、调试
1.新建工程和文件
运行IDEA点击create a new project
,输入工程名,工程名随意写。然后在工程文件夹下的src
文件夹新建文件,输入文件名,文件名也随意写下,但是在后面写public class
时候需要保证公共类名与文件名相同。
2.输入代码并编译:
2 public class code0407 {
3 public static void main(String[] args) {
4 int i = 5;
5 int j = 6;
6 int sum = add(i, j);
7 System.out.println(sum);
8
9 sum = 0;
10 for(i=0; i< 100; i++)
11 sum += i;
12
13 System.out.println(sum);
14 }
15
16 public static int add(int augend, int addend){
17 int sum = augend + addend;
18 return sum;
19 }
20}
输入代码后按下ctrl
+shift
+f10
编译代码
3.设置断点调试代码
设置断点:点击行号右边空白位置即可设置断点
运行当断点处:
shift
+f9
到右上角去点那个昆虫图标也可以。运行下一行(step over):
f8
或者到左下角去点那个向下的箭头也可以。进入和离开函数(step in、step out)
切换到debuger栏目可以看到各个自变量在当前步骤的数值。
练习: 实现学生成绩管理功能,并进行测试。
程序的功能是对输入的学生的姓名和成绩进行排序并以成绩升序的形式进行输出。
import java.util.*;
public class code040702 {
public static void main(String[] args) {
Scanner in=new Scanner(System.in);
System.out.println("输入学生的个数:");
int num=in.nextInt();
int a,b,i,j,temp,temp2;
int[] scores=new int[100];
String[] name=new String[100];
int[] rank=new int[100];
String tempname;
for(a=0;a<num;a++)
{
rank[a]=a;
b=a+1;
System.out.printf("请输入第%d个学生的姓名和成绩:",b);
name[a]=in.next();
scores[a]=in.nextInt();
}
/*for(a=0;a<num;a++)
{
System.out.printf("%d ",scores[a]);
}*/
for(i=0;i<(num-1);i++)
{
for(j=(i+1);j<num;j++)
{
if(scores[i]>scores[j])
{
temp=scores[i];
scores[i]=scores[j];
scores[j]=temp;
temp=rank[i];
rank[i]=rank[j];
rank[j]=temp;
}
}
}
System.out.println("学生成绩升序排名");
for(a=0;a<num;a++)
{
b=rank[a];
System.out.printf("%s %d\n",name[b],scores[a]);
}
}
}
运行结果截图如下:
编程中遇到的问题和解决:
编程中主要遇到的问题是如何实现学生姓名和成绩的相互关联。在开始的时候我想到的办法是定义一个学生类,其中包括学生姓名的字符串成员变量和学生成绩的整数成员变量。这里涉及到多个学生,所以需要新建多个学生类实例,通过是上网查阅发现需要使用泛型还有Arraylist,从实现上来说并不容易。所以后来改换另外一种思路,将成绩和姓名分别放入一个数组和一个字符串中。另外再新建一个标号数组用于确定名字的输出顺序,在对成绩进行排序的时候也对标号进行排序,在输出成绩的时候根据标号输出对应的名字。
PSP时间统计
步骤 | 耗时 | 百分比 |
---|---|---|
需求分析 | 5min | 8% |
设计 | 10min | 16% |
代码实现 | 30min | 50% |
测试 | 5min | 8% |
总结分析 | 10min | 16% |