上機(jī)實(shí)踐-Java程序設(shè)計精編教程(第3版)_第1頁
上機(jī)實(shí)踐-Java程序設(shè)計精編教程(第3版)_第2頁
上機(jī)實(shí)踐-Java程序設(shè)計精編教程(第3版)_第3頁
上機(jī)實(shí)踐-Java程序設(shè)計精編教程(第3版)_第4頁
上機(jī)實(shí)踐-Java程序設(shè)計精編教程(第3版)_第5頁
已閱讀5頁,還剩29頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

PAGEPAGE3271.7上機(jī)實(shí)踐實(shí)驗(yàn)?zāi)康谋緦?shí)驗(yàn)的目的是讓學(xué)生掌握開發(fā)Java應(yīng)用程序的三個步驟:編寫源文件、編譯源文件和運(yùn)行應(yīng)用程序2.實(shí)驗(yàn)要求編寫一個簡單的Java應(yīng)用程序,該程序在命令行窗口輸出兩行文字:“你好,很高興學(xué)習(xí)Java”和“Wearestudents”3.程序模板請按模板要求,將【代碼】替換為Java程序代碼。Hello.javapublicclassHello{publicstaticvoidmain(Stringargs[]){【代碼1】//命令行窗口輸出"你好,很高興學(xué)習(xí)Java"Studentzhang=newStudent();zhang.speak();}}classStudent{voidspeak(){【代碼2】//命令行窗口輸出"Wearestudents"}}

2.8上機(jī)實(shí)踐1.實(shí)驗(yàn)?zāi)康氖煜ava應(yīng)用程序的基本結(jié)構(gòu),并能聯(lián)合編譯應(yīng)用程序所需要的類。2.實(shí)驗(yàn)要求編寫3個源文件:MainClass.java、A.java和B.java,每個源文件只有一個類。MainClass.java含有應(yīng)用程序的主類(含有main方法),并使用了A和B。將3個源文件保存到同一目錄中,例如c:\1000,然后編譯MainClass.java。程序運(yùn)行參考效果如圖2.8所示。3.程序模板圖2.8只編譯主類請按模板要求,將【代碼】替換為Java程序代碼。圖2.8只編譯主類MainClass.javapublicclassMainClass{publicstaticvoidmain(Stringargs[]){【代碼1】//命令行窗口輸出"你好,只需編譯我"Aa=newA();a.fA();Bb=newB();b.fB();}}A.javapublicclassA{voidfA(){【代碼2】//命令行窗口輸出"IamA"}}B.javapublicclassB{voidfB(){【代碼3】//命令行窗口輸出"IamB"}}

3.5上機(jī)實(shí)踐1.實(shí)驗(yàn)?zāi)康恼莆諒逆I盤為簡單型變量輸入數(shù)據(jù)。掌握使用Scanner類創(chuàng)建一個對象,例如:Scannerreader=newScanner(System.in);學(xué)習(xí)讓reader對象調(diào)用下列方法讀取用戶在命令行(例如,MS-DOS窗口)輸入的各種簡單類型數(shù)據(jù):nextBoolean();nextByte(),nextShort(),nextInt(),nextLong(),nextFloat(),nextDouble()。在調(diào)試程序時,體會上述方法都會堵塞,即程序等待用戶在命令行輸入數(shù)據(jù)回車確認(rèn)。圖3圖3.5從鍵盤輸入數(shù)據(jù)編寫一個Java應(yīng)用程序,在主類的main方法中聲明用于存放產(chǎn)品數(shù)量的int型變量amount和產(chǎn)品單價的float型變量,以及存放全部產(chǎn)品總價值float型變量sum。使用Scanner對象調(diào)用方法讓用戶從鍵盤為amount,price變量輸入值,然后程序計算出全部產(chǎn)品總價值,并輸出amount,prince,sum的值。程序運(yùn)行參考效果如圖3.5所示。3.程序模板請按模板要求,將【代碼】替換為Java程序代碼。InputData.javaimportjava.util.Scanner;publicclassInputData{publicstaticvoidmain(Stringargs[]){Scannerreader=newScanner(System.in);intamount=0;floatprice=0,sum=0;System.out.println("輸入產(chǎn)品數(shù)量(回車確認(rèn)):");【代碼1】//從鍵盤為amount賦值System.out.println("輸入產(chǎn)品單價(回車確認(rèn)):");【代碼2】//從鍵盤為price賦值sum=price*amount;System.out.printf("數(shù)量:%d,單價:%5.2f,總價值:%5.2f",amount,price,sum);}}

4.8上機(jī)實(shí)踐1.實(shí)驗(yàn)?zāi)康谋緦?shí)驗(yàn)的目的是讓學(xué)生使用if~else分支和while循環(huán)語句解決問題。2.實(shí)驗(yàn)要求編寫一個Java應(yīng)用程序,在主類的main方法中實(shí)現(xiàn)下列功能:程序隨機(jī)分配給客戶一個1至100之間的整數(shù)。用戶輸入自己的猜測。程序返回提示信息,提示信息分別是:“猜大了”、“猜小了”和“猜對了”。用戶可根據(jù)提示信息再次輸入猜測,直到提示信息是“猜對了”。程序運(yùn)行參考效果如圖4.14所示。3.程序模板請按模板要求,將【代碼】替換為Java程序代碼。圖4.14猜數(shù)字GreekAlphabet圖4.14猜數(shù)字GuessNumber.javaimportjava.util.Scanner;importjava.util.Random;publicclassGuessNumber{publicstaticvoidmain(Stringargs[]){Scannerreader=newScanner(System.in);Randomrandom=newRandom();System.out.println("給你一個1至100之間的整數(shù),請猜測這個數(shù)");intrealNumber=random.nextInt(100)+1;//random.nextInt(100)是[0,100)中的一個隨機(jī)整數(shù)intyourGuess=0;System.out.print("輸入您的猜測:");yourGuess=reader.nextInt();while(【代碼1】)//循環(huán)條件{if(【代碼2】)//猜大了的條件代碼{System.out.print("猜大了,再輸入你的猜測:");yourGuess=reader.nextInt();}elseif(【代碼3】)//猜小了的條件代碼{System.out.print("猜小了,再輸入你的猜測:");yourGuess=reader.nextInt();}}System.out.println("猜對了!");}}

5.14上機(jī)實(shí)踐1.實(shí)驗(yàn)?zāi)康膱D5.26村莊共享森林圖5.26村莊共享森林本實(shí)驗(yàn)的目的是讓學(xué)生掌握類變量與實(shí)例變量,以及類方法與實(shí)例方法的區(qū)別。。2.實(shí)驗(yàn)要求編寫程序模擬兩個村莊共用擁有一片森林。編寫一個Village類,該類有一個靜態(tài)的int型成員變量treeAmount用于模擬森林中樹木的數(shù)量。在主類MainClass的main方法中創(chuàng)建兩個村莊,一個存在改變了treeAmount的值,另一個村莊查看treeAmount的值。程序運(yùn)行參考效果如圖5.26所示。3.程序模板請按模板要求,將【代碼】替換為Java程序代碼。Village.javaclassVillage{staticinttreeAmount;//模擬森林中樹木的數(shù)量intpeopleNumber;//村莊的人數(shù)Stringname;//村莊的名字Village(Strings){name=s;}voidtreePlanting(intn){treeAmount=treeAmount+n;System.out.println(name+"植樹"+n+"顆");}voidfellTree(intn){if(treeAmount-n>=0){treeAmount=treeAmount-n;System.out.println(name+"伐樹"+n+"顆");}else{System.out.println("無樹木可伐");}}staticintlookTreeAmount(){returntreeAmount;}voidaddPeopleNumber(intn){peopleNumber=peopleNumber+n;System.out.println(name+"增加了"+n+"人");}}MainClass.javapublicclassMainClass{publicstaticvoidmain(Stringargs[]){VillagezhaoZhuang,maJiaHeZhi;zhaoZhuang=newVillage("趙莊");maJiaHeZhi=newVillage("馬家河子");zhaoZhuang.peopleNumber=100;maJiaHeZhi.peopleNumber=150;【代碼1】//用類名Village訪問treeAmount,并賦值200intleftTree=Village.treeAmount;System.out.println("森林中有"+leftTree+"顆樹");【代碼2】//zhaoZhuang調(diào)用treePlanting(intn),并向參數(shù)傳值50leftTree=【代碼3】//maJiaHeZhi調(diào)用lookTreeAmount()方法得到樹木的數(shù)量System.out.println("森林中有"+leftTree+"顆樹");【代碼4】maJiaHeZhi調(diào)用fellTree(intn),并向參數(shù)傳值70leftTree=Village.lookTreeAmount();System.out.println("森林中有"+leftTree+"顆樹");System.out.println("趙莊的人口:"+zhaoZhuang.peopleNumber);zhaoZhuang.addPeopleNumber(12);System.out.println("趙莊的人口:"+zhaoZhuang.peopleNumber);System.out.println("馬家河子的人口:"+maJiaHeZhi.peopleNumber);maJiaHeZhi.addPeopleNumber(10);System.out.println("馬家河子的人口:"+maJiaHeZhi.peopleNumber);}}

6.11上機(jī)實(shí)踐1.實(shí)驗(yàn)?zāi)康纳限D(zhuǎn)型對象可以訪問子類繼承或隱藏的成員變量,也可以調(diào)用子類繼承的方法或子類重寫的實(shí)例方法。上轉(zhuǎn)型對象操作子類繼承的方法或子類重寫的實(shí)例方法,其作用等價于子類對象去調(diào)用這些方法。因此,如果子類重寫了父類的某個實(shí)例方法后,當(dāng)對象的上轉(zhuǎn)型對象調(diào)用這個實(shí)例方法時一定是調(diào)用了子類重寫的實(shí)例方法。本實(shí)驗(yàn)的目的是讓學(xué)生掌握上轉(zhuǎn)型對象的使用,理解不同對象的上轉(zhuǎn)型對象調(diào)用同一方法可能產(chǎn)生不同的行為,即理解上轉(zhuǎn)型對象在調(diào)用方法時可能具有多種形態(tài)(多態(tài))。2.實(shí)驗(yàn)要求(1)編寫一個abstract類,類名為Geometry,該類有一個abstract方法:publicabstractgetArea();(2)編寫Geometry的若干個子類,比如Circle子類和Rect子類。(3)編寫Student類,該類定義一個publicdoublearea(Geometry...p)方法,該方法的參數(shù)是可變參數(shù)(有關(guān)知識點(diǎn)見5.13),即參數(shù)的個數(shù)不確定,但類型都是Geometry。該方法返回參數(shù)計算的面積之和。(4)在主類MainClass的main方法中創(chuàng)建一個Student對象,讓該對象調(diào)用publicdoublearea(Geometry...p)計算若干個矩形和若干個圓的面積之和。程序運(yùn)行參考效果如圖6.14所示。3.程序模板圖6.14計算面積和請按模板要求,將【代碼】替換為圖6.14計算面積和Geometry.javapublicabstractclassGeometry{publicabstractdoublegetArea();}Rect.javapublicclassRectextendsGeometry{doublea,b;Rect(doublea,doubleb){this.a=a;this.b=b;}【代碼1】//重寫getArea()方法,返回矩形面積}Circle.javapublicclassCircleextendsGeometry{doubler;Circle(doubler){this.r=r;}【代碼2】//重寫getArea()方法,返回圓面積}Student.javapublicclassStudent{publicdoublearea(Geometry...p){doublesum=0;for(inti=0;i<p.length;i++){sum=sum+p[i].getArea();}returnsum;}}MainClass.javapublicclassE{publicstaticvoidmain(Stringargs[]){Studentzhang=newStudent();doublearea=zhang.area(newRect(2,3),newCircle(5.2),newCircle(12));System.out.printf("2個圓和1個矩形圖形的面積和:\n%10.3f",area);}}

7.10上機(jī)實(shí)踐1.實(shí)驗(yàn)?zāi)康慕涌诨卣{(diào)是多態(tài)的另一種體現(xiàn),接口回調(diào)是指:可以把使用某一接口的類創(chuàng)建的對象的引用賦給該接口聲明的接口變量中,那么該接口變量就可以調(diào)用被類實(shí)現(xiàn)的接口中的方法,當(dāng)接口變量調(diào)用被類實(shí)現(xiàn)的接口中的方法時,就是通知相應(yīng)的對象調(diào)用接口的方法,這一過程稱為對象功能的接口回調(diào)。所謂面向接口編程,是指當(dāng)設(shè)計某種重要的類時,不讓該類面向具體的類,而是面向接口,即所設(shè)計類中的重要數(shù)據(jù)是接口聲明的變量,而不是具體類聲明的對象。本實(shí)驗(yàn)的目的是讓學(xué)生掌握接口回調(diào)和面向接口編程思想。2.實(shí)驗(yàn)要求小狗在不同環(huán)境條件下可能曾現(xiàn)不同的狀態(tài),小狗通過調(diào)用cry()方法體現(xiàn)自己的當(dāng)前的狀態(tài)。要求用接口封裝小狗的狀態(tài)。具體要求如下。(1)編寫一個接口DogState,該接口有一個名字為voidshowState()的方法。(2)編寫Dog類,該類中有一個DogState接口聲明的變量state。另外,該類有一個cry()方法,在該方法中讓接口state回調(diào)showState()方法。即Dog對象通過cry()方法來體現(xiàn)自己目前的狀態(tài)。(3)編寫若干個實(shí)現(xiàn)DogState接口的類,負(fù)責(zé)刻畫小狗的各種狀態(tài)。(4)編寫主類,在主類中用Dog創(chuàng)建小狗,并讓小狗調(diào)用cry方法體現(xiàn)自己的狀態(tài)。程序運(yùn)行參考效果如圖7.12所示。圖7.12小狗的狀態(tài)圖7.12小狗的狀態(tài)請按模板要求,將【代碼】替換為Java程序代碼。CheckDogState.javainterfaceDogState{publicvoidshowState();}classSoftlyStateimplementsDogState{【代碼1】//重寫publicvoidshowState()}classMeetEnemyStateimplementsDogState{【代碼2】//重寫publicvoidshowState()}classMeetFriendStateimplementsDogState{【代碼3】//重寫publicvoidshowState()}classDog{DogStatestate;publicvoidcry(){state.showState();}publicvoidsetState(DogStates){state=s;}}publicclassE{publicstaticvoidmain(Stringargs[]){DogyellowDog=newDog();yellowDog.setState(newSoftlyState());yellowDog.cry();yellowDog.setState(newMeetEnemyState());yellowDog.cry();yellowDog.setState(newMeetFriendState());yellowDog.cry();}}

8.5上機(jī)實(shí)踐1.實(shí)驗(yàn)?zāi)康腏ava使用try~catch語句來處理異常,將可能出現(xiàn)的異常操作放在try~catch語句的try部分,一旦try部分拋出異常對象,比如調(diào)用某個拋出異常的方法拋出了異常對象,那么,try部分將立刻結(jié)束執(zhí)行,而轉(zhuǎn)向執(zhí)行相應(yīng)的catch部分。本實(shí)驗(yàn)的目的是讓學(xué)生掌握使用try~catch語句。2.實(shí)驗(yàn)要求車站檢查危險品的設(shè)備,如果發(fā)現(xiàn)危險品會發(fā)出警告。編程模擬設(shè)備發(fā)現(xiàn)危險品。(1)編寫一個一個Exception的子類DangerException,該子類可以創(chuàng)建異常對象,該異常對象調(diào)用toShow()方法輸出:"屬于危險品"。(2)編寫一個Machine類,該類的方法checkBag(Goodsgoods)當(dāng)發(fā)現(xiàn)參數(shù)goods是危險品時(即goods的isDanger屬性的值是true時)將拋出DangerException異常。(3)程序在主類的main方法中的try~catch語句的try部分讓Machine類的實(shí)例調(diào)用checkBag(Goodsgoods)方法,一旦發(fā)現(xiàn)危險品,就在try~catch語句的catch部分處理危險品。程序運(yùn)行參考效果如圖8.8所示。3.程序模板請按模板要求,將【代碼】替換為Java程序代碼。圖8.8檢查危險品Check.java圖8.8檢查危險品classGoods{booleanisDanger;Stringname;Goods(Stringname){=name;}publicvoidsetIsDanger(booleanboo){isDanger=boo;}publicbooleanisDanger(){returnisDanger;}publicStringgetName(){returnname;}}classDangerExceptionextendsException{Stringmessage;publicDangerException(){message="危險品!";}publicvoidtoShow(){System.out.print(message+"");}}classMachine{publicvoidcheckBag(Goodsgoods)throwsDangerException{if(goods.isDanger()){DangerExceptiondanger=newDangerException();【代碼1】//拋出danger}}}publicclassCheck{publicstaticvoidmain(Stringargs[]){Machinemachine=newMachine();Goodsapple=newGoods("蘋果");apple.setIsDanger(false);Goodsexplosive=newGoods("炸藥");explosive.setIsDanger(true);try{machine.checkBag(explosive);System.out.println(explosive.getName()+"檢查通過");}catch(DangerExceptione){【代碼2】//e調(diào)用toShow()方法System.out.println(explosive.getName()+"被禁止!");}try{machine.checkBag(apple);System.out.println(apple.getName()+"檢查通過");}catch(DangerExceptione){e.toShow();System.out.println(apple.getName()+"被禁止!");}}}

9.10上機(jī)實(shí)踐1.實(shí)驗(yàn)?zāi)康漠?dāng)分析一個字符串并將字符串分解成可被獨(dú)立使用的單詞時,可以使用java.util包中的StringTokenizer類。當(dāng)我們想分解出字符串的有用的單詞時,可以首先把字符串中不需要的單詞都統(tǒng)一替換為空格或其他字符,比如“*”,然后再使用StringTokenizer類,并用“*”或空格做分隔標(biāo)記分解出所需要的單詞。本實(shí)驗(yàn)的目的是讓學(xué)生掌握StringTokenizer類。圖9.22購物小票的價格2.實(shí)驗(yàn)要求圖9.22購物小票的價格兩張購物小票的內(nèi)容如下。"蘋果56.7圓,香蕉:12圓,芒果:19.8圓";"醬油6.7圓,精鹽:0.8圓,榨菜:9.8圓";編寫程序分別輸出兩張購物小票的價格之和。程序運(yùn)行參考效果如圖9.22所示。3.程序模板上機(jī)調(diào)試模板給出的程序,完成實(shí)驗(yàn)后的練習(xí)。E.javaimportjava.util.*;publicclassE{publicstaticvoidmain(Stringargs[]){Strings1="蘋果:56.7圓,香蕉:12圓,芒果:19.8圓";Strings2="醬油:6.7圓,精鹽:0.8圓,榨菜:9.8圓";ComputePicejisuan=newComputePice();Stringregex="[^0123456789.]+";//匹配所有非數(shù)字字符串Strings1_number=s1.replaceAll(regex,"*");doublepriceSum=pute(s1_number,"*");System.out.printf("\"%s\"價格總和:\n%f圓\n",s1,priceSum);Strings2_number=s2.replaceAll(regex,"#");priceSum=pute(s2_number,"#");System.out.printf("\"%s\"價格總和:\n%f圓\n",s2,priceSum);}}classComputePice{doublecompute(Strings,Stringfenge){StringTokenizerfenxiOne=newStringTokenizer(s,fenge);doublesum=0;doubledigitItem=0;while(fenxiOne.hasMoreTokens()){Stringstr=fenxiOne.nextToken();digitItem=Double.parseDouble(str);sum=sum+digitItem;}returnsum;}}

10.13上機(jī)實(shí)踐1.實(shí)驗(yàn)?zāi)康谋緦?shí)驗(yàn)的目的是讓學(xué)生掌握字符輸入、輸出流以及緩沖輸入、輸出流用法。圖10.11分析成績單2.實(shí)驗(yàn)要求圖10.11分析成績單現(xiàn)在有如下格式的成績單(文本格式)score.txt:姓名:張三,數(shù)學(xué)72分,物理67分,英語70分.姓名:李四,數(shù)學(xué)92分,物理98分,英語88分.姓名:周五,數(shù)學(xué)68分,物理80分,英語77分.要求按行讀入取成績單,并在該行的后面尾加上該同學(xué)的總成績,然后再將該行寫入到一個名字為socreAnalysis.txt的文件中。程序運(yùn)行參考效果如圖10.11所示。3.程序模板請按模板要求,將【代碼】替換為Java程序代碼。AnalysisResult.javaimportjava.io.*;importjava.util.*;publicclassAnalysisResult{publicstaticvoidmain(Stringargs[]){FilefRead=newFile("score.txt");FilefWrite=newFile("socreAnalysis.txt");try{Writerout=【代碼1】//以尾加方式創(chuàng)建指向文件fWrite的out流BufferedWriterbufferWrite=【代碼2】//創(chuàng)建指向out的bufferWrite流Readerin=【代碼3】//創(chuàng)建指向文件fRead的in流BufferedReaderbufferRead=【代碼4】//創(chuàng)建指向in的bufferRead流Stringstr=null;while((str=bufferRead.readLine())!=null){doubletotalScore=Fenxi.getTotalScore(str);str=str+"總分:"+totalScore;System.out.println(str);bufferWrite.write(str);bufferWrite.newLine();}bufferRead.close();bufferWrite.close();}catch(IOExceptione){System.out.println(e.toString());}}}Fenxi.javaimportjava.util.*;publicclassFenxi{publicstaticdoublegetTotalScore(Strings){Scannerscanner=newScanner(s);scanner.useDelimiter("[^0123456789.]+");doubletotalScore=0;while(scanner.hasNext()){try{doublescore=scanner.nextDouble();totalScore=totalScore+score;}catch(InputMismatchExceptionexp){Stringt=scanner.next();}}returntotalScore;}}

11.8上機(jī)實(shí)踐1.實(shí)驗(yàn)?zāi)康奶幚硎录r,要很好地掌握事件源、監(jiān)視器、處理事件的接口之間的關(guān)系。事件源是能夠產(chǎn)生事件的對象,如文本框、按鈕、下拉式列表等。事件源通過調(diào)用相應(yīng)的方法將某個對象作為自己的監(jiān)視器,事件源增加監(jiān)視的方法addXXXListener(XXXListenerlistener)中的參數(shù)是一個接口,listener可以引用任何實(shí)現(xiàn)了該接口的類所創(chuàng)建的對象做為事件源的監(jiān)視器,當(dāng)事件源發(fā)生事件時,接口listener立刻調(diào)用被類實(shí)現(xiàn)的接口中的某個方法,即監(jiān)視器負(fù)責(zé)處理事件源發(fā)生的事件。本實(shí)驗(yàn)?zāi)康氖钦莆仗幚鞟ctionEvent事件。2.實(shí)驗(yàn)要求編寫一個算術(shù)測試小軟件,用來訓(xùn)練小學(xué)生的算術(shù)能力。程序有3個類組成,其中Teacher對象充當(dāng)監(jiān)視器,負(fù)責(zé)給出算術(shù)題目,并判斷回答者的答案是否正確。ComputerFrame對象負(fù)責(zé)為算術(shù)題目提供視圖,比如用戶可以通過ComputerFrame對象提供的GUI界面看到題目,并通過該GUI界面給出題目的答案;MailClass是軟件的主類。程序運(yùn)行參考效果如圖11.20所示。圖1圖11.20算術(shù)測試3.程序模板請按模板要求,將【代碼】替換為Java程序代碼。MainClass.javapublicclassMainClass{publicstaticvoidmain(Stringargs[]){ComputerFrameframe;frame=newComputerFrame();frame.setTitle("算術(shù)測試");frame.setBounds(100,100,650,180);}}ComputerFrame.javaimportjava.awt.*;importjava.awt.event.*;importjavax.swing.*;publicclassComputerFrameextendsJFrame{JMenuBarmenubar;JMenuchoiceGrade;//選擇級別的菜單JMenuItemgrade1,grade2;JTextFieldtextOne,textTwo,textResult;JButtongetProblem,giveAnswer;JLabeloperatorLabel,message;TeacherteacherZhang;ComputerFrame(){teacherZhang=newTeacher();teacherZhang.setMaxInteger(20);setLayout(newFlowLayout());menubar=newJMenuBar();choiceGrade=newJMenu("選擇級別");grade1=newJMenuItem("幼兒級別");grade2=newJMenuItem("兒童級別");grade1.addActionListener(newActionListener(){publicvoidactionPerformed(ActionEvente){teacherZhang.setMaxInteger(10);}});grade2.addActionListener(newActionListener(){publicvoidactionPerformed(ActionEvente){teacherZhang.setMaxInteger(50);}});choiceGrade.add(grade1);choiceGrade.add(grade2);menubar.add(choiceGrade);setJMenuBar(menubar);【代碼1】//創(chuàng)建textOne,其可見字符長是5textTwo=newJTextField(5);textResult=newJTextField(5);operatorLabel=newJLabel("+");operatorLabel.setFont(newFont("Arial",Font.BOLD,20));message=newJLabel("你還沒有回答呢");getProblem=newJButton("獲取題目");giveAnswer=newJButton("確認(rèn)答案");add(textOne);add(operatorLabel);add(textTwo);add(newJLabel("="));add(textResult);add(giveAnswer);add(message);add(getProblem);textResult.requestFocus();textOne.setEditable(false);textTwo.setEditable(false);getProblem.setActionCommand("getProblem");textResult.setActionCommand("answer");giveAnswer.setActionCommand("answer");teacherZhang.setJTextField(textOne,textTwo,textResult);teacherZhang.setJLabel(operatorLabel,message);【代碼2】//將teacherZhang注冊為getProblem的ActionEvent事件監(jiān)視器【代碼3】//將teacherZhang注冊為giveAnswer的ActionEvent事件監(jiān)視器【代碼4】//將teacherZhang注冊為textResult的ActionEvent事件監(jiān)視器setVisible(true);validate();setDefaultCloseOperation(DISPOSE_ON_CLOSE);}}Teacher.javaimportjava.util.Random;importjava.awt.event.*;importjavax.swing.*;publicclassTeacherimplementsActionListener{intnumberOne,numberTwo;Stringoperator="";booleanisRight;Randomrandom;//用于給出隨機(jī)數(shù)intmaxInteger;//題目中最大的整數(shù)JTextFieldtextOne,textTwo,textResult;JLabeloperatorLabel,message;Teacher(){random=newRandom();}publicvoidsetMaxInteger(intn){maxInteger=n;}publicvoidactionPerformed(ActionEvente){Stringstr=e.getActionCommand();if(str.equals("getProblem")){numberOne=random.nextInt(maxInteger)+1;//1至maxInteger之間的隨機(jī)數(shù);numberTwo=random.nextInt(maxInteger)+1;doubled=Math.random();//獲取(0,1)之間的隨機(jī)數(shù)if(d>=0.5)operator="+";elseoperator="-";textOne.setText(""+numberOne);textTwo.setText(""+numberTwo);operatorLabel.setText(operator);message.setText("請回答");textResult.setText(null);}elseif(str.equals("answer")){Stringanswer=textResult.getText();try{intresult=Integer.parseInt(answer);if(operator.equals("+")){if(result==numberOne+numberTwo)message.setText("你回答正確");elsemessage.setText("你回答錯誤");}elseif(operator.equals("-")){if(result==numberOne-numberTwo)message.setText("你回答正確");elsemessage.setText("你回答錯誤");}}catch(NumberFormatExceptionex){message.setText("請輸入數(shù)字字符");}}}publicvoidsetJTextField(JTextField...t){textOne=t[0];textTwo=t[1];textResult=t[2];}publicvoidsetJLabel(JLabel...label){operatorLabel=label[0];message=label[1];}}

12.8上機(jī)實(shí)踐1.實(shí)驗(yàn)?zāi)康漠?dāng)Java程序包含圖形用戶界面(GUI)時,Java虛擬機(jī)在運(yùn)行應(yīng)用程序時會自動啟動更多的線程,其中有兩個重要的線程:AWT-EventQuecue和AWT-Windows。AWT-EventQuecue線程負(fù)責(zé)處理GUI事件。AWT-EventQuecue線程負(fù)責(zé)處理GUI事件,AWT-Windows線程負(fù)責(zé)將窗體或組件繪制到桌面。JVM要保證各個線程都有使用CPU資源的機(jī)會,比如,程序中發(fā)生GUI界面事件時,JVM就會將CPU資源切換給AWT-EventQuecue線程,AWT-EventQuecue線程就會來處理這個事件,比如,你單擊了程序中的按鈕,觸發(fā)ActionEvent事件,AWT-EventQuecue線程就立刻排隊等候執(zhí)行處理事件的代碼。本試驗(yàn)的目的是掌握在GUI中使用Thread的子類創(chuàng)建線程。2.實(shí)驗(yàn)要求編寫一個Java應(yīng)用程序,在主線程中再創(chuàng)建一個Frame類型的窗口,在該窗口中再創(chuàng)建一個線程giveWord。線程giveWord每隔2秒中給出一個漢字,用戶使用一種漢字輸入法將該漢字輸入到文本框中。程序運(yùn)行效果如圖12.12圖12.12打字練習(xí)圖12.12打字練習(xí)3.程序模板請按模板要求,將【代碼】替換為Java程序代碼。ThreadWordMainClass.javapublicclassThreadWordMainClass{publicstaticvoidmain(Stringargs[]){newThreadFrame().setTitle("漢字打字練習(xí)");}}WordThread.javaimportjavax.swing.JTextField;publicclassWordThreadextendsThread{charword;intstartPosition=19968;//Unicode表的19968位置至32320上的漢字intendPosition=32320;JTextFieldshowWord;intsleepLength=6000;publicvoidsetJTextField(JTextFieldt){showWord=t;showWord.setEditable(false);}publicvoidsetSleepLength(intn){sleepLength=n;}publicvoidrun(){intk=startPosition;while(true){word=(char)k;showWord.setText(""+word);try{【代碼1】//調(diào)用sleep方法使得線程中斷sleepLength豪秒}catch(InterruptedExceptione){}k++;if(k>=endPosition)k=startPosition;}}}ThreadFrame.javaimportjava.awt.*;importjava.awt.event.*;importjavax.swing.*;publicclassThreadFrameextendsJFrameimplementsActionListener{JTextFieldshowWord;JButtonbutton;JTextFieldinputText,showScore;【代碼2】//用WordThread聲明一個giveWord線程象intscore=0;ThreadFrame(){showWord=newJTextField(6);showWord.setFont(newFont("",Font.BOLD,72));showWord.setHorizontalAlignment(JTextField.CENTER);【代碼3】//創(chuàng)建giveWord線程giveWord.setJTextField(showWord);giveWord.setSleepLength(5000);button=newJButton("開始");inputText=newJTextField(10);showScore=newJTextField(5);showScore.setEditable(false);button.addActionListener(this);inputText.addActionListener(this);add(button,BorderLayout.NORTH);add(showWord,BorderLayout.CENTER);JPanelsouthP=newJPanel();southP.add(newJLabel("輸入漢字(回車):"));southP.add(inputText);southP.add(showScore);add(southP,BorderLayout.SOUTH);setBounds(100,100,350,180);setVisible(true);validate();setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);}publicvoidactionPerformed(ActionEvente){if(e.getSource()==button){if(!(giveWord.isAlive())){【代碼4】//創(chuàng)建giveWordgiveWord.setJTextField(showWord);giveWord.setSleepLength(5000);}try{【代碼5】//giveWord調(diào)用方法start()}catch(Exceptionexe){}}elseif(e.getSource()==inputText){if(inputText.getText().equals(showWord.getText()))score++;showScore.setText("得分:"+score);inputText.setText(null);}}}

13.6上機(jī)實(shí)踐1.實(shí)驗(yàn)?zāi)康耐ㄟ^實(shí)踐體會網(wǎng)絡(luò)套接字是基于TCP協(xié)議的的有連接通信,套接字連接就是客戶端的套接字對象和服務(wù)器端的套接字對象通過輸入、輸出流連接在一起。熟悉怎樣在服務(wù)器建立ServerSocket對象,并讓ServerSocket對象負(fù)責(zé)等待客戶端請求建立套接字連接。熟悉而客戶端怎樣建立Socket對象、向服務(wù)器發(fā)出套接字連接請求。2.實(shí)驗(yàn)要求客戶端和服務(wù)器建立套接字連接后,客戶將如下格式的賬單發(fā)送給服務(wù)器:"房租:2189元水費(fèi):112.9元電費(fèi):569元物業(yè)費(fèi):832元"服務(wù)器返回給客戶的信息是:您的賬單:"房租:2189元水費(fèi):112.9元電費(fèi):569元物業(yè)費(fèi):832元總計:3699.9元程序運(yùn)行效果。3.程序模板請按模板要求,將【代碼】替換為Java程序代碼??蛻舳四0澹篊lientItem.javaimportjava.io.*;import.*;importjava.util.*;publicclassClientItem{publicstaticvoidmain(Stringargs[]){Scannerscanner=newScanner(System.in);SocketclientSocket=null;DataInputStreaminData=null;DataOutputStreamoutData=null;Threadthread;Readread=null;try{clientSocket=newSocket();read=newRead();thread=newThread(read);//負(fù)責(zé)讀取信息的線程System.out.print("輸入服務(wù)器的IP:");StringIP=scanner.nextLine();System.out.print("輸入端口號:");intport=scanner.nextInt();Stringenter=scanner.nextLine();//消耗回車if(clientSocket.isConnected()){}else{InetAddressaddress=InetAddress.getByName(IP);InetSocketAddresssocketAddress=newInetSocketAddress(address,port);clientSocket.connect(socketAddress);InputStreamin=【代碼1】//clientSocket調(diào)用getInputStream()返回輸入流OutputStreamout=【代碼2】//clientSocket調(diào)用getOutputStream()返回輸出流inData=newDataInputStream(in);outData=newDataOutputStream(out);read.setDataInputStream(inData);read.setDataOutputStream(outData);thread.start();//啟動負(fù)責(zé)讀信息的線程}}catch(Exceptione){System.out.println("服務(wù)器已斷開"+e);}}}classReadimplementsRunnable{Scannerscanner=newScanner(System.in);DataInputStreamin;DataOutputStreamout;publicvoidsetDataInputStream(DataInputStreamin){this.in=in;}publicvoidsetDataOutputStream(DataOutputStreamout){this.out=out;}publicvoidrun(){System.out.println("輸入賬單:");Stringcontent=scanner.nextLine();try{out.writeUTF("賬單"+content);Stringstr=in.readUTF();System.out.println(str);str=in.readUTF();System.out.println(str);str=in.readUTF();System.out.println(str);}catch(Exceptione){}}}服務(wù)器端模板:ServerItem.javaimportjava.io.*;import.*;importjava.util.*;publicclassServerItem{publicstaticvoidmain(Stringargs[]){ServerSocketserver=null;ServerThreadthread;Socketyou=null;while(true){try{server=【代碼3】//創(chuàng)建在端口4331上負(fù)責(zé)監(jiān)聽的ServerSocket對象}catch(IOExceptione1){System.out.println("正在監(jiān)聽");}try{System.out.println("正在等待客戶");you=【代碼4】//server調(diào)用accept()返回和客戶端相連接的Socket對象System.out.println("客戶的地址:"+you.getInetAddress());}catch(IOExceptione){System.out.println(""+e);}if(you!=null){newServerThread(you).start();}}}}classServerThreadextendsThread{Socketsocket;DataInputStreamin=null;DataOutputStreamout=null;ServerThread(Sockett){socket=t;try{out=newDataOutputStream(socket.getOutputStream());in=newDataInputStream(socket.getInputStream());}catch(IOExceptione){}}publicvoidrun(){try{Stringitem=in.readUTF();Scannerscanner=newScanner(item);scanner.useDelimiter("[^0123456789.]+");if(item.startsWith("賬單")){doublesum=0;while(scanner.hasNext()){try{doubleprice=scanner.nextDouble();sum=sum+price;System.out.println(price);}catch(InputMismatchExceptionexp){Stringt=scanner.next();}}out.writeUTF("您的賬單:");out.writeUTF(item);out.writeUTF("總額:"+sum+"元");}}catch(Exceptionexp){}}}

14.9上機(jī)實(shí)踐1.實(shí)驗(yàn)?zāi)康恼莆者B接內(nèi)置Derby數(shù)據(jù)庫的步驟,已經(jīng)怎樣操作數(shù)據(jù)庫中的表。2.實(shí)驗(yàn)要求(1)首先檢查是否已經(jīng)將Java安裝目錄\db\lib(例如E:\jdk1.8\db\lib)下的derby.jar復(fù)制到Java運(yùn)行環(huán)境的擴(kuò)展中,即將該jar文件存放在JDK安裝目錄的\jre\lib\ext文件夾中。(2)編寫一個Java應(yīng)用程序,負(fù)責(zé)連接到名字是employee的內(nèi)置Derby數(shù)據(jù)庫,并在數(shù)據(jù)庫中建立名字是salary的表,該表的字段結(jié)構(gòu)是:numberchar(20)primarykeynotnullmoneydouble然后該程序再負(fù)責(zé)向salary表中插入記錄。程序運(yùn)行參考效果如圖14.13。(3)在編寫一個Java應(yīng)用程序,負(fù)責(zé)連接到名字是employee的內(nèi)置Derby數(shù)據(jù)庫,并隨機(jī)查詢salary表中的10條記錄,計算這10條記錄的中money字段值的平均值(即平均工資)。程序運(yùn)行參考效果如圖14.14所示。14.13輸入記錄14.13輸入記錄14.14隨機(jī)抽取記錄14.14隨機(jī)抽取記錄3.程序模板請按模板要求,將【代碼】替換為Java程序代碼。程序1:E.javaimportjava.util.*;importjava.sql.*;publicclassE{publicstaticvoidmain(Stringargs[]){try{Class.forName("org.apache.derby.jdbc.EmbeddedDriver"

溫馨提示

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

評論

0/150

提交評論