太原理工大学java实验报告Word格式.docx
《太原理工大学java实验报告Word格式.docx》由会员分享,可在线阅读,更多相关《太原理工大学java实验报告Word格式.docx(15页珍藏版)》请在冰点文库上搜索。
第3页
学院名称学生姓名课程名称计算机科学与技术专业班级 实验日期 学号成绩Java语言程序设计实验题目Java语言基础一.实验目的掌握java面向对象程序设计中类,继承,包和接口的概念与应用,能够熟练应用方法,类,成员变量等元素。
二.实验内容1.创建一个复数类complex,以复数进行数学运算。
复数具有如下格式:
RealPart+ImaginaryPart*I,其中,I为-1的平方根。
要求如下:
利用浮点变量表示此类的私有数据。
提供两个构造方法,一个用于此类声明时对象的初始化;
一个为带默认值的无参构造方法。
提供两复数加,减,乘的运算方法。
按格式打印复数。
其中a为实部,b为虚部。
2.创建银行账号Account类,实现存款,取和查询等功能。
3.编程定义一个接口,实现三个数中求最小值和最大值的方法,并将程序存放在getmaths包中。
4.修改案例1中的部分设计:
设计和实现Clipher类的一个子类,它实现如下的加密规则:
在字母表中的每个字母用反字母表中的相应位置的字母来代替,如a用z来代替,b用y来代替等。
修改()方法使其采用旋转而不是反转。
也就是说,通过旋转一个字母,如“hello”则旋转为“ohell”。
三.编译源程序1.publicclassL01{ publicstaticvoidmain(Stringa){ Complexb=newComplex(2,5);
Complexc=newComplex(3,-4);
(b+\ (b+\ (b+\ } } classComplex{ privatedoublem;
//实部 privatedoublen;
//虚部 publicComplex(doublem,doublen){ =m;
实验地点多学科楼六层606室第4页
指导教师 相洁 =n;
} publicComplexadd(Complexc){ returnnewComplex(m+,n+);
}publicComplexminus(Complexc){ returnnewComplex(m-,n-);
}publicComplexmultiply(Complexc){ returnnewComplex(m*-n*,m*+n*);
} publicStringtoString(){ Stringrtr_str=\if(n>
0) rtr_str=\if(n==0) rtr_str=\if(n) (\金额不足,请重新输入\else { =money;
(\你取了\元\}第5页
}}publicclassL02{ publicstaticvoidmain(Stringargs) { Accounta=newAccount(\ (\账户余额为\元\ (500);
(\你存入\元\ (\账户余额为\元\ (300);
}}3.packagemymaths;
interfaceNum{ publicvoidMax();
publicvoidMin();
}publicclassinterfaceimplementsNum{inta,b,c;
publicinterface(inta,intb,intc){ =a;
=b;
=c;
}publicvoidMax(){ intmax;
max=a>
b?
a:
b;
max=max>
c?
max:
c;
(\三个数中最大值是:
\ }publicvoidMin(){ intmin;
min=apublicabstractclassCipher{ publicStringencrypt(Strings){ StringBufferresult=newStringBuffer(\ StringTokenizerwords=newStringTokenizer(s);
while(()){ (encode(())+\ } return();
}publicStringdecrypt(Strings){ StringBufferresult=newStringBuffer(\ StringTokenizerwords=newStringTokenizer(s);
while(()){ (decode(())+\ } return();
}publicabstractStringencode(Stringword);
publicabstractStringdecode(Stringword);
}publicclassCaesarextendsCipher{publicStringencode(Stringword){ StringBufferresult=newStringBuffer();
for(intk=0;
k} publicStringdecode(Stringword){ returnencode(word);
}}publicclassTestEncrypt{ publicstaticvoidmain(Stringargv){ Caesarcaesar=newCaesar();
//Cipherci=newCipher();
Stringplain=\ Stringsecret=(plain);
(\ (\ (\ (\ Transposetranspose=newTranspose();
secret=(plain);
(\ (\ (\ (\}}四.实验结果 实验一的运行结果如下:
实验二的运行结果如下:
实验三的运行结果如下:
第8页
实验四的运行结果如下:
五.试验中遇到的问题及体会 在实验过程中的确遇到过很多问题,不像前几章那样较容易实现各功能,比如在做实验一时开始的时候各个计算的相关算法确实不容易想,后来在与同学进行探讨后才勉强实现实验要求,还有在做第三题时我还分不清类与接口之间的区别与联系,不过经过仔细看书,发现理解起来也不是很困难,至于题中的算法还相对比较容易实现,另外在实验四中一开始案例一的设计都没看懂,最后在别人的帮助下才得以完成实验内容要求。
经过这次实验我发现自己在知识方面还有很多的不足,在平时的练习中也不懂得扩展与举一反三,导致这次的实验做得马马虎虎,除此之外也体会到了面向对象程序设计相对于过程化程序设计的优越性,总之,语言是一门技巧,要想能熟练掌握,必须多加练习。
第9页
学院名称学生姓名课程名称计算机科学与技术专业班级 实验日期 学号成绩Java异常处理Java语言程序设计实验题目一.实验目的 掌握异常的概念,以及如何定义,抛出和捕获处理异常二.实验内容1.做实验之前要求思考一下问题,作为预习内容:
错误和异常有何区别?
查看java异常类的关系图。
异常是如何抛出,捕获和处理的?
java捕获和处理异常的结构是怎样的?
try语句如何嵌套?
throw语句有何作用?
finally程序块的作用是什么?
2.运行下面的程序,理解异常的抛出,捕获与处理。
import*;
publicclassExceptionTest{ publicstaticvoidmain(Stringargs){ for(inti=0;
i指导教师 相洁
}}3.仿照例创建一个自己的异常类。
要求:
在定义银行类时,若取钱数大于余额则作为异常处理(InsufficientFundsException)。
提示:
(1)产生异常的条件是余额小于取款额,因此是否抛出异常要先判断该条件。
(2)确定产生异常的方法,应该在取钱方法(withdrawal)中产生异常InsufficientFundsException。
(3)处理异常安排在调用withdrawal的时候,因此withdrawal方法要声明异常,上级方法捕获并处理。
(4)将例,例输入计算机,观察运行结果。
三.实验过程1.
(1)错误与异常的区别:
错误:
指在程序编译时如果程序进入死循环,或递归无法结束,或内存溢出。
错误只能在编程阶段解决,只能依靠其他程序干预,否则会一直处于非正常状态。
异常:
指运算时除数为0,或操作数超过范围,或打开一个文件时发现文件并不存在,或欲装入的类文件丢失,或网络连接中断等。
(2)java提供了一种利用简单易行的方法检查和处理运行时产生的错误的异常处理机制,它是通过面向对象的方法来处理异常的。
在java程序的执行过程中,如果出现了异常事件,就会生成一个异常对象。
生成的异常对象将传递给java运行时系统,这一异常的产生和提交过程成为抛弃异常。
当java运行时系统得到一个异常对象时,它将会沿着方法的调用栈逐层回溯,寻找处理这一异常的代码。
找到能够处理这类异常的方法后,运行时系统把当前异常对象交给这个方法进行处理,这一过程称为捕获异常。
(3)根据程序对错误与异常的处理方式,可以将java中的异常分为Error类,RuntimeException类和Exception类。
其中Error类包括的是一些严重的程序不能处理的系统错误类,如内存溢出,虚拟机错误,栈溢出等。
这类错误一般主要与硬件有关,与程序本身无关,通常系统进行处理,程序本身无需去捕获和处理。
程序运行过程中,可能出现RuntimeException类的异常数量相当大,对于运行时的异常类,如数组越界,算术异常等,应通过程序尽量避免而不是去捕获它。
(4)为了避免程序运行时可能出现的错误,将程序代码放在try程序块中,紧跟在try语句后面包括一个catch语句,用来指定需要捕获的异常类型。
在程序中发生异常时,程序员可以抛出(throw)一个自定义异常类的实例,将其放到异常队列中去,并激活java的异常处理机制。
当抛出一个异常时,程序的执行就不再是线性的,这样就有可能导致方法的执行中断。
在java语言中,使用finally语句来解决此类问题。
Finally语句创建一个代码块,在try/catch语句执行后执行,不管是否抛出一个异常,系统都将执行finally语句的程序代码。
2.import*;
第11页
publicclassExceptionTest{ publicstaticvoidmain(Stringargs) { for(inti=0;
i
((i));
(\ } } publicvoidloadData(Stringfilename){ //Definelocalvariables FileReaderinputFile;
Readerreader;
StreamTokenizerst;
StringaString;
intaNumber,next;
try{ //Setuplinktofileandtokenreader inputFile=newFileReader(\ reader=newBufferedReader(inputFile);
st=newStreamTokenizer(reader);
(\开始读入数据:
\ //Readcontentsoffile while((next=())!
=_EOF){ if(next==_NUMBER){ aNumber=(int);
(newInteger(aNumber));
} else{ aString=;
(aString+\ (aString);
} }//Endofwhile ();
//Nowclosethefile }//Endoftry catch(IOExceptione){ (\读文件出现问题。
\ }finally{ (\读文件结束.\ } }}4.import*;
classAccount{ publicStringaccount;
publicdoublebalance=0;
publicAccount(Stringaccount,doublebalance)//构造方法{=account;
第13页
=balance;
} publicvoiddeposit(doublemoney){+=money;
} publicdoublegetbalance(){return;
} publicdoublewithdrawl(doublemoney)throwsInsufficientFundsException{ if(money>
){ thrownewInsufficientFundsException();
} =money;
} publicvoidprocess(booleansave,doublemoney){ if(save){ (\你的余额为:
\ }else{ try{ doubleleft=withdrawl(money);
}catch(InsufficientFundsExceptione){ } }} publicclassBank{ publicstaticvoidmain(Stringargs){ Accounta=newAccount(\(\账户余额为\元\(500);
(\你存入\元\(\账户余额为\元\(300);
}}5.classDivideByZeroExceptionextendsException{ publicObjectoffender;
publicDivideByZeroException(ObjectanObject){ super(\ offender=anObject;
}}publicclassL_06_02{ intx,y;
第14页
publicstaticvoidmain(Stringargs){ L_06_02my=newL_06_02(5,0);
//对5除以0进行测试try{ ();
}catch(DivideByZeroExceptione){ (\零作除数。
\} } publicL_06_02(inta,intb){x=a;
y=b;
} publicvoidtest()throwsDivideByZeroException{ if(y==0) thrownewDivideByZeroException(this);
else (x/y);
}}四.实验结果实验2的运行结果如下:
实验3的运行结果如下:
第15页
实验4的运行结果如下:
实验5的运行结果如下:
五.试验中遇到的问题及体会 异常指程序在运算时除数为0,或操作数超过范围,或打开一个文件时发现文件并不存在,或欲装入的类文件丢失,或网络连接中断等。
而异常处理机制的主要优点是:
(1)java通过面向对象的方法进行异常处理,把各种不同的异常处理事件进行分类,体现了良好的层次性,提供了良好的接口。
(2)java的异常处理机制使得处理异常的代码和“常规”代码分开,减少了代码的数量,同时增强了程序的可读性。
(3)java的异常处理机制使得异常事件可以沿堆栈自动向上传播,而不像C/C++语言中通过函数的返回值来传播,这样可以传递更多的信息并且简化代码的编写。
(4)于把异常事件当成对象来处理,利用类的层次性我们可以把多个具有相同父类的异常统一处理,也可以区分不同的异常分别处理,使用非常灵活。
(5)java异常处理机制为具有动态运行特性的复杂程序提供了强有力的控制方式。
在程序的整个运行过程中,实验二,四都比较容易调试,也没出现任何问题,同时在实验三中创建异常类时于可仿照例进行实验,所以实现起来也相对比较容易,即使如此,我觉得要真正掌握这一部分内容也不是那么容易,所以以后我更应该多去尝试新的题型,希望能彻底把这一部分给掌握了,以至于使所编写的程序更加健壮,完美。
第16页
学院名称学生姓名课程名称计算机科学与技术专业班级 实验日期 学号成绩Java语言程序设计实验题目 图形用户界面一.实验目的 掌握文本组件,按钮和单,复选按钮组件的使用;
掌握列表的使用,鼠标,键盘事件的处理;
掌握布局控制的方法。
二.实验内容
(1)编写一个Applet程序响应鼠标事件,当事件发生时,在状态条显示相应的事件信息。
提示:
使用showStatus(字符串)方法。
(2)完成图所示的GUI布局管理,不需要实现功能。
(3)试设计一窗口,内含一个按钮,开始运行时,按钮显示“ClickMe”字样,当按钮按下时,按钮显示为”ClickMeAgain“字样,再按一次,则按钮显示“ClickMe”字样,依次循环。
(4)仿照Windows2000/XP系统提供扫雷游戏编写一个类似功能和界面的扫雷程序。
(5)编写一个简易文本编辑器,参考界面如图所示。
包含基本的打开,保存,新建等功能,包含菜单,能够对文本的字体类型和颜色进行设置,力求界面美观。
三.程序源代码
(1)import*;
import*;
publicclassL08_07implementsMouseMotionListener,MouseListener,WindowListener{ privateFramefrm;
privateTextFieldtf;
publicstaticvoidmain(Stringargs){ L08_07_ListenerImpDemotwo=newL08_07_ListenerImpDemo();
();
} publicvoidgo(){ frm=newFrame(\三个监听器\ (newLabel(\拖曳鼠标\ tf=newTextField(30);
(tf,\使用缺省的布局管理器 (this);
//注册监听器MouseMotionListener (this);
//注册监听器MouseListener (this);
//注册监听器WindowListener (300,200);
(true);
} publicvoidmouseDragged(MouseEvente){//实现mouseDragged方法实验地点多学科楼六层606室第17页
指导教师 相洁 Strings=\鼠标当前坐标:
X=\ (s);
} publicvoidmouseMoved(MouseEvente){}//对其不感兴趣的方法可以方法体为空 publicvoidmouseClicked(MouseEvente){} publicvoidmouseEntered(MouseEvente){ Strings=\鼠标进入了\ (s);
} publicvoidmouseExited(MouseEvente){ Strings=\鼠标离开了\ (s);
} publicvoidmousePressed(MouseEvente){} publicvoidmouseReleased(MouseEvente){} publicvoidwindowClosing(WindowEvente){
(1);
//为了使窗口能正常关闭,程序正常退出,需要实现windowClosing方法 } publicvoidwindowOpened(WindowEvente){}//对其不感兴趣的方法可以方法体为空 publicvoidwindowIconified(WindowEvente){} publicvoidwindowDeiconified(WindowEvente){} publicvoidwindowClosed(WindowEvente){} publicvoidwindowActivated(WindowEvente){} publicvoidwindowDeactivated(WindowEvente){}}
(2)import*;
publicclassL08_02extendsFrame{ staticFramefrm=newFrame(\ staticPanelpnl=newPanel(newGridLayout(1,4,1,15));
staticPanelpn2=newPanel(newGridLayout());
staticPanelpn3=newPanel(newGridLayout(5,1));
staticPanelpn4=newPanel(newGridLayout(5,1));
staticPanelpn5=newPanel(newGridLayout(6,1));
staticPanelpn6=newPanel(newGridLayout(6,1));