Java語言是面向對象的、跨平臺的、支持分布式和多線程的優(yōu)秀編程語言。本書是Java語言程序設計的上機指導教程,以Java SE 8為平臺,從解決實際問題、多學科交叉問題和復雜工程問題等三個角度為切入點,由淺入深、循序漸進地進行實踐案例的設計。 全書共設計13次實驗。實驗0介紹了Java開發(fā)環(huán)境和程序調試技術;實驗1~實驗11分別為Java運行初步、順序結構程序設計、分支結構程序設計、循環(huán)結構程序設計、類與對象、數(shù)組、常用類的使用、繼承與多態(tài)、異常處理、輸入輸出流、集合類的使用;實驗12設計了5個綜合設計案例。 本書實驗1~實驗11中的每個實驗均劃分了多個知識點;每個知識點都設計了練習題和自測題;每個實驗均設計了對應的綜合練習。從練習題、自測題、綜合練習題到綜合設計案例,難度依次增加,由淺入深逐步提升讀者的問題分析及解決能力。所有示例均在jdk1.8.0_181 Eclipse Mars Release(4.5.0)環(huán)境下測試通過。 本書可以作為高等院校Java程序設計類課程的上機指導教材,也可作為廣大工程技術人員和程序設計愛好者的自學教材。
全書共設計13次實驗。實驗0介紹了Java開發(fā)環(huán)境和程序調試技術;實驗1~11分別為Java運行初步、順序結構程序設計、分支結構程序設計、循環(huán)結構程序設計、類與對象、數(shù)組、常用類的 使用、繼承與多態(tài)、異常處理、輸入輸出流、集合類的使用;實驗12設計了5個綜合設計案例。
Java語言是面向對象的、跨平臺的、支持分布式和多線程的優(yōu)秀編程語言,具有極強的擴展性。國內高校在計算機及相關專業(yè)廣泛開設了Java程序設計相關課程。上機實踐是學習程序設計語言不可或缺的環(huán)節(jié),旨在鍛煉學生的實際編程能力,培養(yǎng)學生使用計算機語言解決實際問題的思維習慣和求解能力。本書是結合Java語言學習的實際需要和編者多年的教學經驗而編寫的上機實踐教程,也是《Java語言程序設計》(李莉編著,清華大學出版社2018年8月出版)的配套上機指導用書。
本書的內容編排遵循由淺入深、循序漸進的原則,從實際問題求解入手,在概述Java程序開發(fā)之后,將Java上機內容劃分為Java運行初步、順序結構程序設計、分支結構程序設計、循環(huán)結構程序設計、類與對象、數(shù)組、常用類的使用、繼承與多態(tài)、異常處理、輸入輸出流、集合類的使用等11個模塊。每個模塊又細分為多個知識點和該模塊綜合設計。每個知識點設計有練習題和自測題,其中練習題提供了設計思路分析和代碼實現(xiàn),自測題則對該知識點進行加深擴展、強化訓練,并將該知識點應用在實際問題求解中。本書在后設計了5個綜合性案例,以培養(yǎng)學生利用計算機知識來解決不同專業(yè)問題的意識和能力。
本書具有以下特色。
1. 內容編排合理、新穎
本書的主體內容編排以模塊知識點案例三級結構為主線,結構更加細化,學生可以更加高效地針對特定知識點進行練習。本書的后設置了綜合設計案例,以鍛煉學生綜合應用所學知識解決復雜問題的能力。全書的編排結構如下所示。
本教材各模塊知識點知識點練習題自測題知識點模塊綜合練習綜合練習題綜合設計綜合設計案例
2. 案例設計融合不同學科領域問題
本書在設計案例時注重融合不同學科的知識,如金融存貸款計算、信息加密、DNA序列分析、材料晶粒演變過程模擬等,有意識地引導學生應用計算機工具來解決特定學科問題,形成學生對專業(yè)知識的初步認知和對程序知識工具性的理解,有助于學生能在之后的專業(yè)研究和行業(yè)工作中,主動、有效地利用計算機相關技術去解決復雜的實際工程問題。
Java語言程序設計上機教程目錄3. 案例設計融入現(xiàn)代信息領域的前沿技術
本書在設計案例時注重融入現(xiàn)代信息領域的前沿技術,如圖像卷積運算和空域濾波,中文分詞與詞頻分析,多元線性回歸,有意識地引導學生接觸先進信息技術,消除學生對于前沿信息技術的神秘感和畏懼感,有利于學生在以后的專業(yè)學習和工作中將先進信息技術應用到傳統(tǒng)領域中。
4. 綜合設計案例提升實踐內容的復雜性
本書在后設計了5個綜合設計案例,均具有較強的專業(yè)學科知識背景,其求解過程均涉及多個類的設計、較為復雜的計算模型或計算過程,學生需要綜合應用課程各模塊知識進行整體設計和實現(xiàn),形成整體性思維和設計的綜合能力。
本書中實驗0~實驗11由李莉編寫,實驗12由李莉和汪紅兵編寫。全書由李莉負責審核和統(tǒng)稿。李新宇、宋晏和張磊參與了本書部分案例的編寫和全書的校對。
感謝各位審稿專家對于本書的編排給出寶貴意見。本書的編寫得到了北京科技大學教材建設經費和全國高等院校計算機基礎教育研究會計算機基礎教育教學研究項目的資助,在此一并表示感謝。
由于編者水平有限,加之時間倉促,書中難免有疏漏之處,敬請廣大讀者批評指正。
編者2022年2月
李莉,女,副教授,碩士生導師,中國計算機學會會員,北京科技大學計通學院教師,長期從事計算機基礎教學工作,承擔和參與了多項省部級及校級教育教學改革項目,從事自然語言處理、圖像處理等科研領域的研究工作。
實驗0Java程序開發(fā)概述/1
0.1Java開發(fā)環(huán)境簡介1
0.2JDK核心開發(fā)工具1
0.2.1安裝JDK1
0.2.2JDK根目錄結構1
0.2.3配置JDK2
0.2.4在JDK環(huán)境中編譯和運行Java程序4
0.3Java集成開發(fā)環(huán)境Eclipse5
0.3.1安裝Eclipse5
0.3.2Eclipse中程序的組織結構5
0.3.3Eclipse中開發(fā)Java程序6
0.4程序調試技術8
0.4.1程序調試簡介9
0.4.2在Eclipse中調試程序9
小結20
實驗1Java運行初步/21
1.1簡單數(shù)據(jù)處理示例21
練習題11: 三角函數(shù)求值21
自測題11: 基本算術運算22
1.2輸入輸出示例22
練習題12: 輸入與輸出22
自測題12: 輸入數(shù)據(jù)進行計算23
1.3字符串處理示例23
練習題13: 提取文件名23
自測題13: 提取目錄24
1.4簡單類的設計示例24
練習題14: 圓形類24
自測題14: 矩形類25
1.5簡單圖形界面程序示例25Java語言程序設計上機教程目錄 練習題15: GUI處理名字25
自測題15: GUI處理學號27
1.6Java小程序示例27
練習題16: Java小程序示例27
實驗2順序結構程序設計/29
2.1數(shù)據(jù)的輸入與輸出29
練習題21: I/O示例29
自測題21: 輸入個人信息30
2.2算術運算符的應用30
練習題22: 計算弧長30
自測題22: 計算面積和周長31
自測題23: 計算BMI31
自測題24: 數(shù)字分拆31
2.3關系與條件運算符的應用31
練習題23: 較大數(shù)31
自測題25: 計算點距32
2.4邏輯運算符的應用32
練習題24: 判斷閏年32
自測題26: 構建三角形33
自測題27: 適宜溫度33
2.5字符串連接運算符33
練習題25: 員工數(shù)據(jù)拼接33
自測題28: 計算點距34
2.6數(shù)據(jù)類型轉換34
練習題26: 字符與編碼34
自測題29: 大小寫轉換35
自測題210: 計算利息35
2.7順序結構程序設計綜合35
自測題211: 函數(shù)求值35
自測題212: 找零錢36
自測題213: 單向加密36
實驗3分支結構程序設計/38
3.1單分支if語句的應用38
練習題31: 大小寫轉換38
練習題32: 單分支結構求值39
自測題31: 面試資格篩選40
3.2雙分支if語句的應用40
練習題33: 合法三角形判斷40
自測題32: 直角三角形判斷41
自測題33: 幻燈片打印41
3.3多分支if語句的應用41
練習題34: 年齡分類41
自測題34: 數(shù)位計算42
自測題35: 獎金計算42
3.4if語句嵌套43
練習題35: 點的象限判斷43
自測題36: 數(shù)字排序44
自測題37: 日期合法性判斷44
3.5switch語句的應用44
練習題36: 星期計算44
自測題38: 查詢水果價格45
自測題39: 成績分級46
3.6分支結構程序設計綜合46
自測題310: 工資計算46
自測題311: 地鐵票價計算46
實驗4循環(huán)結構程序設計/47
4.1while、dowhile、for語句的基本應用47
練習題41: 輾轉相除法求公約數(shù)47
練習題42: 不定次循環(huán)的求和49
練習題43: 數(shù)字各位之和50
自測題41: 彈球高度51
自測題42: 整數(shù)逆序51
自測題43: 數(shù)的因子51
自測題44: 求N51
4.2循環(huán)嵌套52
練習題44: 九九乘法表52
自測題45: 完全數(shù)53
4.3循環(huán)跳轉53
練習題45: 窮舉法求公約數(shù)53
自測題46: 統(tǒng)計選票55
4.4基于循環(huán)實現(xiàn)數(shù)值計算55
自測題47: 倒數(shù)之和55
自測題48: 萊布尼茨公式55
自測題49: 完全平方數(shù)55
4.5基于循環(huán)實現(xiàn)求解值56
練習題46: 求值56
自測題410: 比賽計分57
4.6基于循環(huán)實現(xiàn)窮舉法57
練習題47: 判斷素數(shù)57
自測題411: 紙幣換算59
自測題412: 愛因斯坦數(shù)學題59
自測題413: 選球問題59
自測題414: 程序破案60
4.7基于循環(huán)實現(xiàn)圖形輸出60
練習題48: 倒三角圖形60
自測題415: 數(shù)字金字塔61
自測題416: 空心菱形62
4.8基于循環(huán)實現(xiàn)迭代62
練習題49: 猴子吃桃子62
自測題417: 斐波那契數(shù)列63
自測題418: 分數(shù)序列63
自測題419: 角谷猜想64
4.9循環(huán)結構程序設計綜合64
自測題420: 泰勒展開式64
自測題421: 騎士的金幣65
自測題422: 抽簽比賽65
自測題423: 猜數(shù)游戲65
自測題424: 定積分計算65
實驗5類與對象/67
5.1類的設計67
練習題51: 學生類v167
自測題51: 簡易計算器68
自測題52: 電視機類69
自測題53: 股票類v169
5.2創(chuàng)建對象與構造方法70
練習題52: 學生類v270
自測題54: 矩形類v173
自測題55: 股票類v273
5.3方法的設計: 代碼封裝74
練習題53: 二維空間的點74
自測題56: 學生類v376
自測題57: 矩形類v276
自測題58: 復數(shù)類77
5.4方法的設計: 靜態(tài)方法78
練習題54: 角度轉換器v178
自測題59: 角度轉換器v278
自測題510: 三角形工具類79
5.5方法的設計: 遞歸80
練習題55: 計算階乘80
自測題511: 遞歸求解公約數(shù)81
自測題512: 兔子數(shù)列82
自測題513: 打靶問題82
5.6屬性的設計: 靜態(tài)屬性82
練習題56: 圖書銷量82
自測題514: 對象自動編號84
自測題515: 共飲一口井84
5.7對象與引用類型85
練習題57: 參數(shù)傳遞85
自測題516: 復制對象88
自測題517: 員工工資88
5.8包的使用89
練習題58: 形狀包89
自測題518: 銀行賬戶包91
自測題519: 房貸工具包92
5.9成員的訪問控制94
練習題59: 學生類v494
自測題520: 銀行賬戶類v296
自測題521: Singleton模式97
5.10類的綜合設計98
自測題522: 商場促銷98
自測題523: 存貸款工具99
實驗6數(shù)組/101
6.1創(chuàng)建一維數(shù)組101
練習題61: 字母逆序輸出101
自測題61: 隨機數(shù)組104
自測題62: 斐波那契數(shù)列104
自測題63: 數(shù)組交叉歸并104
6.2處理一維數(shù)組104
練習題62: 圓環(huán)四鄰數(shù)v1104
自測題64: 數(shù)組逆序存放106
自測題65: 數(shù)組逆序復制106
自測題66: 數(shù)組移位107
自測題67: 數(shù)組移位方陣107
6.3一維數(shù)組之查找數(shù)據(jù)107
練習題63: 數(shù)組簡單查找107
自測題68: 數(shù)組插入數(shù)據(jù)110
自測題69: 數(shù)組消重110
自測題610: 查找子數(shù)組111
6.4一維數(shù)組之數(shù)據(jù)統(tǒng)計111
練習題64: 數(shù)組值交換111
自測題611: 成績統(tǒng)計113
自測題612: 年齡段統(tǒng)計113
自測題613: 圓環(huán)四鄰數(shù)v2114
自測題614: 眾數(shù)計算114
6.5一維數(shù)組之排序114
練習題65: 冒泡排序114
練習題66: 選擇排序118
自測題615: 有序數(shù)組中插入單個數(shù)據(jù)121
自測題616: 有序數(shù)組中插入數(shù)組122
自測題617: 插入排序122
自測題618: 有序數(shù)組合并123
6.6一維數(shù)組綜合123
自測題619: 郵資計算123
自測題620: 驗證碼生成124
自測題621: 歸并排序124
6.7java.util.Arrays數(shù)組工具類的應用125
練習題67: 使用Arrays125
自測題622: Top N問題127
6.8創(chuàng)建二維數(shù)組127
練習題68: 楊輝三角形127
自測題623: 創(chuàng)建二維數(shù)組130
自測題624: 一維數(shù)組轉二維數(shù)組130
6.9處理二維數(shù)組131
練習題69: Excel函數(shù)模擬v1131
自測題625: Excel函數(shù)模擬v2133
自測題626: 螺旋方陣134
6.10二維數(shù)組之數(shù)據(jù)統(tǒng)計135
練習題610: 二維數(shù)組歸一化135
自測題627: 二維數(shù)組標準化138
自測題628: 二維數(shù)組值138
自測題629: 二維數(shù)組排序139
6.11二維數(shù)組之矩陣操作139
練習題611: 矩陣乘法139
自測題630: 方陣的跡142
自測題631: 矩陣的鞍點143
自測題632: 協(xié)方差矩陣143
6.12對象數(shù)組144
練習題612: 學生信息管理v1144
自測題633: 學生信息管理v2145
6.13數(shù)組綜合應用146
自測題634: 九宮格146
自測題635: 圖像均值濾波146
自測題636: 圖像卷積運算147
實驗7常用類的使用/149
7.1字符串處理149
練習題71: 從字符串中抽取數(shù)據(jù)149
自測題71: 段落分句150
自測題72: 英文分詞151
自測題73: 數(shù)字三位分節(jié)法151
自測題74: 微博內容分析151
自測題75: 文檔合并152
自測題76: 字符串排序152
7.2日期和時間處理153
練習題72: 代碼執(zhí)行時間153
自測題77: 日歷生成154
自測題78: 年齡計算154
7.3常用工具類綜合應用154
自測題79: 微博轉發(fā)關系154
自測題710: 正向匹配分詞155
自測題711: 身份證解析156
自測題712: 基因組分析157
實驗8繼承與多態(tài)/159
8.1類的繼承159
練習題81: 雇員類159
自測題81: 參考文獻162
自測題82: 學校人員162
自測題83: 幾何圖形163
8.2方法的重寫163
練習題82: 等邊三角形163
自測題84: Point類165
自測題85: 手機類166
自測題86: 打印機167
8.3方法的重載167
練習題83: 加法器167
自測題87: 實付工資169
自測題88: 打招呼170
8.4抽象方法與抽象類171
練習題84: 汽車類171
自測題89: 動物家族173
8.5引用多態(tài)173
練習題85: 汽車銷售173
自測題810: 寶寶吃水果176
8.6繼承java.lang.Object類177
練習題86: 全等三角形177
自測題811: Cat類的toString()方法181
自測題812: 同一個人181
8.7接口的設計及實現(xiàn)181
練習題87: 帶GPS的汽車181
自測題813: 可食用的對象185
自測題814: 可比較的三角形185
自測題815: 按成績排序186
8.8類的綜合設計186
自測題816: 微信群紅包186
自測題817: 寵物商店187
自測題818: 簡單考試系統(tǒng)189
實驗9異常處理/191
9.1常見異常類191
練習題91: InputMismatchException異常191
自測題91: ArrayIndexOutOfBoundsException異常192
自測題92: NumberFormatException異常193
9.2自定義異常193
練習題92: 賬戶余額不足193
自測題93: 負取款金額195
自測題94: 圓半徑為負196
自測題95: 用戶名已注冊196
9.3trycatchfinally異常處理197
自測題96: 日期異常197
9.4多異常處理197
練習題93: 取款問題197
自測題97: 數(shù)據(jù)求商200
自測題98: 民用車牌號碼200
9.5異常處理綜合201
自測題99: 危險品檢查201
自測題910: vlookup查找數(shù)據(jù)202
實驗10輸入輸出流/203
10.1文件操作203
練習題101: 目錄和文件創(chuàng)建203
自測題101: 列出目錄下的文件205
自測題102: 遍歷目錄206
自測題103: ls命令模擬206
10.2字節(jié)流: 文件輸入輸出207
練習題102: 讀寫文件207
自測題104: 復制文件210
10.3字節(jié)流: 數(shù)據(jù)輸入輸出210
練習題103: 讀寫不同類型的數(shù)據(jù)210
自測題105: 數(shù)據(jù)備份213
10.4字節(jié)流: 對象輸入輸出213
練習題104: 讀寫對象213
自測題106: 血糖預測結果分析216
10.5字符流: 逐字符讀寫217
練習題105: 指定編碼讀寫字符217
自測題107: 統(tǒng)計字符219
自測題108: 統(tǒng)計單詞220
10.6字符流: 緩沖輸入輸出221
練習題106: 九九乘法表221
自測題109: 轉換代碼塊風格223
自測題1010: 替換文件內容223
10.7字符流/字節(jié)流: 打印輸出223
練習題107: 打印輸出223
自測題1011: 計算正弦227
10.8輸入輸出綜合應用228
自測題1012: 文件內容格式檢查228
自測題1013: 圖像邊緣檢測229
自測題1014: 處理Excel數(shù)據(jù)230
實驗11集合類的使用/232
11.1列表232
練習題111: ArrayList的使用232
自測題111: 存儲不定長數(shù)據(jù)234
自測題112: 處理不定長數(shù)據(jù)234
自測題113: 約瑟夫問題235
11.2集合: HashSet235
練習題112: 存儲不重復的對象235
自測題114: 消除重復記錄239
自測題115: 圖書銷量統(tǒng)計239
11.3集合: TreeSet240
練習題113: 存儲有序的對象240
自測題116: 候選人排序245
自測題117: 漢字排序246
11.4映射: HashMap246
練習題114: 詞頻統(tǒng)計246
自測題118: 按鍵統(tǒng)計詞頻248
自測題119: 按值統(tǒng)計詞頻249
11.5集合工具類的應用249
練習題115: 集合數(shù)據(jù)處理示例249
自測題1110: 豆瓣讀書榜單v1254
自測題1111: 豆瓣讀書榜單v2254
11.6基于集合類實現(xiàn)復雜數(shù)據(jù)結構254
練習題116: 堆棧使用示例254
自測題1112: 十進制整數(shù)轉為二進制數(shù)257
自測題1113: 二叉樹258
11.7集合類綜合應用259
自測題1114: 集合操作259
自測題1115: 賬號信息管理260
實驗12Java綜合設計案例/262
12.1基于元胞自動機模型模擬晶粒演變過程262
12.2對DNA序列進行基因預測273
12.3使用多元線性回歸預測空腹血糖282
12.4中文詞頻分析289
12.5基于哈夫曼編碼進行字符編碼與解碼297