版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
Java程序設(shè)計(jì)精編教程(第3版)上機(jī)實(shí)踐
1.7上機(jī)實(shí)踐
i.實(shí)驗(yàn)?zāi)康?/p>
本實(shí)驗(yàn)的目的是讓學(xué)生掌握開發(fā)Java應(yīng)用程序的三個(gè)步驟:編寫源文件、編譯源文件
和運(yùn)行應(yīng)用程序
2.實(shí)驗(yàn)要求
編寫一個(gè)簡(jiǎn)單的Java應(yīng)用程序,該程序在命令行窗口輸出兩行文字:“你好,很高興學(xué)
習(xí)Java"和"Wearestudents"
3.程序模板
請(qǐng)按模板要求,將【代碼】替換為Java程序代碼。
Hello.java
publicclassHello{
publicstaticvoidmain(Stringargs[]){
【代碼1】〃命令行窗口輸出”你好,很高興學(xué)習(xí)Java”
Studentzhang=newStudent();
zhang.speak();
)
)
classStudent{
voidspeak(){
【代碼2】〃命令行窗口輸出"Wearestudents"
2.8上機(jī)實(shí)踐
1.實(shí)驗(yàn)?zāi)康?/p>
熟悉Java應(yīng)用程序的基本結(jié)構(gòu),并能聯(lián)合編譯應(yīng)用程序所需要的類。
2.實(shí)驗(yàn)要求
編寫3個(gè)源文件:MainClass.java>A.java和B.java,每個(gè)源文件只有一個(gè)類。
MainClass.java含有應(yīng)用程序的主類(含有main方法),并使用了A和B。將3個(gè)源文件保
存到同一目錄中,例如c:\1000,然后編譯MainClass.java。程序運(yùn)行參考效果如圖2.8所示。
3.程序模板
請(qǐng)按模板要求,將【代碼】替換為Java程序代碼。
C:\1000>javacMainClass.jaua
MainClass.java
C:M000>javaMainClass
publicclassMainClass{你好,只需編譯我
IamA
publicstaticvoidmain(Stringargs[]){IamB
【代碼1】〃命令行窗口輸出”你好,只需編譯我”圖2.8只編譯主類
Aa=newA();
a.fA();
Bb=newB();
b.fB();
)
)
A.java
publicclassA{
voidfA(){
[代碼2]〃命令行窗口輸出"IamA"
)
)
B.java
publicclassB{
voidfB(){
[代碼3]〃命令行窗口輸出“IamB”
3.5上機(jī)實(shí)踐
1.實(shí)驗(yàn)?zāi)康?/p>
掌握從鍵盤為簡(jiǎn)單型變量輸入數(shù)據(jù)。掌握使用Scanner類創(chuàng)建一個(gè)對(duì)象,例如:
Scannerreader=newScanner(System.in);
學(xué)習(xí)讓reader對(duì)象調(diào)用下列方法讀取用戶在命令行(例如,MS-DOS窗口)輸入的各種簡(jiǎn)
單類型數(shù)據(jù):
nextBoolean();nextByte(),nextShort(),nextInt(),nextLong(),nextFloat(),nextDouble()o
在調(diào)試程序時(shí),體會(huì)上述方法都會(huì)堵塞,即程序等待用戶在命令行輸入數(shù)據(jù)回車確認(rèn)。
2.實(shí)驗(yàn)要求
D:\1000>javaInputData
編寫一個(gè)應(yīng)用程序,在主類的方法中聲
Javamain輸入產(chǎn)品數(shù)量(回車確認(rèn)):
明用于存放產(chǎn)品數(shù)量的int型變量amount和產(chǎn)品單價(jià)的46
輸入產(chǎn)品單價(jià)(回車確認(rèn)):
float型變量,以及存放全部產(chǎn)品總價(jià)值float型變量sumo
25.67
使用Scanner對(duì)象調(diào)用方法讓用戶從鍵盤為數(shù)量:46,單價(jià):25.67,總價(jià)值:1180.82
amount,price變量輸入值,然后程序計(jì)算出全部產(chǎn)品圖3.5從鍵盤輸入數(shù)據(jù)
總價(jià)值,并輸出amount,prince,sum的值。程序運(yùn)行
參考效果如圖3.5所示。
3.程序模板
請(qǐng)按模板要求,將【代碼】替換為Java程序代碼。
InputData.java
importjava.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)品單價(jià)(回車確認(rèn)):”);
[代碼2]〃從鍵盤為price賦值
sum=price*amount;
System.outprintf("數(shù)量:%d,單價(jià):%5.2f,總價(jià)值:%5.2f',amount,price,sum);
4.8上機(jī)實(shí)踐
1.實(shí)驗(yàn)?zāi)康?/p>
本實(shí)驗(yàn)的目的是讓學(xué)生使用if~else分支和while循環(huán)語句解決問題。
2.實(shí)驗(yàn)要求
編寫一個(gè)Java應(yīng)用程序,在主類的main方法中實(shí)現(xiàn)下列功能:
?程序隨機(jī)分配給客戶一個(gè)1至100之間的整數(shù)。
?用戶輸入自己的猜測(cè)。
?程序返回提示信息,提示信息分別是:“猜大了”、“猜小了”和“猜對(duì)了”。
?用戶可根據(jù)提示信息再次輸入猜測(cè),直到提示信息是“猜對(duì)了”。
程序運(yùn)行參考效果如圖4.14所示。
3.程序模板
請(qǐng)按模板要求,將【代碼】替換為Java程序代碼。
GreekAlphabet』ava
給你一個(gè)1至10。之間的整數(shù),請(qǐng)猜測(cè)這個(gè)數(shù)
輸入您的猜測(cè):50
GuessNumber.java猜大了,再輸入你的猜測(cè):25
豬小了,再輸入你的猜測(cè):36
importjava.util.Scanner;猜大了,再輸入你的猜測(cè):30
猜大了,再輸入你的猜測(cè):27
猜大了,再輸入你的猜測(cè):26
importjava.util.Random;際對(duì)了!
圖4.14猜數(shù)字
publicclassGuessNumber{
publicstaticvoidmain(Stringargs[]){
Scannerreader=newScanner(System.in);
Randomrandom=newRandom();
System.out.println("給你一個(gè)1至100之間的整數(shù),請(qǐng)猜測(cè)這個(gè)數(shù))
intrealNumber=random.nextlnt(100)+1;//random.nextInt(100)^[0,100)一個(gè)隨機(jī)整數(shù)
intyourGuess=0;
System.out.print("輸入您的猜測(cè):");
yourGuess=reader.nextlnt();
while(【代碼1】)〃循環(huán)條件
if([代碼2])〃猜大了的條件代碼
System.out.print("猜大了,再輸入你的猜測(cè)
yourGuess=reader.nextlnt();
1
elseif(【代碼3])〃猜小了的條件代碼
(
System.out.print("猜小了,再輸入你的猜測(cè)
yourGuess=reader.nextlnt();
)
)
System.out.println。猜對(duì)了!)
5.14上機(jī)實(shí)踐
1.實(shí)驗(yàn)?zāi)康?/p>
類變量是與類相關(guān)聯(lián)的數(shù)據(jù)變量,而實(shí)例變量是僅僅和對(duì)象相關(guān)聯(lián)的數(shù)據(jù)變量。不同的
對(duì)象的實(shí)例變量將被分配不同的內(nèi)存空間,如果類中有類變量,那么所有對(duì)象的這個(gè)類變
量都分配給相同的一處內(nèi)存,改變其中一個(gè)對(duì)象的這個(gè)類變量會(huì)影響其它對(duì)象的這個(gè)類變
量。也就是說,對(duì)象共享類變量。類中的方法可以操作成員變量,當(dāng)對(duì)象調(diào)用方法時(shí),方
法中出現(xiàn)的成員變量就是指分配給該對(duì)象的變量,方法中出現(xiàn)的類變量也是該對(duì)象的變量,
只不過這個(gè)變量和所有的其他對(duì)象共享而已。實(shí)例方法可操作實(shí)例成員變量和靜態(tài)成員變
量,靜態(tài)方法只能操作靜態(tài)成員變量。
本實(shí)驗(yàn)的目的是讓學(xué)生掌握類變量與實(shí)例變量,以及類
森林中有200顆樹
方法與實(shí)例方法的區(qū)別。。趙莊植樹50顆
森林中有250顆樹
3家河字槐樹70顆
2.實(shí)驗(yàn)要求
森林中有180顆樹
編寫程序模擬兩個(gè)村莊共用擁有一片森林。編寫一個(gè)趙莊的人口:100
趙莊增加了12人
Village類,該類有一個(gè)靜態(tài)的int型成員變量treeAmount用趙莊的人口:112
百家河子的人口:150
于模擬森林中樹木的數(shù)量。在主類MainClass的main方法中馬家河子增加了1。人
馬家河字的入口:160
創(chuàng)建兩個(gè)村莊,一個(gè)存在改變了treeAmount的值,另一個(gè)村
圖5.26村莊共享森林
莊查看treeAmount的值。程序運(yùn)行參考效果如圖5.26所示。
3.程序模板
請(qǐng)按模板要求,將【代碼】替換為Java程序代碼。
Village.java
classVillage{
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.java
publicclassMainClass{
publicstaticvoidmain(Stringargs[]){
VillagezhaoZhuang,maJiaHeZhi;
zhaoZhuang=newVillage("趙莊)
maJiaHeZhi=newVillage("馬家河子”);
zhaoZhuang.peopleNumber=100;
maJiaHeZhi.peopleNumber=150;
【代碼1】〃用類名Village訪問treeAmount,并賦值200
intleftTree=Village.treeAmount;
System.out.println("森林中有,'+leftTree+n顆樹”);
[代碼2]//zhaoZhuang調(diào)用treePlanting(intn),并向參數(shù)傳值50
leftTree=[代碼3]//maJiaHeZhi調(diào)用lookTreeAmount。方法得到樹木的數(shù)量
System.out.println("森林中有"+leftTree+"顆樹");
[代碼4]maJiaHeZhi調(diào)用fellTree(intn),并向參數(shù)傳值70
leftTree=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("馬家河子的人n:"+maJiaHeZhi.peopleNumber);
6.11上機(jī)實(shí)踐
1.實(shí)驗(yàn)?zāi)康?/p>
上轉(zhuǎn)型對(duì)象可以訪問子類繼承或隱藏的成員變量,也可以調(diào)用子類繼承的方法或子類
重寫的實(shí)例方法。上轉(zhuǎn)型對(duì)象操作子類繼承的方法或子類重寫的實(shí)例方法,其作用等價(jià)于
子類對(duì)象去調(diào)用這些方法。因此,如果子類重寫了父類的某個(gè)實(shí)例方法后,當(dāng)對(duì)象的上轉(zhuǎn)
型對(duì)象調(diào)用這個(gè)實(shí)例方法時(shí)一定是調(diào)用了子類重寫的實(shí)例方法。本實(shí)驗(yàn)的目的是讓學(xué)生掌
握上轉(zhuǎn)型對(duì)象的使用,理解不同對(duì)象的上轉(zhuǎn)型對(duì)象調(diào)用同一方法可能產(chǎn)生不同的行為,即
理解上轉(zhuǎn)型對(duì)象在調(diào)用方法時(shí)可能具有多種形態(tài)(多態(tài))。
2.實(shí)驗(yàn)要求
(1)編寫一個(gè)abstract類,類名為Geometry,該類有一個(gè)abstract方法:
publicabstractgetAreaQ;
(2)編寫Geometry的若干個(gè)子類,比如Circle子類和Rect子類。
(3)編寫Student類,該類定義一個(gè)publicdoublearea(Geometry...p)方法,該方法的參
數(shù)是可變參數(shù)(有關(guān)知識(shí)點(diǎn)見5.13),即參數(shù)的個(gè)數(shù)不確定,但類型都是Geometry。該方法
返回參數(shù)計(jì)算的面積之和。
(4)在主類MainClass的main方法中創(chuàng)建一個(gè)Student對(duì)象,讓該對(duì)象調(diào)用publicdouble
area(Geometry...p)計(jì)算若干個(gè)矩形和若干個(gè)圓的面積之和。程序運(yùn)行參考效果如圖6.14所
zj\O
3.程序模板
請(qǐng)按模板要求,將【代碼】替換為Java程序代碼。
Geometry.java2個(gè)圓和1不矩形圖形的面積和:
publicabstractclassGeometry{
publicabstractdoublegetArea();圖6.14計(jì)算面積和
}
Rectjava
publicclassRectextendsGeometry{
doublea,b;
Rect(doublea,doubleb){
this.a=a;
this.b=b;
)
【代碼1】〃重寫getArea()方法,返回矩形面積
)
Circle.java
publicclassCircleextendsGeometry{
doubler;
Circle(doubler){
this.r=r;
1
【代碼2】〃重寫getArea。方法,返回圓面積
1
Student.java
publicclassStudent{
publicdoublearea(Geometry...p){
doublesum=0;
for(inti=O;i<p.length;i++){
sum=sum+p[i].getArea();
)
returnsum;
)
1
MainClass.java
publicclassE{
publicstaticvoidmain(Stringargs[]){
Studentzhang二newStudent();
doublearea二
zhang.area(newRect(2,3),newCircle(5.2),newCircle(12));
System.out.printf("2個(gè)圓和1個(gè)矩形圖形的面積和:\n%10.3f,,area);
7.10上機(jī)實(shí)踐
1.實(shí)驗(yàn)?zāi)康?/p>
接口回調(diào)是多態(tài)的另一種體現(xiàn),接口回調(diào)是指:可以把使用某一接口的類創(chuàng)建的對(duì)象的
引用賦給該接口聲明的接口變量中,那么該接口變量就可以調(diào)用被類實(shí)現(xiàn)的接口中的方法,
當(dāng)接口變量調(diào)用被類實(shí)現(xiàn)的接口中的方法時(shí),就是通知相應(yīng)的對(duì)象調(diào)用接口的方法,這一
過程稱為對(duì)象功能的接口回調(diào)。所謂面向接口編程,是指當(dāng)設(shè)計(jì)某種重要的類時(shí),不讓該
類面向具體的類,而是面向接口,即所設(shè)計(jì)類中的重要數(shù)據(jù)是接口聲明的變量,而不是具
體類聲明的對(duì)象。本實(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)編寫一個(gè)接口DogState,該接口有一個(gè)名字為voidshowState。的方法。
(2)編寫Dog類,該類中有一個(gè)DogState接口聲明的變量state。另外,該類有一個(gè)
cry()方法,在該方法中讓接口state回調(diào)showState。方法。即Dog對(duì)象通過cry()方法來體現(xiàn)
自己目前的狀態(tài)。
(3)編寫若干個(gè)實(shí)現(xiàn)DogState接口的類,負(fù)責(zé)刻畫小狗的各種狀態(tài)。
(4)編寫主類,在主類中用Dog創(chuàng)建小狗,并讓小狗調(diào)用cry方法體現(xiàn)自己的狀態(tài)。
程序運(yùn)行參考效果如圖7.12所示。
3.程序模板
在主人面前,聽主人的命令
請(qǐng)按模板要求,將【代碼】替換為Java程序代碼。
遇到敵人狂叫,并沖向去很咬敵人
CheckDogState.java遇到朋友晃動(dòng)尾巴,表示歡迎
interfaceDogState{圖7.12小狗的狀態(tài)
publicvoidshowState();
classSoftlyStateimplementsDogState{
【代碼1】〃重寫publicvoidshowStateQ
classMeetEnemyStateimplementsDogState{
[代碼2]〃重寫publicvoidshowState()
)
classMeetFriendStateimplementsDogState{
[代碼3]〃重寫publicvoidshowState()
)
classDog{
DogStatestate;
publicvoidcry(){
state,showState();
1
publicvoidsetState(DogStates){
state=s;
1
)
publicclassE{
publicstaticvoidmain(Stringargs[]){
DogyellowDog=newDog();
yellowDog.setState(newSoftlyState());
yellowDog.cry();
yellowDog.setState(newMeetEnemyState());
yellowDog.cryO;
yellowDog.setState(newMeetFriendState());
yellowDog.cry();
)
8.5上機(jī)實(shí)踐
1.實(shí)驗(yàn)?zāi)康?/p>
Java使用try~catch語句來處理異常,將可能出現(xiàn)的異常操作放在try-catch語句的try
部分,一旦try部分拋出異常對(duì)象,比如調(diào)用某個(gè)拋出異常的方法拋出了異常對(duì)象,那么,
try部分將立刻結(jié)束執(zhí)行,而轉(zhuǎn)向執(zhí)行相應(yīng)的catch部分。本實(shí)驗(yàn)的目的是讓學(xué)生掌握使用
try~catch語句。
2.實(shí)驗(yàn)要求
車站檢查危險(xiǎn)品的設(shè)備,如果發(fā)現(xiàn)危險(xiǎn)品會(huì)發(fā)出警告。編程模擬設(shè)備發(fā)現(xiàn)危險(xiǎn)品。
(1)編寫一個(gè)一個(gè)Exception的子類DangerException,該子類可以創(chuàng)建異常對(duì)象,該
異常對(duì)象調(diào)用toShow()方法輸出:”屬于危險(xiǎn)品"。
(2)編寫一個(gè)Machine類,該類的方法checkBag(Goodsgoods)當(dāng)發(fā)現(xiàn)參數(shù)goods是危
險(xiǎn)品時(shí)(即goods的isDanger屬性的值是true時(shí))將拋出DangerException異常。
(3)程序在主類的main方法中的try~catch語句的try部分讓Machine類的實(shí)例調(diào)用
checkBag(Goodsgoods)方法,一旦發(fā)現(xiàn)危險(xiǎn)品,就在try-catch語句的catch部分處理危險(xiǎn)品。
程序運(yùn)行參考效果如圖8.8所示。
3.程序模板
請(qǐng)按模板要求,將【代碼】替換為Java程序代碼。
Check.java危險(xiǎn)品!炸藥被禁止!
蘋果檢查通過
classGoods{
booleanisDanger;圖8.8檢查危險(xiǎn)品
Stringname;
Goods(Stringname){
=name;
publicvoidsetIsDanger(booleanboo){
isDanger=boo;
publicbooleanisDanger(){
returnisDanger;
publicStringgetName(){
returnname;
classDangerExceptionextendsException{
Stringmessage;
publicDangerExceptionQ{
message="危險(xiǎn)品!";
publicvoidtoShow(){
System.out.print(message+"");
)
)
classMachine{
publicvoidcheckBag(Goodsgoods)throwsDangerException{
if(goods.isDanger()){
DangerExceptiondanger=newDangerException();
[代碼1]〃拋出danger
)
)
)
publicclassCheck{
publicstaticvoidmain(Stringargs[]){
Machinemachine二newMachine();
Goodsapple=newGoods("蘋果)
apple.setlsDanger(false);
Goodsexplosive二newGoods,炸藥");
explosive.setlsDanger(true);
try(
machine.checkBag(explosive);
System.out.println(explosive.getName()+”檢查通過)
1
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.outprintln(apple.getName()+"被禁止!");
)
1
9.10上機(jī)實(shí)踐
1.實(shí)驗(yàn)?zāi)康?/p>
當(dāng)分析一個(gè)字符串并將字符串分解成可被獨(dú)立使用的單詞時(shí),可以使用java.util包中的
StringTokenizer類。當(dāng)我們想分解出字符串的有用的單詞時(shí),可以首先把字符串中不需要的
單詞都統(tǒng)一替換為空格或其他字符,比如“*”,然后再使用StringTokenizer類,并用“*”
或空格做分隔標(biāo)記分解出所需要的單詞。本實(shí)驗(yàn)的目的是讓學(xué)生掌握StringTokenizer類。
2.實(shí)驗(yàn)要求
"蘋果56.7圓,12圓,芒果:19.8圓”價(jià)格總和:
兩張購物小票的內(nèi)容如下。88.500000圓
“醬油6.7圓,精鹽:0.8圓,榨菜:9.8圓“價(jià)格總和:
”蘋果56.7圓,香蕉:12圓,芒果:19.8圓”;17.300000圖
圖9.22購物小票的價(jià)格
”醬油6.7圓,精鹽:0.8圓,榨菜98圓”;
編寫程序分別輸出兩張購物小票的價(jià)格之和。程序運(yùn)行參考效果如圖9.22所示。
3.程序模板
上機(jī)調(diào)試模板給出的程序,完成實(shí)驗(yàn)后的練習(xí)。
E.java
importjava.util.*;
publicclassE{
publicstaticvoidmain(Stringargs[]){
Stringsi="蘋果:56.7圓,香蕉:12圓,芒果:19.8圓";
Strings2二”醬油:6.7圓,精鹽:0.8圓,榨菜:9.8圓”;
ComputePicejisuan=newComputePice();
Stringregex=”「0123456789.]+”;〃匹配所有非數(shù)字字符串
Stringsl_number=s1.replaceAll(regex,"*'*);
doublepriceSum=jpute(s1_number,'**'*);
System.out.printf("\"%s\"價(jià)格總和:\n%f圓\n",si,priceSum);
Strings2_number=s2.replaceAll(regex,"#");
priceSum=jisuan.compute(s2_number,"#");
System.out.printf("\"%s\"價(jià)格總和:\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+digitltem;
)
returnsum;
10.13上機(jī)實(shí)踐
1.實(shí)驗(yàn)?zāi)康?/p>
本實(shí)驗(yàn)的目的是讓學(xué)生掌握字符輸入、輸出流以及緩沖輸入、輸出流用法。
2.實(shí)驗(yàn)要求
現(xiàn)在有如下格式的成績(jī)單(文本格式)score.txt:姓名漲三,教物分,物豳知英南吩總分:電0
姓名郭,數(shù)學(xué)92分,物理98%英醐分.總分:278.0
姓名:張三,數(shù)學(xué)72分,物理67分,英語70分.姓名闊五,數(shù)翔分,物豳知英曲盼,總分:225,0
姓名:李四,數(shù)學(xué)92分,物理98分,英語88分.圖10.11分析成績(jī)單
姓名:周五,數(shù)學(xué)68分,物理80分,英語77分.
要求按行讀入取成績(jī)單,并在該行的后面尾加上該同學(xué)的總成績(jī),然后再將該行寫入到
一個(gè)名字為socreAnalysis.txt的文件中。程序運(yùn)行參考效果如圖10.11所示。
3.程序模板
請(qǐng)按模板要求,將【代碼】替換為Java程序代碼。
AnalysisResult.java
importjava.io.*;
importjava.util.*;
publicclassAnalysisResult{
publicstaticvoidmain(Stringargs[]){
FilefRead=newFile("score.txt");
FilefWrite=newFileCsocreAnalysis.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();
1
catch(IOExceptione){
System.out.println(e.toStringO);
1
Fenxi.java
importjava.util.*;
publicclassFenxi{
publicstaticdoublegetTotalScore(Strings){
Scannerscanner=newScanner(s);
scanner.useDelimiter("[A0123456789.]+");
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)康?/p>
處理事件時(shí),要很好地掌握事件源、監(jiān)視器、處理事件的接口之間的關(guān)系。事件源是能
夠產(chǎn)生事件的對(duì)象,如文本框、按鈕、下拉式列表等。事件源通過調(diào)用相應(yīng)的方法將某個(gè)
對(duì)象作為自己的監(jiān)視器,事件源增加監(jiān)視的方法addXXXListener(XXXListenerlistener)中的
參數(shù)是一個(gè)接口,listener可以引用任何實(shí)現(xiàn)了該接口的類所創(chuàng)建的對(duì)象做為事件源的監(jiān)視
器,當(dāng)事件源發(fā)生事件時(shí),接口listener立刻調(diào)用被類實(shí)現(xiàn)的接口中的某個(gè)方法,即監(jiān)視器
負(fù)責(zé)處理事件源發(fā)生的事件。本實(shí)驗(yàn)?zāi)康氖钦莆仗幚鞟ctionEvent事件。
2.實(shí)驗(yàn)要求
編寫一個(gè)算術(shù)測(cè)試小軟件,用來訓(xùn)練小學(xué)生的算術(shù)能力。程序有3個(gè)類組成,其中
Teacher對(duì)象充當(dāng)監(jiān)視器,負(fù)責(zé)給出算術(shù)題目,并判斷回答者的答案是否正確。ComputerFrame
對(duì)象負(fù)責(zé)為算術(shù)題目提供視圖,比如用戶可以通過ComputerFrame對(duì)象提供的GUI界面看
到題目,并通過該GUI界面給出題目的答案;MailClass是軟件的主類。程序運(yùn)行參考效果
如圖11.20所示。
3.程序模板
請(qǐng)按模板要求,將【代碼】替換為Java程序代碼。
MainClass.java
publicclassMainClass{
publicstaticvoidmain(Stringargs[]){
ComputerFrameframe;
frame=newComputerFrame();
frame.setTitle("算術(shù)測(cè)試”);
frame.setBounds(100,100,650,180);
)
)
ComputerFrame.java
importjava.awt.*;
importjava.awt.event.*;
importjavax.swing.*;
publicclassComputerFrameextendsJFrame{
JMenuBarmenubar;
JMenuchoiceGrade;//選擇級(jí)別的菜單
JMenuItemgradel,grade2;
JTextFieldtextOne,textTwo,textResult;
JButtongetProblem,giveAnswer;
JLabeloperatorLabel,message;
TeacherteacherZhang;
ComputerFrame(){
teacherZhang=newTeacher();
teacherZhang.setMaxInteger(20);
setLayout(newFlowLayout());
menubar=newJMenuBar();
choiceGrade=newJMenu("選擇級(jí)別");
grade1=newJMenuItem("幼兒級(jí)另lj");
grade2=newJMenuItem("兒童級(jí)另『');
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,其可見字符長(zhǎng)是5
textTwo=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(ngetProblem");
textResult.setActionCommand("answer");
giveAnswer.setActionCommand("answer");
teacherZhang.setJTextField(textOne,textTwo,textResult);
teacherZhang.setJLabel(operatorLabel,message);
【代碼2】〃將teacherZhang注冊(cè)為getProblem的ActionEvent事件監(jiān)視器
[代碼3]〃將teacherZhang注冊(cè)為giveAnswer的ActionEvent事件監(jiān)視器
[代碼4]〃將teacherZhang注冊(cè)為textResult的ActionEvent事件監(jiān)視器
setVisible(true);
validate();
setDefaultCloseOperation(DISPOSE_ON_CLOSE);
)
)
Teacher.java
importjava.util.Random;
importjava.awt.event.*;
importjavax.swing.*;
publicclassTeacherimplementsActionListener{
intnumberOne,numberTwo;
Stringoperator="n;
booleanisRight;
Randomrandom;〃用于給出隨機(jī)數(shù)
intmaxinteger;〃題目中最大的整數(shù)
JTextFieldtextOne,textTwo,textResult;
JLabeloperatorLabel,message;
TeacherQ{
random=newRandom();
publicvoidsetMaxInteger(intn){
maxlnteger=n;
)
publicvoidactionPerfbrmed(ActionEvente){
Stringstr=e.getActionCommand();
if(str.equals("getProblem")){
numberOne=random.nextlnt(maxlnteger)+1;//1至maxinteger之間的隨機(jī)數(shù);
numberTwo=random.nextInt(maxInteger)+1;
doubled=Math.random();//獲取(0,1)之間的隨機(jī)數(shù)
if(d>=0.5)
operator="+";
else
operator="-n;
textOne.setText(""+numberOne);
textTwo.setText("n+numberTwo);
operatorLabel.setText(operator);
message.setText("請(qǐng)回答)
textResult.setText(null);
)
elseif(str.equals("answer")){
Stringanswer=textResult.getText();
try{intresult=lnteger.parselnt(answer);
if(operator.equals("+")){
if(result==numberOne+numberTwo)
message.setText("你回答正確)
else
message.setText("你回答錯(cuò)誤");
)
elseif(operator.equals("-")){
if(result==numberOne-numberTwo)
message.setText("你回答正確)
else
message.setText("你回答錯(cuò)誤");
)
catch(NumberFormatExceptionex){
message.setText("請(qǐng)輸入數(shù)字字符)
publicvoidsetJTextField(JTextField...t){
textOne=t[0];
textTwo=t[l];
textResult=t[2];
)
publicvoidsetJLabel(JLabel...label){
operatorLabel=label[0];
message=label[1];
12.8上機(jī)實(shí)踐
1.實(shí)驗(yàn)?zāi)康?/p>
當(dāng)Java程序包含圖形用戶界面(GUI)時(shí),Java虛擬機(jī)在運(yùn)行應(yīng)用程序時(shí)會(huì)自動(dòng)啟動(dòng)
更多的線程,其中有兩個(gè)重要的線程:AWT-EventQuecue和AWT-Windows。
AWT-EventQuecue線程負(fù)責(zé)處理GUI事件。AWT-EventQuecue線程負(fù)責(zé)處理GUI事件,
AWT-Windows線程負(fù)責(zé)將窗體或組件繪制到桌面。JVM要保證各個(gè)線程都有使用CPU資
源的機(jī)會(huì),比如,程序中發(fā)生GUI界面事件時(shí),JVM就會(huì)將CPU資源切換給
AWT-EventQuecue線程,AWT-EventQuecue線程就會(huì)來處理這個(gè)事件,比如,你單擊了程
序中的按鈕,觸發(fā)ActionEvent事件,AWT-EventQuecue線程就立刻排隊(duì)等候執(zhí)行處理事件
的代碼。本試驗(yàn)的目的是掌握在GUI中使用Thread的子類創(chuàng)建線程。
2.實(shí)驗(yàn)要求
編寫一個(gè)Java應(yīng)用程序,在主線程中再創(chuàng)建一個(gè)Frame類型的窗口,在該窗口中再創(chuàng)
建一個(gè)線程giveWord。線程giveWord每隔2秒中給出一個(gè)漢字,用戶使用一種漢字輸入法
將該漢字輸入到文本框中。程序運(yùn)行效果如圖12.12
圖12.12打字練習(xí)
3.程序模板
請(qǐng)按模板要求,將【代碼】替換為Java程序代碼。
ThreadWordMainClass.java
publicclassThreadWordMainClass{
publicstaticvoidmain(Stringargs[]){
newThreadFrame().setTitle("漢字打字練習(xí)");
)
)
WordThread.java
importjavax.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("n+word);
try{【代碼1]〃調(diào)用sleep方法使得線程中斷sleepLength豪秒
)
catch(InterruptedExceptione){}
k++;
if(k>=endPosition)
k=startPosition;
)
)
)
ThreadFrame.java
importjava.awt.*;
importjava.awt.event.*;
importjavax.swing.*;
publicclassThreadFrameextendsJFrameimplementsActionListener{
JTextFieldshowWord;
JButtonbutton;
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 二項(xiàng)式定理知識(shí)點(diǎn)課件
- 2026年鐘山縣清塘鎮(zhèn)人民政府公開招聘?jìng)淇碱}庫員備考題庫及一套參考答案詳解
- 醫(yī)院法律法規(guī)培訓(xùn)課件
- 2025至2030中國(guó)土壤修復(fù)技術(shù)比較與項(xiàng)目實(shí)施案例研究報(bào)告
- 2025至2030中國(guó)腦機(jī)接口醫(yī)療應(yīng)用倫理審查與臨床試驗(yàn)規(guī)范研究
- 2025至2030中國(guó)人工智能芯片行業(yè)市場(chǎng)現(xiàn)狀技術(shù)突破及商業(yè)化應(yīng)用前景分析研究報(bào)告
- iso質(zhì)量環(huán)境安全貫標(biāo)課件
- 2026年雄安未來產(chǎn)業(yè)技術(shù)研究院(事業(yè)單位)招聘44人備考題庫有答案詳解
- 2025至2030鈉離子電池產(chǎn)業(yè)化進(jìn)程評(píng)估及儲(chǔ)能系統(tǒng)替代機(jī)會(huì)研究報(bào)告
- 2025至2030文化娛樂市場(chǎng)發(fā)展分析及前景趨勢(shì)與消費(fèi)行為研究報(bào)告
- 2025年高中語文必修上冊(cè)《登泰山記》文言文對(duì)比閱讀訓(xùn)練(含答案)
- 2025年金蝶AI蒼穹平臺(tái)新一代企業(yè)級(jí)AI平臺(tái)報(bào)告-
- 2025中國(guó)機(jī)械工業(yè)集團(tuán)有限公司(國(guó)機(jī)集團(tuán))社會(huì)招聘19人筆試參考題庫附答案
- 淺析煤礦巷道快速掘進(jìn)技術(shù)
- 成人留置導(dǎo)尿標(biāo)準(zhǔn)化護(hù)理與并發(fā)癥防控指南
- 2025年勞動(dòng)關(guān)系協(xié)調(diào)師綜合評(píng)審試卷及答案
- CIM城市信息模型技術(shù)創(chuàng)新中心建設(shè)實(shí)施方案
- 班級(jí)互動(dòng)小游戲-課件共30張課件-小學(xué)生主題班會(huì)版
- 2025至2030全球及中國(guó)智慧機(jī)場(chǎng)建設(shè)行業(yè)發(fā)展趨勢(shì)分析與未來投資戰(zhàn)略咨詢研究報(bào)告
- 2025年二級(jí)造價(jià)師《土建工程實(shí)務(wù)》真題卷(附解析)
- 智慧農(nóng)業(yè)管理中的信息安全對(duì)策
評(píng)論
0/150
提交評(píng)論