java上机实验答案与解析.docx
《java上机实验答案与解析.docx》由会员分享,可在线阅读,更多相关《java上机实验答案与解析.docx(22页珍藏版)》请在冰豆网上搜索。
java上机实验答案与解析
JAVA上机实验题答案与解析
实验一Java程序编程
1.编写一个Java应用程序,输出内容为Hello!
。
注:
文件位置位于e:
\2:
\Hello.java编译:
(1)e:
(2)cd2(3)javacHello.java(4)javaHello
2.编写一个Java小应用程序,输出内容为我一边听音乐,一边学Java。
第一步编写
importjava.awt.*;
importjava.applet.*;
publicclassMyAppletextendsApplet{
publicvoidpaint(Graphicsg){
g.drawString("我一边听音乐,我一边做java",25,25);
}
}
第二步在DOS环境中编译(....javacMyApplet.java)
第三步使用记事本编写
第四步将记事本文件名命名为MyApplet.html
第五步打开MyApplet.html
实验二类的定义
1.编写Java应用程序,自定义Point类,类中有两个描述坐标位置的double变量x,y,利用构造方法,实现对Point对象p1,p2初始化,p1和p2对应坐标分别为(15,20),(10,30);定义方法getX(),getY()分别获得点的横坐标和纵坐标;定义方法setX(),setY()分别获得点的横坐标和纵坐标;并且把p1和p2输出;
publicclassPoint{
doublex,y;
Point(doublex,doubley){
this.x=x;
this.y=y;
}
doublegetX(){
returnx;
}
doublegetY(){
returny;
}
voidsetX(doublex){
this.x=x;
}
voidsetY(doubley){
this.y=y;
}
publicstaticvoidmain(String[]args){
Pointp1=newPoint(15,20);//初始化
Pointp2=newPoint(10,30);
}
}
运行结果:
横坐标为15.0纵坐标为20.0
横坐标为10.0纵坐标为30.0
2.编写Java应用程序,自定义Circle类,类中有两个double变量r,s,一个类变量pi,利用构造方法实现对半径是3和5.5的初始化,自定义getArea方法实现圆面积求解;
publicclassCircle{
doubles,r;
publicCircle(doubler){
this.r=r;
}
doublegetArea(){
this.s=pi*r*r;
returns;
}
publicstaticvoidmain(String[]args){
Circlec1=newCircle(3);
Circlec2=newCircle(5.5);
Area());
Area());
}
}
实验三类的继承和多态性
1.
(1)编写一个接口ShapePara,要求:
接口中的方法:
intgetArea():
获得图形的面积。
intgetCircumference():
获得图形的周长
(2)编写一个圆类Circle,要求:
圆类Circle实现接口ShapePara。
该类包含有成员变量:
radius:
public修饰的double类型radius,表示圆的半径。
x:
private修饰的double型变量x,表示圆心的横坐标。
y:
protected修饰的double型变量y,表示圆心的纵坐标。
包含的方法有:
Circle(doubleradius)有参构造方法。
以形参表中的参数初始化半径,圆心为坐标原点。
doublegetRadius():
获取半径为方法的返回值。
voidsetCenter(doublex,doubley):
利用形参表中的参数设置类Circle的圆心坐标。
voidsetRadius(doubleradius):
利用形参表中的参数设置类Circle的radius域。
在主方法中产生半径为5的圆。
interfaceShapePara{
doublegetArea(doubler);
doublegetCircumference(doubler);
}//注:
Circle是在接口中建立的calss,即先建立接口,在建立接口的类
classCircleimplementsShapePara{
privatedoublex;
protecteddoubley;
publicdoubler;
Circle(doubler){
this.r=r;
}
voidsetRadius(doubler){
this.r=r;
}
doublegetRadius(){
returnr;
}
doublegetArea(){
return(3.14*r*r);
}
doublegetCircumference(){
return3.14*2*r;
}
voidsetCenter(doublex,doubley){
this.x=x;
this.y=y;
}
doublegetCenterx(){
returnx;
}
doublegetCentery(){
returny;
}
}
publicclassA{
publicstaticvoidmain(String[]args){
Circleci=newCircle(5);
ci.setRadius(5);
ci.setCenter(0,0);
}
}答案:
78.5
0.0
0.0
2.定义图形类Shape,该类中有获得面积的方法getArea();定义长方形类Rect,该类是Shape的子类,类中有矩形长和宽的变量doublea,doubleb,设置长和宽的方法setWidth()、setHeight(),使用getArea()求矩形面积;利用getArea方法实现题1中圆面积的求解。
classShape{
doublegetArea(doubler){
return0;
}
}
publicclassRectextendsShape{
doublea,b,area;
Rect(doublewidth,doubleheigh){
a=width;
b=height;;
}
voidsetWidth(doublewidth){
a=width;
}
voidsetHeight(doubleheight){
b=height;
}
doublegetWidth(){
returna;
}
doublegetHeight(){
returnb;
}
doublegetArea(){
area=a*b;
returnarea;
}
}
publicclassA{
publicstaticvoidmain(Stringargs[]){
Rectrect=newRect();
doublew=12.76,h=25.28;
rect.setWidth(w);
rect.setHeight(h);
}
}
答案:
圆的的面积:
78.5
矩形对象的宽:
12.76高:
25.28
3.编写Java应用程序,定义Animal类,此类中有动物的属性:
名称name,腿的数量legs,统计动物的数量count;方法:
设置动物腿数量的方法voidsetLegs(),获得腿数量的方法getLegs(),设置动物名称的方法setKind(),获得动物名称的方法getKind(),获得动物数量的方法getCount()。
定义Fish类,是Animal类的子类,统计鱼的数量count,获得鱼数量的方法getCount()。
定义Tiger类,是Animal类的子类,统计老虎的数量count,获得老虎数量的方法getCount()。
定义SouthEastTiger类,是Tiger类的子类,统计老虎的数量count,获得老虎数量的方法getCount()。
publicclassAnimal{
Stringname;
intlegs;
staticintcount;
Animal(){count++;}
voidsetLegs(intlegs){
this.legs=legs;
}
intgetLegs(){
returnlegs;
}
voidsetKind(Stringname){
this.name=name;
}
StringgetKind(){
returnname;
}
intgetCount(){
returncount;
}
}
publicclassFishextendsAnimal{
staticintcountFish;
Fish(){countFish++;}
intgetCount(){
returncountFish;
}
}
publicclassTigerextendsAnimal{
staticintcountTiger;
Tiger(){countTiger++;}
intgetCount(){
returncountTiger;
}
}
publicclassSouthEastTigerextendsTiger{}
publicclassA{
publicstaticvoidmain(Stringargs[]){
Fishf=newFish();
Tigert=newTiger();
SouthEastTigerst=newSouthEastTiger();
}
}
实验四异常处理
1.建立exception包,编写TestException.java程序,主方法中有以下代码,确定其中可能出现的异常,进行捕获处理。
for(inti=0;i<4;i++){
intk;
switch(i){
case0:
intzero=0;k=911/zero;break;
case1:
intb[]=null;k=b[0];break;
case2:
intc[]=newint[2];k=c[9];break;
case3:
charch="abc".charAt(99);break;
}
}
packageException;
publicclassTestException{
publicstaticvoidmain(String[]args){
for(inti=0;i<4;i++){
try{
intk;
switch(i){
case0:
intzero=0;k=911/zero;break;
case1:
intb[]=null;k=b[0];break;
case2:
intc[]=newint[2];k=c[9];break;
case3:
charch="abc".charAt(99);break;
}
}
catch(ArithmeticExceptione){
}
}
catch(ArrayIndexOutOfBoundsExceptione){
}
}
}
}
}
运行结果:
/byzero
null
9
Stringindexoutofrange:
99
2.建立exception包,建立Bank类,类中有变量doublebalance表示存款,Bank类的构造方法能增加存款,Bank类中有取款的发方法withDrawal(doubledAmount),当取款的数额大于存款时,抛出InsufficientFundsException,取款数额为负数,抛出NagativeFundsException,如newBank(100),表示存入银行100元,当用方法withdrawal(150),withdrawal(-15)时会抛出自定义异常。
提示:
InsufficientFundsException,NagativeFundsException为自定义的类,分别产生余额不足异常和取款为负数异常,需继承Exception类。
通过输出结果了解java异常的产生,并将该Java程序放在exception包中。
packageException;//注解先建立一个package,然后在包中建立各种类
publicclassInsufficientFundsExceptionextendsException{
Strings1;
InsufficientFundsException(Stringt){
s1=t;
}
publicStringgetMassage1(){
returns1;
}
}
packageException;
publicclassNagativeFundsExceptionextendsException{
Strings;
NagativeFundsException(Stringt){
s=t;
}
publicStringgetMassage(){
returns;
}
}
packageException;
publicclassBankextendsException{
staticdoubleba=0;
Bank(doubler){
ba=ba+r;
}
voidwithDrawal(doubledAmount)throwsInsufficientFundsException,NagativeFundsException{
if(dAmount>ba)thrownewInsufficientFundsException("取款余额不足");
elseif(dAmount<0)thrownewNagativeFundsException("取款为负数");
else
}
}
packageException;
importjava.util.*;
publicclassA{
publicstaticvoidmain(Stringargs[]){
Bankb=newBank(100);
Scannersc=newScanner(System.in);
try{
b.withDrawal(sc.nextInt());
}
catch(InsufficientFundsExceptione){
}
catch(NagativeFundsExceptione){
}
}
}
运行结果:
请输入一个数
80
银行里还剩余:
20.0
实验五输入输出
1.编写TextRw.java的Java应用程序,程序完成的功能是:
首先向TextRw.txt中写入自己的学号和姓名,读取TextRw.txt中信息并将其显示在屏幕上。
importjava.io.*;
publicclassTextRw{
publicstaticvoidmain(String[]args)throwsIOException{
Filef=newFile("f:
\\TextRw.txt");
FileWriterfw=newFileWriter(f);
fw.write("学号姓名");
fw.close();
FileReaderfr=newFileReader(f);
inti;
while((i=fr.read())!
=-1)
fr.close();
}
}
2.编写IoDemo.java的Java应用程序,程序完成的功能是:
首先读取IoDemo.java源程序文件,再通过键盘输入文件的名称为iodemo.txt,把IoDemo.java的源程序存入
3.编写BinIoDemo.java的Java应用程序,程序完成的功能是:
完成1.doc文件的复制,复制以后的文件的名称为自己的学号姓名.doc。
importjava.io.*;
publicclassBinIoDemo{
publicstaticvoidmain(String[]args)throwsIOException{
Filef1=newFile("e:
\\1.doc");
FileInputStreamin=newFileInputStream(f1);
Filef2=newFile("e:
\\“学号”+“姓名”.doc");
FileOutputStreamout=newFileOutputStream(f2);
byte[]buf=newbyte[2048];
intnum=in.read(buf);
while(num!
=(-1)){
out.write(buf,0,num);
out.flush();
num=in.read(buf);
}
in.close();
out.close();
}
}
实验六多线程编程
1.随便选择两个城市作为预选旅游目标。
实现两个独立的线程分别显示10次城市名,每次显示后休眠一段随机时间(1000ms以内),哪个先显示完毕,就决定去哪个城市。
分别用Runnable接口和Thread类实现。
通过Thread
publicclassHw1ThreadextendsThread{
Stringa;
privateintsleepTime;
publicHw1Thread(Stringa){
super(a);
this.a=a;
sleepTime=(int)(Math.random()*6000);
}
publicvoidrun(){
intcount1=0,count2=0;
if(Thread.currentThread().getName().equalsIgnoreCase("ShangHai")){
for(inti=0;i<10;i++){
try{
Thread.sleep(sleepTime);
count1++;
if(count1>count2&&count1==10){//判断哪个城市的输出次数先达到10,达到则终止输出
}
elseif(count2>count1&&count2==10){
}
}
catch(InterruptedExceptionexception){};//使用sleep方法需要抛出中断异常
}
}
if(Thread.currentThread().getName().equalsIgnoreCase("BeiJIng")){
for(inti=0;i<10;i++){
try{
Thread.sleep(sleepTime);
count2++;
if(count1>count2&&count1==10){
}
elseif(count2>count1&&count2==10){
}
}
catch(InterruptedExceptionexception){};//使用sleep方法需要抛出中断异常(也可以在方法头抛出(throw)异常)
}
}
}
}
publicclassHw1ThreadText{
publicstaticvoidmain(String[]args)throwsInterruptedException{
Hw1Threadtd1=newHw1Thread("ShangHai");
Hw1Threadtd2=newHw1Thread("BeiJing");
td1.start();
td2.start();
}
}
通过Runnable接口:
publicclassHw1ThreadimplementsRunnable{
Stringa;
privateintsleepTime;
intcount1=0,count2=0;
publicHw1Thread(Stringa){
this.a=a;
sleepTime=(int)(Math.random()*1000);
}
publicvoidrun(){//重写run方法
if(Thread.currentThread().getName().equalsIgnoreCase("td1")){
for(inti=0;i<10;i++){
try{
Thread.sleep(sleepTime);
count1++;
}
catch(InterruptedExceptionexception){};//使用sleep方法需要抛出中断异常
if(count1>count2&&count1==10){
}
elseif(count2>count1&&count2==10){
}
}
}
if(Thread.currentThread().getName().equalsIgnoreCase("td2")){
for(inti=0;i<10;i++){
try{
Thread.sleep(sleepTime);
count2++;