首页 > 代码库 > 《Java语言程序设计》上机实验
《Java语言程序设计》上机实验
实验一 Java环境演练
【目的】
①安装并配置Java运行开发环境;
②掌握开发Java应用程序的3个步骤:编写源文件、编译源文件和运行应用程序;
③学习同时编译多个Java源文件。
【内容】
1.一个简单的应用程序
² 实验要求:
编写一个简单的Java应用程序,该程序在命令行窗口输出两行文字:“你好,很高兴学习Java”和“We are students”。
² 程序运行效果示例:
程序运行效果如下图所示:
² 程序模板:
Hello.java
public class Hello
{
public static void main (String args[ ])
{
【代码1】 //命令行窗口输出"你好,很高兴学习Java"
A a=new A();
a.fA();
}
}
class A
{
void fA()
{
【代码2】 //命令行窗口输出"We are students"
}
}
² 实验后的练习:
1.编译器怎样提示丢失大括号的错误?
2.编译器怎样提示语句丢失分号的错误?
3.编译器怎样提示将System写成system这一错误?
4.编译器怎样提示将String写成string这一错误?
2.联合编译
² 实验要求:
编写4个源文件:Hello.java、A.java、B.java和C.java,每个源文件只有一个类,Hello.java是一个应用程序(含有main方法),使用了A、B和C类。将4个源文件保存到同一目录中,例如:C:\100,然后编译Hello.java。提示:直接编译Hello.java即可,或者把所有文件添加到Eclipse的项目的src目录下,再运行Hello.java。
² 程序模板:
模板1:Hello.java
public class MainClass
{
public static void main (String args[ ])
{
【代码1】 //命令行窗口输出"你好,只需编译我"
A a=new A();
a.fA();
B b=new B();
b.fB();
}
}
模板2 :A.java
public class A
{
void fA()
{
【代码2】 //命令行窗口输出"I am A"
}
}
模板3 :B.java
public class B
{
void fB()
{
【代码3】 //命令行窗口输出"I am B"
}
}
模板4 :C.java
public class C
{
void fC()
{
【代码4】 //命令行窗口输出"I am C"
}
}
² 实验后的练习:
5.将Hello.java编译通过后,不断修改A.java源文件中的代码,比如,在命令行窗口输出“我是A类”或“我被修改了”。要求每次修改A.java源文件后,单独编译A.java,然后直接运行应用程序Hello。提示,某目录下所有文件编译命令javac *.java,某个文件单独编译命令 java 该文件名.java。
6.如果需要编译某个目录下的全部Java源文件,比如C:\1000目录,可以使用如下命令:c:\1000\javac *.java
【结果】
将本次上机实验结果按照以上内容依次填写实验目标、过程、结果。
实验二 Java基本数据类型与控制语句
【目的】
①掌握char型数据和int型数据之间的相互转换,同时了解unicode字符表;
②掌握使用if…else if多分支语句;
③使用if…else分支和while循环语句解决问题。
【内容】
1.输出希腊字母表。
² 实验要求:
编写一个Java应用程序,该程序在命令行窗口输出希腊字母表。
² 程序模板:
GreekAlphabet.java
public class GreekAlphabet
{
public static void main(String[] args) {
// TODO Auto-generated method stub
int startPosition=0,endPosition=0;
char cStart=‘α‘,cEnd=‘ω‘;
startPosition = (int)cStart;
endPosition = (int)cEnd;
System.out.println("希腊字母\‘α\‘在unicode表中的顺序位置:"+ startPosition);
System.out.println("希腊字母表:");
for(int i=startPosition;i<=endPosition;i++)
{
char c=‘\0‘;
c = (char)i;
System.out.print(" "+c);
if((i-startPosition+1)%10==0)
System.out.println("");
}
}
}
² 实验后的练习:
1. 将一个double型数据直接赋值给float型变量,程序编译时提示怎样的错误?
2. 在应用程序的main方法中增加语句:
float x=0.618;
程序能编译通过么?
3. 在应用程序的main方法中增加语句:
byte y=128;
程序能编译通过么?
4. 在应用程序的main方法中增加语句:
int z=(byte)128;
程序输出变量z的值是多少?
2.回文数。
² 实验要求:
编写一个Java应用程序。用户从键盘输入一个1—9999之间的数,程序将判断这个数是几位数,并判断这个数是否是回文数。回文数是指将该数含有的数字逆序排列后得到的数和原数相同,例如12121、3223都是回文数。
² 程序运行效果示例:
程序运行效果如下图所示:
² 程序模板:
Number.java
import javax.swing.JOptionPane;
public class Number
{
public static void main(String args[])
{
int number=0,d5,d4,d3,d2,d1;
String str=JOptionPane.showInputDialog("输入一个1至99999之间的数");
number=Integer.parseInt(str);
if(【代码1】) //判断number在1至99999之间的条件
{
【代码2】 //计算number的最高位(万位)d5
【代码3】 //计算number的千位d4
【代码4】 //计算number的百位d3
d2=number%100/10;
d1=number%10;
if(【代码5】) //判断number是5位数的条件
{
System.out.println(number+"是5位数");
if(【代码6】) //判断number是回文数的条件
{
System.out.println(number+"是回文数");
}
else
{
System.out.println(number+"不是回文数");
}
}
else if(【代码7】) //判断number是4位数的条件
{
System.out.println(number+"是4位数");
if(【代码8】) //判断number是回文数的条件码
{
System.out.println(number+"是回文数");
}
else
{
System.out.println(number+"不是回文数");
}
}
else if(【代码9】) //判断number是3位数的条件
{
System.out.println(number+"是3位数");
if(【代码10】) //判断number是回文数的条件
{
System.out.println(number+"是回文数");
}
else
{
System.out.println(number+"不是回文数");
}
}
else if(d2!=0)
{
System.out.println(number+"是2位数");
if(d1==d2)
{
System.out.println(number+"是回文数");
}
else
{
System.out.println(number+"不是回文数");
}
}
else if(d1!=0)
{
System.out.println(number+"是1位数");
System.out.println(number+"是回文数");
}
}
else
{
System.out.printf("\n%d不在1至99999之间",number);
}
}
}
² 实验后的练习:
1. 程序运行时,用户从键盘输入2332,程序提示怎样的信息?
2. 程序运行时,用户从键盘输入654321,程序提示怎样的信息?
3. 程序运行时,用户从键盘输入33321,程序提示怎样的信息?
思考题: 编写一个程序,把变量n的初始值设置为1678,然后利用除非运算取余运算把变量的每位数字都提出来打印,输出结果为:n=1678,n的每位数字是1,6,7,8
提示:输入使用下面语句
Scanner reader = new Scanner(System.in);
int i= reader.nextInt();
同时,别忘了在源文件头部导入Scanner类,importa java.util.Scanner;有关该类的详细说明,请查阅JDK帮助文档。
实验三 类与对象、继承
【目的】
①使用类来封装对象的属性和功能;
②掌握类变量与实例变量,以及类方法与实例方法的区别;
③掌握使用package和import语句。
④巩固以下概念:
子类的继承性
子类对象的创建过程
成员变量的继承与隐藏
方法的继承与重写
【内容】
1.三角形、梯形和圆形的类封装
² 实验要求:
编写一个Java应用程序,该程序中有3个类:Trangle、Leder和Circle,分别用来刻画“三角形”、“梯形”和“圆形”。具体要求如下:
a) Trangle类具有类型为double的三个边,以及周长、面积属性,Trangle类具有返回周长、面积以及修改三个边的功能。另外,Trangle类还具有一个boolean型的属性,该属性用来判断三个属能否构成一个三角形。
b) Lader类具有类型double的上底、下底、高、面积属性,具有返回面积的功能。
c) Circle类具有类型为double的半径、周长和面积属性,具有返回周长、面积的功能。
² 程序运行效果示例:
程序运行效果如下图所示:
² 程序模板:
AreaAndLength.java
class Trangle
{
double sideA,sideB,sideC,area,length;
boolean boo;
public Trangle(double a,double b,double c)
{
【代码1】 //参数a,b,c分别赋值给sideA,sideB,sideC
if(【代码2】) //a,b,c构成三角形的条件表达式
{
【代码3】 //给boo赋值。
}
else
{
【代码4】 //给boo赋值。
}
}
double getLength()
{
【代码5】 //方法体,要求计算出length的值并返回
}
public double getArea()
{
if(boo)
{
double p=(sideA+sideB+sideC)/2.0;
area=Math.sqrt(p*(p-sideA)*(p-sideB)*(p-sideC)) ;
return area;
}
else
{
System.out.println("不是一个三角形,不能计算面积");
return 0;
}
}
public void setABC(double a,double b,double c)
{
【代码6】 //参数a,b,c分别赋值给sideA,sideB,sideC
if(【代码7】) //a,b,c构成三角形的条件表达式
{
【代码8】 //给boo赋值。
}
else
{
【代码9】 //给boo赋值。
}
}
}
class Lader
{
double above,bottom,height,area;
Lader(double a,double b,double h)
{
【代码10】 //方法体,将参数a,b,c分别赋值给above,bottom,height
}
double getArea()
{
【代码11】 //方法体,,要求计算出area返回
}
}
class Circle
{
double radius,area;
Circle(double r)
{
【代码12】 //方法体
}
double getArea()
{
【代码13】 //方法体,要求计算出area返回
}
double getLength()
{
【代码14】 //getArea方法体的代码,要求计算出length返回
}
void setRadius(double newRadius)
{
radius=newRadius;
}
double getRadius()
{
return radius;
}
}
public class AreaAndLength
{
public static void main(String args[])
{
double length,area;
Circle circle=null;
Trangle trangle;
Lader lader;
【代码15】 //创建对象circle
【代码16】 //创建对象trangle。
【代码17】 //创建对象lader
【代码18】 // circle调用方法返回周长并赋值给length
System.out.println("圆的周长:"+length);
【代码19】 // circle调用方法返回面积并赋值给area
System.out.println("圆的面积:"+area);
【代码20】 // trangle调用方法返回周长并赋值给length
System.out.println("三角形的周长:"+length);
【代码21】 // trangle调用方法返回面积并赋值给area
System.out.println("三角形的面积:"+area);
【代码22】 // lader调用方法返回面积并赋值给area
System.out.println("梯形的面积:"+area);
【代码23】 // trangle调用方法设置三个边,要求将三个边修改为12,34,1。
【代码24】 // trangle调用方法返回面积并赋值给area
System.out.println("三角形的面积:"+area);
【代码25】 // trangle调用方法返回周长并赋值给length
System.out.println("三角形的周长:"+length);
}
}
² 实验后的练习:
1. 程序中仅仅省略【代码15】,编译能通过吗?
2. 程序中仅仅省略【代码16】,编译能通过吗?
3. 程序中仅仅省略【代码15】,运行时出现怎样的异常提示?
4. 给Trangle类增加3个方法,分别用来返回3个边:sideA、sideB和sideC。
5. 让AreaAndLength类中的circle对象调用方法修改半径,然后输出修改后的半径以及修改半径后的圆的面积和周长。
2.实例成员与类成员。
² 实验要求:
按程序模板的要求编写源文件,要特别注意程序的输出结果,并能正确解释输出的结果。
² 程序运行效果示例:
程序运行效果如下图所示:
² 程序模板:
Example.java
class A
{
【代码1】 //声明一个float型实例变量a
【代码2】 //声明一个float型类变量b,即static变量b
void setA(float a)
{
【代码3】 //将参数a的值赋值给成员变量a
}
void setB(float b)
{
【代码4】 //将参数b的值赋值给成员变量b
}
float getA()
{
return a;
}
float getB()
{
return b;
}
void inputA()
{
System.out.println(a);
}
static void inputB()
{
System.out.println(b);
}
}
public class Example
{
public static void main(String args[])
{
【代码5】 //通过类名操作类变量b,并赋值100
【代码6】 //通过类名调用方法inputB()
A cat=new A();
A dog=new A();
【代码7】 //cat象调用方法setA(int a)将cat的成员a的值设置为200
【代码8】 //cat调用方法setB(int b)将cat的成员b的值设置为400
【代码9】 //dog象调用方法setA(int a)将dog的成员a的值设置为150
【代码10】 //dog调用方法setB(int b)将dog的成员b的值设置为300
【代码11】 //cat调用inputA()。
【代码12】 //cat调用inputB()。
【代码13】 //dog调用inputA()。
【代码14】 //dog调用inputB()。
}
}
² 实验后的练习:
1. 将inputA()方法中的
System.out.println(a);
改写为
System.out.println(a+b);
编译是否出错?为什么?
2. 将inputB()方法中的
System.out.println(b);
改写为
System.out.println(a+b);
编译是否报错?为什么?
3.使用package语句与import语句。
² 实验要求:
按实验要求使用package语句,并用import语句使用Java平台提供的包中的类以及自定义包中的类。掌握一些重要的操作步骤。
² 程序运行效果示例:
程序运行效果如下图所示:
² 程序模板:
模板1:
将模板1给出的Java源文件命名为SquareEquation.java,将编译后得到的字节码文件复制到c:\1000\tom\jiafei目录中。
SquareEquation.java
package tom.jiafei;
public class SquareEquation
{
double a,b,c;
double root1,root2;
boolean boo;
public SquareEquation(double a,double b,double c)
{
this.a=a;
this.b=b;
this.c=c;
if(a!=0)
{
boo=true;
}
else
{
boo=false;
}
}
public void getRoots()
{
if(boo)
{
System.out.println("是一元2次方程");
double disk=b*b-4*a*c;
if(disk>=0)
{
root1=(-b+Math.sqrt(disk))/(2*a);
root2=(-b-Math.sqrt(disk))/(2*a);
System.out.printf("方程的根:%f,%f\n",root1,root2);
}
else
{
System.out.printf("方程没有实根\n");
}
}
else
{
System.out.println("不是一元2次方程");
}
}
public void setCoefficient(double a,double b,double c)
{
this.a=a;
this.b=b;
this.c=c;
if(a!=0)
{
boo=true;
}
else
{
boo=false;
}
}
}
模板2:
将模板2给出的Java源程序SunRise.java保存到d:\2000中。在编译模板2给出的Java源文件之前,要重新设置classpath。假设本地机SDK的安装目录是E:\jdk1.7。
在命令行执行如下命令:
set classpath=e:\jdk1.7\jre\lib\rt.jar;.;c:\1000
然后编译模板2给出的Java源程序。或用鼠标右键点击“我的电脑”,弹出快捷菜单,然后选择“属性”命令,弹出“系统属性”对话框,再单击该对话框中的“高级”选项卡,然后单击“环境变量”按钮。将classpath的值修改为:
E:\jdk1.7\jre\lib\rt.jar;.;c:\1000
然后重新打开一个命令行窗口,编译模板2给出的Java源程序。
SunRise.java
import tom.jiafei.*;
class SunRise
{
public static void main(String args[ ])
{
SquareEquation equation=new SquareEquation(4,5,1);
equation.getRoots();
equation.setCoefficient(-3,4,5);
equation.getRoots();
}
}
² 实验后的练习:
假设SDK的安装目录是E:\jdk1.7,那么Java运行系统默认classpath的值是:E:\jdk1.7\jre\lib\rt.jar;.;
其中的“”表示应用程序可以使用当前目录中的无名包类以及当前目录下的子目录中的类,子目录中的类必须有包名,而且包名要和子目录结构相对应。
因此,如果将模板2应用程序Sunrise.java的字节码文件存放到d:\5000中,并将SquareEquation.java的字节码文件存放在D:\5000\tom\jiafei中,那么就不需要修改classpath。要特别注意的是,因为SquareEquation.java有包名,切不可将SquareEquation.java以及它的字节码文件存放在d:\5000中,即不可以和Sunrise.java的字节码存放在一起,请进行如下的练习:
1. 将SquareEquation.java存放在D:\5000\tom\jiafei中,编译:
D:\5000\tom\jiafei\javac SquareEquation.java
2. 将Sunrise.java存放到D:\5000中,编译:
D:\5000\javac Sunrise.java
3. 运行:
java Sunrise
【结果】
将本次上机实验结果按照实验要求内容依次进行,填写实验目标、过程、结果。
《Java语言程序设计》上机实验