版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、第九章 異常在Java應(yīng)用程序中,異常處理是保證程序正常、可靠運(yùn)行的一個重要方面,在前邊已經(jīng)遇到了簡單的異常處理。本章實(shí)驗(yàn)將主要針對程序中常用的異常的處理及異常的應(yīng)用。9.1 實(shí)驗(yàn)一:異常處理及應(yīng)用實(shí)驗(yàn)?zāi)康?1). 了解異常的基本概念、異常的的產(chǎn)生和異常處理的過程。 (2). 基本掌握異常在應(yīng)用程序中的應(yīng)用。實(shí)驗(yàn)要求編寫應(yīng)用程序,在程序中對常見的異常進(jìn)行捕捉并作相應(yīng)的處理。實(shí)驗(yàn)內(nèi)容實(shí)驗(yàn)示例9.1.1 在上一章8.2.1的實(shí)驗(yàn)示例測試中,若沒有輸入答案或輸入非數(shù)字字符,則在處理過程中會出現(xiàn)數(shù)據(jù)格式異常,修改實(shí)驗(yàn)示例8.2.1創(chuàng)建的Exercises類,添加捕獲并處理異常的程序代碼。實(shí)現(xiàn)該示例的步
2、驟如下: 簡要分析根據(jù)題意,首先需要確定會產(chǎn)生異常的程序段,然后使用trycatch結(jié)構(gòu)進(jìn)行捕捉和處理異常地處理。由于主要處理數(shù)據(jù)格式異常,它由輸入時的錯誤引起,所以,在處理異常時,就是返回到輸入處,重新輸入數(shù)據(jù)。 根據(jù)上述簡要分析,給出如下修改后的參考程序代碼(Exercise.java):/*這是一個小學(xué)生綜合訓(xùn)練題測試的應(yīng)用程序 *程序的名稱:Exercise.java *程序中捕捉處理數(shù)據(jù)格式異常(NumberFormatException) */import java.awt.*;import java.awt.event.*;import java.util.*;import ja
3、vax.swing.*;public class Exercises extends StudentScreen implements ActionListener,KeyListener int count = 0; int n1=0,n2=0; int total=0; int right=0; long timenum=0; Random rand=new Random(); public Exercises(int total) this.total=total; num1.setText(""+rand.nextInt(100); num2.setText(&qu
4、ot;"+rand.nextInt(100); info.setText("測試題目數(shù):"+total+"道"); answer.setEnabled(false); /在沒開始答題之前,不得答題 start.addActionListener(this); next.addActionListener(this); next.addKeyListener(this); answer.addKeyListener(this); /*ActionListener接口方法實(shí)現(xiàn)*/ public void actionPerformed(Action
5、Event e) if(e.getSource()=start) start.setEnabled(false); /使開始按鈕失效 answer.setEnabled(true); /開始答題 answer.requestFocus(); count=right=0; n1=rand.nextInt(100); n2=rand.nextInt(100); num1.setText(""+n1); num2.setText(""+n2); timenum=System.currentTimeMillis();else if(e.getSource()=n
6、ext) compute(); /調(diào)用compute()成員方法 /*KeyListener接口方法實(shí)現(xiàn)*/ public void keyPressed(KeyEvent e) /當(dāng)按一個鍵時調(diào)用它 if(e.getKeyCode()!=e.VK_ENTER) return; /如果不是按了Enter鍵,則不處理 compute(); /調(diào)用compute()成員方法 public void keyReleased(KeyEvent ke) /當(dāng)一個鍵被釋放時調(diào)用它 /*當(dāng)需要時,輸入相關(guān)處理代碼*/ public void keyTyped(KeyEvent ke) /當(dāng)輸入一個字符鍵時調(diào)
7、用它 /*當(dāng)需要時,輸入相關(guān)處理代碼*/ /*成員方法設(shè)置運(yùn)算符*/ public void setOperator() /設(shè)置運(yùn)算符方法 if(n1>50&&n2>50) if(n1<n2)op.setText("+");/n1,n2>50,n1<n2進(jìn)行加法運(yùn)算 else op.setText("-") ; / n1>n2進(jìn)行減法運(yùn)算 else if(n1>50) if(n2>10) op.setText("-"); /n1>50,n2>10進(jìn)行減法運(yùn)算
8、else op.setText("/"); / n1>50,n2<10進(jìn)行除法運(yùn)算else if(n2>50) if(n1>10) op.setText("+"); /n2>50,n1>10進(jìn)行加法運(yùn)算 else op.setText("*"); /n2>50,n1<=10進(jìn)行乘法運(yùn)算else if(n1>n2&&n2<10) op.setText("/"); / n1>n2,n2<10進(jìn)行除法運(yùn)算else if(n1<1
9、0|n2<10) op.setText("*"); /n1<=10或n2<=10 進(jìn)行乘法運(yùn)算else op.setText("+"); /其他進(jìn)行加法運(yùn)算 /*成員方法:運(yùn)算及答案處理*/ public void compute() float x=0; /定義變量try /本題正確結(jié)果的計算與實(shí)際答題結(jié)果的比較 if(op.getText().equals("+") x=n1+n2; else if(op.getText().equals("-") x=n1-n2; else if(op.ge
10、tText().equals("*") x=n1*n2; else if(op.getText().equals("/") x=n1/n2; if(x=Float.parseFloat(answer.getText() right+;catch(NumberFormatException e) JOptionPane.showMessageDialog(null,"數(shù)據(jù)格式錯誤,請重新輸入數(shù)據(jù)!"); answer.requestFocus(); return; catch(Exception e1) JOptionPane.show
11、MessageDialog(null,e1.toString(); return; count+;if(count=total) /測試結(jié)束 JOptionPane.showMessageDialog(null,"總題目數(shù)"+total+"答對"+right+"道,花費(fèi)時間"+(System.currentTimeMillis()-timenum)/1000+"秒!"); System.exit(0); n1=rand.nextInt(100)+1; /產(chǎn)生下一題 n2=rand.nextInt(100)+1; n
12、um1.setText(""+n1);num2.setText(""+n2);setOperator(); /設(shè)置運(yùn)算符號answer.setText("");answer.requestFocus(); 編譯Exercise.java程序,生成Exercise.class類文件,以供其他應(yīng)用程序所用。 程序及分析在compute()方法中使用了trycatch結(jié)構(gòu)捕捉并處理可能出現(xiàn)的數(shù)據(jù)格式異常 (NumberFormatException)和其他異常(Exception),當(dāng)在結(jié)果欄中沒有輸入內(nèi)容或輸入非數(shù)字字符按“Enter”鍵
13、或單擊“下一題”按鈕時,獲取結(jié)果欄中的字符串并將它轉(zhuǎn)換為數(shù)值時會產(chǎn)生數(shù)據(jù)格式異常(NumberFormatException),處理的辦法是使用對話框提示錯誤信息,并定位到結(jié)果欄讓訓(xùn)練者重新輸入題目答案。 編寫測試程序,測試Exercise類的功能。測試程序代碼如下:import javax.swing.*;public class TestExercises extends JFrame TestExercises() add(new Exercises(30); /選30道題進(jìn)行訓(xùn)練 setVisible(true); pack(); setDefaultCloseOperation(3)
14、; public static void main(String args) new TestExercises(); 9-1a 選擇測試題目數(shù)對話框 9-1b 答題屏幕界面 編譯并運(yùn)行測試程序,會出現(xiàn)如圖9-1a的對話框,單擊“開始”按鈕,進(jìn)入如圖9-1b的答題界面,可以輸入題目答案,然后按“Enter”或單擊“下一題”按鈕進(jìn)入下一題,若在答題時沒輸入答案或輸入非數(shù)字字符,則會出現(xiàn)如圖9-1c的消息對話框,此時,可單擊“確定”按鈕,返回到應(yīng)答欄,重新輸入應(yīng)答數(shù)據(jù)。最后在完成答題后,會出現(xiàn)如圖9-1d的結(jié)果對話框。 9-1c 異常信息對話框 9-1d 結(jié)果信息對話框圖9-2 實(shí)驗(yàn)示例屏幕界面自
15、由練習(xí)9.1 修改上一章自由練習(xí)8.1建立的輸入學(xué)生信息程序,捕捉并處理當(dāng)輸入入學(xué)成績時的數(shù)據(jù)錯誤。實(shí)驗(yàn)示例9.1.2 編寫程序,實(shí)現(xiàn)如圖9-2的用戶界面,完成一個簡單的計算器應(yīng)用程序。要求:可以進(jìn)行+、=、*、/四種運(yùn)算;為了操作方便,輸入運(yùn)算數(shù)后按“Enter”鍵連續(xù)進(jìn)行下一數(shù)運(yùn)算,并保留用鼠標(biāo)單擊“下一個”按鈕連續(xù)進(jìn)行下一數(shù)運(yùn)算;并要求輸入的運(yùn)算數(shù)在01000之間。按“清零”按鈕,結(jié)束當(dāng)前的運(yùn)算過程,開始一個新的運(yùn)算。實(shí)現(xiàn)該示例的步驟如下: 簡要分析和實(shí)驗(yàn)示例類似,使用awt和swing的組件(JLabel、JTextField、JPanel、JBurron等)構(gòu)建用戶界面。實(shí)現(xiàn)Acti
16、onListener接口完成按鈕的功能;建立一個繼承KeyAdapter適配器類的內(nèi)部類KeyPressListener,在類中重寫 keyPressed()方法完成按鍵功能的實(shí)現(xiàn),同樣只需關(guān)注“Enter”鍵。為保證輸入的運(yùn)算數(shù)在01000之間,可以使用自定義異常實(shí)現(xiàn),對輸入01000之外的數(shù)據(jù)將視為數(shù)據(jù)超界。 根據(jù)上述簡要分析,給出如下參考程序代碼。首先給出自定義異常類:class DefException extends Exception DefException() /構(gòu)造方法 super("數(shù)據(jù)超界錯誤!"); public String toString()
17、/返回信息方法 return "數(shù)據(jù)超界錯誤!要求數(shù)字范圍01000之間!" 計算器應(yīng)用程序代碼如下:/*這是一個簡單的計算器應(yīng)用程序 *程序的名稱:Calculator.java */import java.util.*;import java.awt.*;import java.awt.event.*;import javax.swing.*;public class Calculator extends JFrame implements ActionListener float f1=0; float f2=0; JLabel num1=new JLabel(&qu
18、ot;"); Choice op=new Choice(); JTextField num2=new JTextField(10); JLabel result=new JLabel(); JButton ok = new JButton("下一個"); JButton next = new JButton("清零"); JButton exit = new JButton("退出");JPanel jp1=new JPanel();JPanel jp2=new JPanel();public Calculator() th
19、is.setTitle("簡單計算器應(yīng)用"); this.setLayout(new GridLayout(3,1); this.add(new JLabel("請選擇運(yùn)算并輸入運(yùn)算數(shù):"); op.add("+"); op.add("-"); op.add("*"); op.add("/"); jp1.add(num1); jp1.add(op); jp1.add(num2); jp1.add(result); jp2.add(ok); jp2.add(next); jp2
20、.add(exit); this.add(jp1); this.add(jp2); ok.addActionListener(this); /委托監(jiān)聽對象 ok.addKeyListener(new KeyPressListener(); / op.addKeyListener(new KeyPressListener();/ num2.addKeyListener(new KeyPressListener();/ next.addActionListener(this); /委托監(jiān)聽對象 exit.addActionListener(this); this.pack(); this.setV
21、isible(true); this.setDefaultCloseOperation(this.EXIT_ON_CLOSE); num2.requestFocus();/*判斷數(shù)據(jù)是否合法*/public boolean isNumber() throws DefException try f2=Float.parseFloat(num2.getText(); /獲取運(yùn)算數(shù) catch(NumberFormatException e) JOptionPane.showMessageDialog(null,"數(shù)據(jù)格式錯誤,請重新輸入數(shù)據(jù)!"); num2.requestFo
22、cus(); return false; catch(Exception e1) JOptionPane.showMessageDialog(null,e1.toString(); return false; if(f2<=0|f2>1000) throw new DefException(); return true;/*成員方法:運(yùn)算處理*/public void compute() try if(!isNumber() num2.requestFocus(); return; catch(DefException e2) /處理自定義異常 JOptionPane.showMe
23、ssageDialog(null,e2.toString(); num2.requestFocus(); return; switch (op.getSelectedIndex() case 0: f1=f1+f2; break; case 1: f1=f1-f2; break; case 2: f1=f1*f2; break; case 3: f1=f1/f2; break; num1.setText(""+f1); result.setText(" = "+f1); num2.setText(""); op.requestFocu
24、s();/*ActionListener接口方法*/public void actionPerformed(ActionEvent e) if(e.getSource()=ok) compute(); /執(zhí)行成員方法,繼續(xù)下一數(shù)運(yùn)算 else if(e.getSource()=next) /清零,開始新的運(yùn)算 f1=0; num1.setText(""); num2.setText(""); result.setText(""); op.select(0); num1.requestFocus(); else if(e.getSource()=exit) this.dispose(); /結(jié)束程序/*添加內(nèi)部類KeyPressListener*/class KeyPressListener extends KeyAdapter public void keyPressed(KeyEvent e) /鍵盤按下事件 if(e.getKeyCode()!=e.VK_EN
溫馨提示
- 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 【正版授權(quán)】 ISO 14880-2:2024 EN Optics and photonics - Microlens arrays - Part 2: Test methods for wavefront aberrations
- DB12T 578-2015 液化氣體汽車罐車用緊急切斷閥檢驗(yàn)方法與評定要求
- 新學(xué)期學(xué)習(xí)計劃范文匯編6篇
- 智能運(yùn)輸系統(tǒng) 體系結(jié)構(gòu) 服務(wù) 編制說明
- 全國連鎖洗衣店分布簡報 2024 -洗衣行業(yè)如何搶占商機(jī) 來看這份連鎖洗衣店選址布局
- 春節(jié)期間通信保障方案
- 雪房子課件教學(xué)課件
- 部編版歷史九年級上冊第六單元 第17課《君主立憲制的英國》說課稿
- 高壓電工作業(yè)題庫
- 寶安區(qū)重點(diǎn)中學(xué)七年級上學(xué)期語文期中考試試卷
- 犟龜-完整版獲獎?wù)n件
- 工業(yè)產(chǎn)品CAD技能三級試題及其評分標(biāo)準(zhǔn)
- 多元統(tǒng)計分析習(xí)題及解答
- 漢語詞性專題練習(xí)(附答案)
- 勞動合同-高管補(bǔ)充協(xié)議20110520
- 浙江省溫州市地圖矢量PPT模板(圖文)
- 上海市建設(shè)工程項(xiàng)目管理機(jī)構(gòu)管理人員情況表
- 北師大版二年級數(shù)學(xué)上冊第九單元《除法》知識點(diǎn)梳理復(fù)習(xí)ppt
- 空氣能室外機(jī)保養(yǎng)維護(hù)記錄表
- DB37∕T 5162-2020 裝配式混凝土結(jié)構(gòu)鋼筋套筒灌漿連接應(yīng)用技術(shù)規(guī)程
- 9-2 《第三方過程評估淋蓄水檢查內(nèi)容》(指引)
評論
0/150
提交評論