Java語言程序設計上機實驗報告_第1頁
Java語言程序設計上機實驗報告_第2頁
Java語言程序設計上機實驗報告_第3頁
Java語言程序設計上機實驗報告_第4頁
Java語言程序設計上機實驗報告_第5頁
已閱讀5頁,還剩32頁未讀 繼續免費閱讀

付費下載

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

本科生實驗報告實驗課程Java語言程序設計學院名稱信息科學與技術學院 專業名稱軟件工程學生姓名學生學號指導教師實驗地點6A502實驗成績二〇一五年一月八日

Java語言程序設計上機實驗報告摘要本實驗報告用于記錄在Java語言程序設計課程開設的上機實驗中記錄上機實驗過程,以激勵自己學習進步并為將來的學習提供一系列參考資料。關鍵字Java語言;實驗;編程;語法;算法實驗一設計一個名為RegularPolygon的正n邊形類要求一個名為n的int型私有數據域定義多邊形的邊數,默認值為3。一個名為side的double型私有數據域存儲邊的長度,默認值為1。一個名為x的double型私有數據域,它定義多邊形中點的x坐標,默認值為0。一個名為y的double型私有數據域,它定義多邊形中點的y坐標,默認值為0。一個創建帶默認值的正多邊形的無參構造方法。一個能創建帶指定邊數和邊長度、中心在(0,0)的正多邊形的構造方法。一個能創建帶指定邊數和邊長度、中心在(x,y)的正多邊形的構造方法。所有數據域的get和set方法。一個返回多邊形周長的方法getPerimeter()。一個返回多邊形面積的方法getArea()。計算正多邊形面積的公式是:面積=(n*side2)/(4*tan(180/n))分別使用無參構造方法、RegularPolygon(6,4)和RegularPolygon(10,4,5.6,7.8)創建三個RegularPolygon對象,并顯示每個對象的周長和面積。代碼//RegularPolygon.javapublicclassRegularPolygon{ privateintn=3;//一個名為n的int型私有數據域定義多邊形的邊數,默認值為3。 privatedoubleside=1;//一個名為side的double型私有數據域存儲邊的長度,默認值為1。 privatedoublex=0;//一個名為x的double型私有數據域,它定義多邊形中點的x坐標,默認值為0。 privatedoubley=0;//一個名為y的double型私有數據域,它定義多邊形中點的y坐標,默認值為0。 //一個創建帶默認值的正多邊形的無參構造方法。 publicRegularPolygon(){ this.setN(3); setSide(1); setX(0); setY(0); } //一個能創建帶指定邊數和邊長度、中心在(0,0)的正多邊形的構造方法。 publicRegularPolygon(intn,doubleside){ this.setN(n); this.setSide(side); setX(0); setY(0); } //一個能創建帶指定邊數和邊長度、中心在(x,y)的正多邊形的構造方法。 publicRegularPolygon(intn,doubleside,doublex,doubley){ this.setN(n); this.setSide(side); this.setX(x); this.setY(y); } //所有數據域的get和set方法。 publicintgetN(){ returnn; } publicvoidsetN(intn){ this.n=n; } publicdoublegetSide(){ returnside; } publicvoidsetSide(doubleside){ this.side=side; } publicdoublegetX(){ returnx; } publicvoidsetX(doublex){ this.x=x; } publicdoublegetY(){ returny; } publicvoidsetY(doubley){ this.y=y; } //一個返回多邊形周長的方法getPerimeter()。 publicdoublegetPerimeter(){ returnn*side; } //一個返回多邊形面積的方法getArea()。計算正多邊形面積的公式是:面積=(n*side2)/(4*tan(180/n)) publicdoublegetArea(){ return(n*side*side)/(4*Math.tan(Math.PI/n)); }}//mainpublicclassmain{ publicstaticvoidmain(String[]args){ //使用無參方法構造一個對象 RegularPolygonr1=newRegularPolygon(); //使用RegularPolygon(6,4)方法構造一個對象 RegularPolygonr2=newRegularPolygon(6,4); //使用RegularPolygon(10,4,5.6,7.8)方法構造一個對象 RegularPolygonr3=newRegularPolygon(10,4,5.6,7.8); //顯示每個對象的周長和面積; System.out.println("無參數多邊形的面積是:\t"+r1.getArea()+"\t周長為:\t"+r1.getPerimeter()); System.out.println("兩個參數多邊形的面積是:\t"+r2.getArea()+"\t周長為:\t"+r2.getPerimeter()); System.out.println("四個參數多邊形的面積是:\t"+r3.getArea()+"\t周長為:\t"+r3.getPerimeter()); }}1.2設計一個名為Account的賬戶類1.2.1要求一個名為id的int類型的私有賬戶數據域(默認值0)一個名為balance的double類型的私有數據域存儲余額(默認值0)一個名為annualInterestRate的double類型的私有數據域存儲當前利率(默認值0)。假設所有的賬戶都有相同的利率。一個名為dateCreated的Date類型的私有數據域存儲賬戶開戶日期。(importjava.util.Date)一個能創建默認賬戶的無參構造方法。一個能創建帶特定id和初始余額的的賬戶的構造方法。id、balance和annualInterestRate的get和set方法dateCreated的get方法一個名為getMonthlyInterestRate()的方法返回月利率。一個名為withDraw的方法從賬戶提款。一個名為deposit的方法向賬戶存款。編寫一個測試程序,創建一個賬戶id為123、余額為2000元、年利率為4.5%的Account對象。使用withDraw方法取款200元,使用deposit方法存款3000元,然后打印余額、月利息以及這個賬戶的開戶日期。1.2.2代碼//Account.javapackageAccount;importjava.util.Date;publicclassAccount{ //一個名為id的int類型的私有賬戶數據域(默認值0) privateintid=0; //一個名為balance的double類型的私有數據域存儲余額(默認值0) privatedoublebalance=0; //一個名為annualInterestRate的double類型的私有數據域存儲當前利率(默認值0)。 privatedoubleannualInterestRate=0; //一個名為dateCreated的Date類型的私有數據域存儲賬戶開戶日期。 privateDatedateCreated; //一個能創建默認賬戶的無參構造方法。 publicAccount(){ this.setId(0); this.setBalance(0); dateCreated=newDate(); } //一個能創建帶特定id和初始余額的的賬戶的構造方法。 publicAccount(intid,doublebalance){ this.setId(id); this.setBalance(balance); dateCreated=newDate(); } //id、balance和annualInterestRate的get和set方法 publicintgetId(){ returnid; } publicvoidsetId(intid){ this.id=id; } publicdoublegetBalance(){ returnbalance; } publicvoidsetBalance(doublebalance){ this.balance=balance; } publicdoublegetAnnualInterestRate(){ returnannualInterestRate; } publicvoidsetAnnualInterestRate(doubleannualInterestRate){ this.annualInterestRate=annualInterestRate; } //dateCreated的get方法 publicDategetDateCreated(){ returndateCreated; } //一個名為getMonthlyInterestRate()的方法返回月利率 publicdoublegetMonthlyInterestRate(){ returngetAnnualInterestRate()/12; } //一個名為withDraw的方法從賬戶提款。 publicdoublewithDraw(doubledraw){ if(draw<=getBalance()){ setBalance(getBalance()-draw); returndraw; }else{ return0; } } //一個名為deposit的方法向賬戶存款。 publicdoubledeposit(doubledeposit){ setBalance(getBalance()+deposit); returndeposit; }}//mainpackageAccount;publicclassMain{ publicstaticvoidmain(String[]args){ //創建一個賬戶id為123、余額為2000元、年利率為4.5%的Account對象。 Accountaccount=newAccount(123,2000); account.setAnnualInterestRate(0.045); //使用withDraw方法取款200元 account.withDraw(200); //使用deposit方法存款3000元 account.deposit(3000); //然后打印余額、月利息以及這個賬戶的開戶日期。 System.out.println("賬戶"+account.getId()+"的余額為:\t"+account.getBalance()); System.out.println("月利息為:\t"+account.getMonthlyInterestRate()*account.getBalance()); System.out.println("開戶日期:\t"+account.getDateCreated()); }}實驗二2.1三角形類Triangle2.1.1要求設計一個三角形類Triangle來擴展Geometricobject類,該類包括:三個名為side1,side2和side3的double數據域表示這個三角形的三條邊,它們的默認值是1.0一個無參構造方法創建默認的三角形一個能創建指定side1,side2和side3的三角形的構造方法所有三個數據域的get方法一個名為getArea()的方法返回這個三角形的面積,計算公式為s=(side1+side2+side3)/2一個名為getPerimeter()的方法返回這個三角形的周長編寫測試程序,創建邊長為1、1.5和1,顏色為yellow,filled為true的Triangle對象,然后顯示它的面積、周長、顏色以及是否被填充顯示以該對象創建的具有三角形底的Pillar類對象的體積。2.1.2代碼//Geometricobject.javapackageGeometricobject;publicabstractclassGeometricobject{ privateStringcolor="White"; privateStringfilled="false"; publicabstractdoublegetArea(); publicabstractdoublegetPerimeter(); publicStringgetColor(){ returncolor; } publicvoidsetColor(Stringcolor){ this.color=color; } publicStringgetFilled(){ returnfilled; } publicvoidsetFilled(Stringfilled){ this.filled=filled; }}//Pillar.javapackageGeometricobject;publicclassPillar{ privateGeometricobjectgeometricobject; privatedoubleheight; publicPillar(Geometricobjectgeometricobject,doubleheight){ this.geometricobject=geometricobject; this.height=height; } publicdoublegetVolume(){ returnheight*geometricobject.getArea(); } }//TrianglepackageGeometricobject;//設計一個三角形類Triangle來擴展GeometricobjectpublicclassTriangleextendsGeometricobject{ //三個名為side1,side2和side3的double數據域表示這個三角形的三條邊,它們的默認值1.0 privatedoubleside1=1.0; privatedoubleside2=1.0; privatedoubleside3=1.0; //一個無參構造方法創建默認的三角形 publicTriangle(){} //一個能創建指定side1,side2和side3的三角形的構造方法 publicTriangle(doubleside1,doubleside2,doubleside3){ this.side1=side1; this.side2=side2; this.side3=side3; } //所有三個數據域的get方法 publicdoublegetSide1(){ returnside1; } publicdoublegetSide2(){ returnside2; } publicdoublegetSide3(){ returnside3; } //一個名為getArea()的方法返回這個三角形的面積,計算公式為s=(side1+side2+side3)/2 publicdoublegetArea(){ return(this.side1+this.side2+this.side3)/2; } //一個名為getPerimeter()的方法返回這個三角形的周長 publicdoublegetPerimeter(){ returnthis.side1+this.side2+this.side3; } };//main.javapackageMain;importGeometricobject.*;publicclassMain{ publicstaticvoidmain(String[]argv){ Triangletriangle=newTriangle(1,1.5,1); triangle.setColor("yellow"); triangle.setFilled("true"); System.out.println("面積\t"+triangle.getArea()); System.out.println("周長\t"+triangle.getPerimeter()); System.out.println("顏色\t"+triangle.getColor()); System.out.println("是否填充\t"+triangle.getFilled()); Pillarpillar=newPillar(triangle,2); System.out.println("Pillar類的對象體積\t"+pillar.getVolume()); }}2.2設計一個名為Person的類和它的兩個名為Student和Employee的子類2.2.1要求Employee類又有子類:教員類Faculty和職員類Staff。每個人都有姓名、地址、電話號碼學生有班級號教員有級別職員有職務稱號覆蓋每個類的toString方法,顯示相應的類名和人名編寫測試程序,創建Person、Student、EmployeeFaculty和Staff,并調用它們的toString方法2.2.2代碼//Employee.javapackageClass;//Person的子類EmployeepublicclassEmployeeextendsPerson{ publicEmployee(Stringname,Stringaddress,Stringphonenumber){ super(name,address,phonenumber); }}//Faculty.javapackageClass;//Employee的子類FacultypublicclassFacultyextendsEmployee{ //教員有級別 privateStringlevel; publicFaculty(Stringname,Stringaddress,Stringphonenumber,Stringlevel){ super(name,address,phonenumber); this.level=level; }}//Person.javapackageClass;//設計一個名為Person的類publicclassPerson{ privateStringname; privateStringaddress; privateStringphonenumber; publicPerson(Stringname,Stringaddress,Stringphonenumber){ =name; this.address=address; this.phonenumber=phonenumber; } //覆蓋每個類的toString方法,顯示相應的類名和人名 publicStringtoString(){ returnthis.getClass().getName()+"\t姓名:"+name; }}//Staff.javapackageClass;//Employee的子類StaffpublicclassStaffextendsEmployee{ //職員有職務稱號 privateStringprofessionaltitle; publicStaff(Stringname,Stringaddress,Stringphonenumber,Stringprofessionaltitle){ super(name,address,phonenumber); fessionaltitle=professionaltitle; }}//Student.javapackageClass;//Person的子類StudentpublicclassStudentextendsPerson{ //學生有班級號 privateintclassnumber; publicStudent(Stringname,Stringaddress,Stringphonenumber,intclassnumber){ super(name,address,phonenumber); this.classnumber=classnumber; }}//Main.javapackageMain;importClass.*;publicclassMain{ publicstaticvoidmain(String[]args){ //創建Person、Student、EmployeeFaculty和Staff Personperson=newPerson("Person","ddd","222"); Studentstudent=newStudent("Student","ddd","2",5); Employeeemployee=newEmployee("Employee","ddd","33"); Facultyfaculty=newFaculty("Factuly","ddd","22","level"); Staffstaff=newStaff("Staff","ddd","222","professionaltitle"); System.out.println(person.toString()); System.out.println(student.toString()); System.out.println(employee.toString()); System.out.println(faculty.toString()); System.out.println(staff.toString()); }}實驗三3.1求幾何對象的面積之和3.1.1要求編寫一個方法,求參數列表中所有幾何對象的面積之和。方法簽名如下:publicstaticdoublesumArea(GeometricObject…a)編寫測試程序,創建4個對象(2個矩形,2個三角形),然后使用sumArea方法求它們的總面積。可變參數用法參考書58頁,同時請大家使用增強的for語句編程。3.1.2代碼publicstaticdoublesumArea(Geometricobject...list){ doublesum=0; for(Geometricobjectparam:list){ sum+=param.getArea(); } returnsum; }3.2實現可比較大小的RegularPolygon類和Triangle類3.2.1要求擴展實驗一中的RegularPolygon類和實驗二中的Triangle類,使之都實現Comparable接口。編寫測試程序,測試新的RegularPolygon類和Triangle類3.2.2代碼//ComparableGeometricobject.javapackageGeometricobject;publicabstractclassComparableGeometricobjectextendsGeometricobjectimplements Comparable<ComparableGeometricobject>{ publicintcompareTo(ComparableGeometricobjecto){if(getArea()>(o.getArea())) return1;elseif((getArea())<(o.getArea())) return-1;else return0; }}//ComparableRegularPolygon.javapackageGeometricobject;publicclassComparableRegularPolygonextendsComparableGeometricobject{ privateintn=3; privatedoubleside=1; privatedoublex=0; privatedoubley=0; publicComparableRegularPolygon(){ this.setN(3); setSide(1); setX(0); setY(0); } publicComparableRegularPolygon(intn,doubleside){ this.setN(n); this.setSide(side); setX(0); setY(0); } publicComparableRegularPolygon(intn,doubleside,doublex,doubley){ this.setN(n); this.setSide(side); this.setX(x); this.setY(y); } publicintgetN(){ returnn; } publicvoidsetN(intn){ this.n=n; } publicdoublegetSide(){ returnside; } publicvoidsetSide(doubleside){ this.side=side; } publicdoublegetX(){ returnx; } publicvoidsetX(doublex){ this.x=x; } publicdoublegetY(){ returny; } publicvoidsetY(doubley){ this.y=y; } publicdoublegetPerimeter(){ returnn*side; } publicdoublegetArea(){ return(n*side*side)/(4*Math.tan(Math.PI/n)); }}//ComparableRectangle.javapackageGeometricobject;publicclassComparableRectangleextendsComparableGeometricobject{ privatedoublewidth=1.0; privatedoubleheight=1.0; publicComparableRectangle(){} publicComparableRectangle(doublewidth,doubleheight){ this.width=width; this.height=height; } publicdoublegetArea(){returnwidth*height;} publicdoublegetPerimeter(){returnwidth+width+height+height;} publicdoublegetWidth(){returnthis.width;} publicdoublegetHeight(){returnthis.height;} }//ComparableTriangle.javapackageGeometricobject;publicclassComparableTriangleextendsComparableGeometricobject{ privatedoubleside1=1.0; privatedoubleside2=1.0; privatedoubleside3=1.0; publicComparableTriangle(){} publicComparableTriangle(doubleside1,doubleside2,doubleside3){ this.side1=side1; this.side2=side2; this.side3=side3; } publicdoublegetSide1(){ returnside1; } publicdoublegetSide2(){ returnside2; } publicdoublegetSide3(){ returnside3; } publicdoublegetArea(){ return(this.side1+this.side2+this.side3)/2; } publicdoublegetPerimeter(){ returnthis.side1+this.side2+this.side3; }}3.3找出最大的對象3.3.1要求編寫一個方法,返回對象列表中最大的對象。方法簽名:PublicstaticObjectmax(Comparable…a)編寫測試程序,創建2個RegularPolygon類和2個Triangle類對象,找出面積最大的對象。3.3.2代碼 publicstaticComparableGeometricobjectmax(ComparableGeometricobject...list){ ComparableGeometricobjecto=list[0]; for(ComparableGeometricobjectparam:list){ if(o.getArea()<param.getArea()){ o=param; } } returno; }實驗四4.1求幾何對象的面積排序 4.1.1要求編寫一個方法,求參數中幾何對象數組的面積排序(冒泡法)。方法簽名如下:publicstaticvoidbubbleSort(GeometricObject[]a)編寫測試程序,創建4個對象(4個矩形或4個三角形)的數組,然后使用bubbleSort方法對它們的面積進行冒泡法排序。排序時,請使用實驗3中的max方法比較面積大小。4.1.2代碼 publicstaticvoidbubbleSort(ArrayList<ComparableGeometricobject>list,ArrayList<ComparableGeometricobject>r){ ComparableGeometricobjecttemp; while(list.size()>0){ temp=list.get(0); for(intj=0;j<list.size();j++){ temp=max(temp,list.get(j)); } list.remove(temp); r.add(temp); } }4.2修改后的Account類4.2.1要求在實驗一Account類的基礎上做如下修改:添加一個String型的數據域name存儲客戶名字添加一個新的構造方法,該方法創建一個帶指定名字、id和初始余額的賬戶添加一個名為transactions的數據域,類型為ArrayList,可以為賬戶存儲交易。每筆交易都是一個名為Transaction類的實例修改withDraw和deposit方法,向transactions線性表添加一筆交易。4.2.2代碼//account.javapackageAccount;importjava.util.ArrayList;importjava.util.Date;publicclassAccount{ //添加一個名為transactions的數據域,類型為ArrayList,可以為賬戶存儲交易。每筆交易都是一個名為Transaction類的實例 publicArrayList<Transaction>transactions; //添加一個String型的數據域name存儲客戶名字 privateStringname; privateintid=0; privatedoublebalance=0; privatedoubleannualInterestRate=0; privateDatedateCreated; publicAccount(){ this.setId(0); this.setBalance(0); dateCreated=newDate(); transactions=newArrayList<Transaction>(); } publicAccount(intid,doublebalance){ this.setId(id); this.setBalance(balance); dateCreated=newDate(); transactions=newArrayList<Transaction>(); } //添加一個新的構造方法,該方法創建一個帶指定名字、id和初始余額的賬戶 publicAccount(intid,Stringname,doublebalance){ this.setId(id); this.setName(name); this.setBalance(balance); dateCreated=newDate(); transactions=newArrayList<Transaction>(); } publicintgetId(){ returnid; } publicvoidsetId(intid){ this.id=id; } publicdoublegetBalance(){ returnbalance; } publicvoidsetBalance(doublebalance){ this.balance=balance; } publicdoublegetAnnualInterestRate(){ returnannualInterestRate; } publicvoidsetAnnualInterestRate(doubleannualInterestRate){ this.annualInterestRate=annualInterestRate; } publicDategetDateCreated(){ returndateCreated; } publicdoublegetMonthlyInterestRate(){ returngetAnnualInterestRate()/12; } publicdoublewithDraw(doubledraw){ if(draw<=getBalance()){ setBalance(getBalance()-draw); Transactiont=newTransaction('w',draw,getBalance(),"取錢"); this.transactions.add(t); returndraw; }else{ return0; } } publicdoubledeposit(doubledeposit){ setBalance(getBalance()+deposit); Transactiont=newTransaction('d',deposit,getBalance(),"存錢"); this.transactions.add(t); returndeposit; } publicStringgetName(){ returnname; } publicvoidsetName(Stringname){ =name; }}4.3Transaction類4.3.1要求一個名為date的Date類型數據域表示交易日期一個名為type的char型數據域表示交易類型,例如:‘w’表示取錢‘D’表示存錢一個名為amount的double型數據域表示交易額一個名為balance的double型數據域表示交易后的新余額一個名為description的String型數據域描述交易一個能創建指定type、amount、balance和description對象的構造方法編寫一個測試程序,創建一個年利率1.5%、余額1000、id為112、名字為zhao的Account對象。使用withDraw方法取款20,150,10,使用deposit方法存款300,10,5,然后打印賬戶清單,顯示用戶名字,利率,余額和所有交易。4.3.2代碼 //Transaction.javapackageAccount;importjava.util.Date;publicclassTransaction{ //一個名為date的Date類型數據域表示交易日期 privateDatedate; //一個名為type的char型數據域表示交易類型,例如:‘w’表示取錢‘D’表示存錢 privatechartype; //一個名為amount的double型數據域表示交易額 privatedoubleamount; //一個名為balance的double型數據域表示交易后的新余額 privatedoublebalance; //一個名為description的String型數據域描述交易 privateStringdescription; //一個能創建指定type、amount、balance和description對象的構造方法 publicTransaction(chartype,doubleamount,doublebalance,Stringdescription){ this.type=type; this.amount=amount; this.balance=balance; this.description=description; date=newDate(); } publicDategetDate(){ returndate; } publicchargetType(){ returntype; } publicdoublegetAmount(){ returnamount; } publicdoublegetBalance(){ returnbalance; } publicStringgetDescription(){ returndescription; }}//Main.javapackageMain;importAccount.*;publicclassMain{ publicstaticvoidmain(String[]args){ //TODOAuto-generatedmethodstub //創建一個年利率1.5%、余額1000、id為112、名字為zhao的Account對象。 Accountaccount=newAccount(112,"Zhao",1000); account.setAnnualInterestRate(0.015); account.withDraw(20); account.withDraw(150); account.withDraw(10); account.deposit(300); account.deposit(10); account.deposit(5); for(inti=0;i<account.transactions.size();i++){ System.out.println(account.transactions.get(i)); } }}實驗五5.1ArrayIndexOutBoundException異常5.1.1要求創建一個滿足下列要求的程序:創建一個由20個隨機整數構成的數組。提示用戶輸入數組的下標,然后顯示對應的元素值。如果指定的下標越界,就顯示消息outofbounds5.1.2代碼//Main.javapackageMain;importjava.util.Scanner;publicclassMain{ publicstaticintnumber[]=newint[20]; publicstaticvoidmain(String[]args){ //TODOAuto-generatedmethodstub for(inti=0;i<20;i++){ number[i]=(int)Math.random(); } @SuppressWarnings("resource") Scannerreader=newScanner(System.in); intn; while(true){ try{ n=reader.nextInt(); System.out.println(n+'\t'+number[n]); }catch(Exceptione){ System.out.println("數組越界"); } } }}5.2修改實驗三的Account類5.2.1要求如果創建Account對象時,賬戶余額或利率小于或等于0,則拋出IllegalArgumentException異常。創建一個IllegalWithDrawException類,如果withDraw方法中,取款金額超過賬戶余額,則拋出IllegalWithDrawException異常編寫測試程序5.2.2代碼//IllegalArgumentException.javapackageAccount;@SuppressWarnings("serial")publicclassIllegalArgumentExceptionextendsException{ Stringmessage; publicIllegalArgumentException(){ message="年利率小于或等于0"; } publicStringwarnMess(){ returnmessage; }}//IllegalWithDrawException.javapackageAccount;@SuppressWarnings("serial")publicclassIllegalWithDrawExceptionextendsException{ Stringmessage; publicIllegalWithDrawException(doublem,doublen){ message="取出金額"+m+"超出賬戶余額"+"n"+"\n"; } publicStringwarnMess(){ returnmessage; }}5.3定義帶三條邊的Triangle類5.3.1要求Triangle類擴展自GeometricObject類。在三角形中,任意兩邊之和總大于第三邊,Triangle類必須遵從這一規則。創建一個IllegalTriangleException類,如果創建的三角形的邊違反了這一規則,拋出一個IllegalTriangleException對象。編寫測試程序5.3.2代碼//IllegalTriangleException.javapackageGeometricobject;@SuppressWarnings("serial")publicclassIllegalTriangleExceptionextendsException{ Stringmessage; publicIllegalTriangleException(){ message="三角形變長不合法"; } publicStringwarnMess(){ returnmessage; }}//Trianle.javapackageGeometricobject;publicclassTriangleextendsGeometricobject{ privatedoubleside1=1.0; privatedoubleside2=1.0; privatedoubleside3=1.0; publicTriangle(){} privatebooleancheck(){ if(side1+side2<side3||side1+side3<side2||side3+side2<side1){ returnfalse; }else{ returntrue; } } publicTriangle(doubleside1,doubleside2,doubleside3){ try{ this.side1=side1; this.side2=side2; this.side3=side3; if(!check()) thrownewIllegalTriangleException(); }catch(IllegalTriangleExceptione){ System.out.println(e.warnMess()); } } publicdoublegetSide1(){ returnside1; } publicdoublegetSide2(){ returnside2; } publicdoublegetSide3(){ returnside3; } publicdoublegetArea(){ return(this.side1+this.side2+this.side3)/2; } publicdoublegetPerimeter(){ returnthis.side1+this.side2+this.side3; } };實驗六6.1檢測回文串6.1.1要求如果一個字符串從前向后讀和從后向前讀都是同一個字符串,則稱為回文串。例如:“mom”和“dad”都是回文串編寫一個程序,提示用戶輸入一個字符串,忽略該字符串中的非字母和非數字字符,然后判斷是否是回文串。可使用Character類的靜態方法isLetterOrDigit(charch)來判斷字符類型。6.1.2代碼//Main.javapackageMain;importjava.util.Scanner;publicclassMain{ publicstaticvoidmain(String[]args){ Stringstring; @SuppressWarnings("resource") Scannerreader=newScanner(System.in); string=reader.nextLine(); intsize=string.length(); intn=size/2; inti; for(i=0;i<=n;i++){ if(string.charAt(i)!=string.charAt(size-1-i)){ break; } } if(i!=n+1){ System.out.println("wrong"); }else{ System.out.println("right"); } }}6.2檢驗密碼6.2.1要求一些網站設定了一些制定密碼的規則。編寫一個方法,檢驗一個字符串是否是合法的密碼。假設密碼規則如下:密碼必須至少有8個字符密碼只能包括字母和數字密碼必須至少有2個數字編寫一個程序,提示用戶輸入密碼,并判斷是否是合法的密碼。6.2.2代碼//Main.javapackageMain;importjava.util.Scanner;publicclassMain{ publicstaticvoidmain(String[]args){ //TODOAuto-generatedmethodstub Stringregex="^(\\w*[0-9]\\w*[0-9]\\w*)$"; @SuppressWarnings("resource") Scannerreader=newScanner(System.in); Stringstring=reader.nextLine(); if(string.matches(regex)&&string.length()>=8){ System.out.println("ok"); }else{ System.out.println("wrong"); } }}6.3在字符串中每個數字出現的次數6.3.1要求使用下面的方法頭編寫一個方法,統計每個數字在字符串中出現的次數:publicstaticint[]count(Strings)這個方法統計每個數字在字符串中出現的次數。返回值是一個10個元素的數組,每個元素存儲的是一個數字出現的次數。例如:執行完int[]counts=count(“0112ab”);后,counts[0]=1,counts[1]=2,counts[2]=16.3.2代碼//Main.javapackageMain;publicclassMain{ publicstaticvoidmain(String[]args){ //TODOAuto-generatedmethodstub } publicstaticint[]count(Strings){ intcounts[]=newint[10]; intsize=s.length(); for(inti=0;i<10;i++){ counts[i]=0; } inttemp; for(inti=0;i<size;i++){ temp=(int)(s.charAt(i)-'0'); if(temp>=0&&temp<=9){ counts[temp]++; } } returncounts; }}6.4劊子手游戲6.4.1要求隨機產生一個單詞,單詞中的字母都以星號顯示。然后提示用戶一次猜測一個字母,當用戶才猜測準確時,就顯示實際的字母。當用戶完成了一個單詞,就顯示猜錯的次數,然后詢問用戶是否繼續猜測另一個單詞。聲明一個數組來存儲這些單詞,例如:String[]words={“program”,”hello”,…….};6.4.2代碼//Main.javapackageMain;importjava.util.Scanner;publicclassMain{ staticString[]words={"program","hello","you","he","I"}; staticStringreplace(Stringstr,charn,intindex){ if(index>str.length()-1){ thrownewArrayIndexOutOfBoundsException("越界"); } Stringpre=str.substring(0,index); Stringsub=str.substring(index+1); returnpre+n+sub; } staticbooleanunknown(Strings){ for(inti=0;i<s.length();i++){ if(s.charAt(i)=='*'){ returntrue; } } returnfalse; } staticStringupdate(Stringkey,Stringanswer,charn){ for(inti=0;i<answer.length();i++){ if(answer.charAt(i)==n){ key=replace(key,n,i); } } returnkey; } publicstaticvoidmain(String[]args){ //TODOAuto-generatedmethodstub @SuppressWarnings("resource") Scannerreader=newScanner(System.in); Stringanswer=words[((int)Math.random())%words.length]; Stringkey=""; Stringin; intsize=answer.length(); for(inti=0;i<size;i++){ key+='*'; } while(unknown(key)){ System.out.println(key); in=reader.next(); key=update(key,answer,in.charAt(0)); } System.out.println(key); }}實驗七7.1在實驗四Account類的基礎上做如下修改7.1.1要求打印賬戶清單時,顯示用戶名字,開戶日期(格式為年-月-日,例如2012-11-19),利率(格式化為百分數),余額(格式化為貨幣值,例如:1,234,567¥)和所有交易。增加balanceInterest方法,計算當前存款的利息(按存款存入的天數計算,如果有多筆存款,發生取款交易時,按存入順序取款)7.1.2代碼publicdoublebalanceInterest(){ doublesum=0; ArrayList<Double>s=newArrayList<Double>(); doubletemp=0; doubleamount; for(intj=0;j<transactions.size();j++){ for(intk=1;k<s.size();k++){ sum+=s.get(j)*getAnnualInterestRate()*(transactions.get(j).getDate().getYear()+-transactions.get(j-1).getDate().getYear()); } if(transactions.get(j).getDescription().compareTo("存錢")==0){ s.add(transactions.get(j).getAmount()); }elseif(transactions.get(j).getDescription().compareTo("取錢")==0){ amount=transactions.get(j).getAmount(); inti=0; while(amount>0){ temp=s.get(i); temp-=amount; if(temp<0){ temp=0; amount-=s.get(i); }else{ temp-=amount; } s.set(i,temp); } } } returnsum; }第8章實驗八8.14個小伙伴唱歌8.1.1要求編寫代碼模擬他們唱歌的全過程,要求如下:(1)話筒只有一個,大家輪流隨機唱~(2)每個人都可以不被打斷地唱三句歌詞:1、我是x(x=1,2,3,4);2、我最喜歡唱歌;3、大家都愛聽我唱歌!(3)每個人都只能唱10次,次數到了,就只有旁觀了~8.1.2代碼 //ToolpackageTools;publicclassToolimplementsRunnable{ privateintfriend[]

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論