從基礎(chǔ)開始:從程序設(shè)計的基本知識入手,通過豐富的實例與細(xì)致的分析,逐步過渡到面向?qū)ο蟪绦蛟O(shè)計方法,這種循序漸進的方式,深受入門讀者喜愛。
實用為先:重點圍繞程序設(shè)計中各種基本概念的應(yīng)用及實際問題的解決,給出了相關(guān)的常見編程錯誤及編程技巧。
詳解常用數(shù)據(jù)結(jié)構(gòu):深入分析了Java語言本身提供的列表、數(shù)學(xué)集合、映射、棧和隊列、二叉樹、散列表和堆等多種常用數(shù)據(jù)結(jié)構(gòu),使讀者掌握解決實際問題的基本工具。
培養(yǎng)算法思維:強調(diào)利用算法思維方式描述問題、分析問題和解決問題,并重點對排序、遞歸和回溯算法進行了介紹。
配套練習(xí):每章配有大量自測題和編程練習(xí)題,方便讀者鞏固所學(xué)內(nèi)容。
案例分析:每章最后安排一個精選的案例分析,通過逐步開發(fā)并完善一個具有實際意義的程序,增加學(xué)生學(xué)習(xí)的興趣與成就感。
更多精彩,點擊進入品牌店查閱>>
《計算機科學(xué)叢書:Java程序設(shè)計教程(原書第3版)》采用從基礎(chǔ)開始的講法,先介紹面向過程的程序設(shè)計方法,打下牢固的編程基礎(chǔ)后,再講述面向?qū)ο蟮某绦蛟O(shè)計方法。主要內(nèi)容包括:程序設(shè)計基礎(chǔ)、數(shù)組、定義類、遞歸、繼承和接口、圖形用戶接口、排序和查找、集合等,《計算機科學(xué)叢書:Java程序設(shè)計教程(原書第3版)》在大部分章節(jié)都配有練習(xí)題,對理解和消化書中的概念極有幫助,適合學(xué)生和初學(xué)者自學(xué)參考。
Stuart Reges,華盛頓大學(xué)計算機科學(xué)與工程系首席講師,主要講授計算機程序設(shè)計、Java程序設(shè)計語言、離散結(jié)構(gòu)等課程。因編寫出版本教材,建設(shè)并講授CSE142和CSE143課程,Stuart Reges于2011年榮獲華盛頓大學(xué)杰出教師獎。該獎旨在表彰教學(xué)能力突出,教學(xué)效果優(yōu)異,對教學(xué)工作充滿熱情的優(yōu)秀教師。
Marty Stepp,斯坦福大學(xué)計算機科學(xué)系講師。2004~2013年,任教于華盛頓大學(xué)計算機科學(xué)與工程系,主要講授計算機程序設(shè)計、Web程序設(shè)計和軟件工程等課程。Marty Stepp與他人合作編寫并出版了多部計算機專業(yè)教材。
Building Java Programs: A Back to Basics Approach, Third Edition
出版者的話
譯者序
前言
第1章 Java編程簡介
1.1 計算的基本概念
1.1.1 為什么要編程
1.1.2 硬件和軟件
1.1.3 數(shù)字王國
1.1.4 程序設(shè)計的過程
1.1.5 為什么選擇Java
1.1.6 Java編程環(huán)境
1.2 現(xiàn)在開始介紹Java
1.2.1 字符串常量
1.2.2 System.out.println
1.2.3 轉(zhuǎn)義序列
1.2.4 print和println
1.2.5 標(biāo)識符和關(guān)鍵字
1.2.6 一個復(fù)雜的例子:DrawFigures
1.2.7 注釋與程序可讀性
1.3 程序中的錯誤
1.3.1 語法錯誤
1.3.2 邏輯錯誤
1.4 過程分解
1.4.1 靜態(tài)方法
1.4.2 控制流程
1.4.3 調(diào)用其他方法的方法
1.4.4 運行時錯誤舉例
1.5 案例分析:輸出圖形
1.5.1 結(jié)構(gòu)化的版本
1.5.2 無冗余的最終版本
1.5.3 執(zhí)行流程的分析
本章小結(jié)
第2章 基本數(shù)據(jù)類型和確定循環(huán)
2.1 數(shù)據(jù)的基本概念
2.1.1 基本類型
2.1.2 表達(dá)式
2.1.3 常值
2.1.4 算術(shù)運算符
2.1.5 優(yōu)先級
2.1.6 類型混用和類型轉(zhuǎn)換
2.2 變量
2.2.1 賦值和聲明變量
2.2.2 字符串連接
2.2.3 增量和減量運算符
2.2.4 變量和混合類型
2.3 for循環(huán)
2.3.1 跟蹤for循環(huán)
2.3.2 for循環(huán)模式
2.3.3 循環(huán)嵌套
2.4 復(fù)雜性管理
2.4.1 作用域
2.4.2 偽代碼
2.4.3 類常量
2.5 案例分析:輸出復(fù)雜的圖形
2.5.1 問題分解和偽代碼
2.5.2 第一個結(jié)構(gòu)化版本
2.5.3 增加一個類常量
2.5.4 進一步修改
本章小結(jié)
第3章 參數(shù)和對象
3.1 參數(shù)
3.1.1 參數(shù)的機制
3.1.2 參數(shù)的限制
3.1.3 多重參數(shù)
3.1.4 參數(shù)和常量
3.1.5 方法重載
3.2 具有返回值的方法
3.2.1 Math類
3.2.2 編寫具有返回值的方法
3.3 使用對象
3.3.1 String對象
3.3.2 交互式程序和Scanner對象
3.3.3 交互式程序示例
3.4 案例分析:拋物線軌跡
3.4.1 非結(jié)構(gòu)化解決方案
3.4.2 結(jié)構(gòu)化解決方案
本章小結(jié)
第3G章圖形(選學(xué))
3G.1 圖形簡介
3G.1.1 DrawingPanel
3G.1.2 繪制線段和圖形
3G.1.3 顏色
3G.1.4 循環(huán)繪圖
3G.1.5 文本和字體
3G.2 圖形處理中的過程分解
3G.3 案例分析:金字塔
3G.3.1 非結(jié)構(gòu)的部分解決方案
3G.3.2 繪制金字塔的通用方法
3G.3.3 完全的結(jié)構(gòu)化解決方案
本章小結(jié)
第4章 條件執(zhí)行
4.1 if/else語句
4.1.1 關(guān)系運算符
4.1.2 嵌套if/else語句
4.1.3 對象的相等性
4.1.4 構(gòu)造if/else語句
4.1.5 多重條件測試
4.2 積累式算法
4.2.1 累加和
4.2.2 最小/最大循環(huán)
4.2.3 使用if計算累加和
4.2.4 截斷錯誤
4.3 文本處理
4.3.1 char類型
4.3.2 char與int
4.3.3 積累式文本處理算法
4.3.4 System.out.printf
4.4 條件執(zhí)行的方法
4.4.1 前提條件和后置條件
4.4.2 拋出異常
4.4.3 重溫返回值
4.4.4 推敲執(zhí)行路徑
4.5 案例分析:計算健康指數(shù)
4.5.1 單人版無結(jié)構(gòu)化解決方案
4.5.2 兩人版無結(jié)構(gòu)化解決方案
4.5.3 兩人版結(jié)構(gòu)化解決方案
4.5.4 面向過程的程序設(shè)計原則
本章小結(jié)
第5章 程序邏輯和不確定循環(huán)
5.1 while循環(huán)
5.1.1 尋找最小約數(shù)的循環(huán)
5.1.2 隨機數(shù)字
5.1.3 計算機模擬技術(shù)
5.1.4 do/while循環(huán)
5.2 籬笆樁算法
5.2.1 哨兵循環(huán)
5.2.2 使用if語句處理籬笆樁
5.3 布爾類型
5.3.1 邏輯運算符
5.3.2 短路特性
5.3.3 boolean變量和標(biāo)志
5.3.4 boolean的禪意
5.3.5 布爾表達(dá)式的非運算
5.4 用戶錯誤
5.4.1 初識Scanner對象
5.4.2 處理用戶錯誤
5.5 斷言和程序邏輯
5.5.1 分析斷言
5.5.2 斷言舉例
5.6 案例分析:猜數(shù)字
5.6.1 無提示的初始版本
5.6.2 帶有提示的隨機版本
5.6.3 健壯的最終版本
本章小結(jié)
第6章 文件處理
6.1 讀取文件的基本方法
6.1.1 隨處可見的數(shù)據(jù)
6.1.2 文件與文件對象
6.1.3 使用Scanner對象讀取文件內(nèi)容
6.2 基于標(biāo)記的文件處理
6.2.1 文件的結(jié)構(gòu)和處理輸入
6.2.2 Scanner對象的參數(shù)
6.2.3 路徑和目錄
6.2.4 一個更復(fù)雜的輸入文件
6.3 基于行的處理
6.4 高級文件處理
6.4.1 使用PrintStream輸出文件內(nèi)容
6.4.2 保證文件可讀
6.5 案例分析:郵政編碼查詢
本章小結(jié)
第7章 數(shù)組
7.1 數(shù)組的基本概念
7.1.1 創(chuàng)建并遍歷數(shù)組
7.1.2 訪問數(shù)組
7.1.3 一個使用數(shù)組的完整程序
7.1.4 隨機訪問
7.1.5 數(shù)組與方法
7.1.6 for-each循環(huán)
7.1.7 數(shù)組初始化
7.1.8 Arrays類
7.2 數(shù)組遍歷算法
7.2.1 打印數(shù)組
7.2.2 查詢與替換
7.2.3 判斷相等性
7.2.4 逆序數(shù)組
7.2.5 字符串遍歷算法
7.3 引用語義
7.4 高級數(shù)組技術(shù)
7.4.1 移動數(shù)組中的元素
7.4.2 對象數(shù)組
7.4.3 命令行參數(shù)
7.4.4 嵌套循環(huán)算法
7.5 多維數(shù)組
7.5.1 規(guī)則的二維數(shù)組
7.5.2 鋸齒狀二維數(shù)組
7.6 案例分析:本福德定律
7.6.1 計數(shù)器
7.6.2 完整的程序
本章小結(jié)
第8章 類
8.1 面向?qū)ο蟪绦蛟O(shè)計的基本概念
8.1.1 類和對象
8.1.2 Point對象
8.2 對象的狀態(tài)與行為
8.2.1 對象的狀態(tài):字段
8.2.2 對象的行為:方法
8.2.3 隱含的參數(shù)
8.2.4 修改器和訪問器
8.2.5 toString方法
8.3 對象的初始化:構(gòu)造函數(shù)
8.3.1 關(guān)鍵字this
8.3.2 多個構(gòu)造函數(shù)
8.4 封裝
8.4.1 私有成員
8.4.2 類的不變式
8.4.3 改變類的內(nèi)部實現(xiàn)
8.5 案例分析: 設(shè)計一個表示股票信息的類
8.5.1 面向?qū)ο蟪绦蛟O(shè)計討論
8.5.2 Stock類的字段和方法聲明
8.5.3 Stock類的構(gòu)造函數(shù)和實例方法的實現(xiàn)
本章小結(jié)
第9章 繼承和接口
9.1 繼承的基本概念
9.1.1 程序設(shè)計之外的層次結(jié)構(gòu)
9.1.2 擴展類
9.1.3 重寫方法
9.2 與父類交互
9.2.1 調(diào)用重寫的方法
9.2.2 訪問繼承的字段
9.2.3 調(diào)用父類的構(gòu)造函數(shù)
9.2.4 DividendStock類的行為
9.2.5 Object類
9.2.6 equals方法
9.2.7 instanceof關(guān)鍵字
9.3 多態(tài)性
9.3.1 多態(tài)機制
9.3.2 解析繼承代碼
9.3.3 解析復(fù)雜的調(diào)用關(guān)系
9.4 繼承和設(shè)計
9.4.1 繼承的誤用
9.4.2 “是一個”和“有一個”關(guān)系
9.4.3 Graphics2D類
9.5 接口
9.5.1 形狀類的接口
9.5.2 實現(xiàn)接口
9.5.3 接口的優(yōu)點
9.6 案例分析: 設(shè)計一組具有層次關(guān)系的金融類
9.6.1 設(shè)計類
9.6.2 初步實現(xiàn)
9.6.3 抽象類
本章小結(jié)
第10章 ArrayList
10.1 ArrayList
10.1.1 ArrayList的基本操作
10.1.2 ArrayList的查找方法
10.1.3 一個完整的ArrayList程序
10.1.4 向ArrayList添加或刪除元素
10.1.5 使用for-each循環(huán)訪問ArrayList
10.1.6 包裝類
10.2 Comparable接口
10.2.1 自然排序和compareTo方法
10.2.2 實現(xiàn)Comparable接口
10.3 案例分析:詞匯表比較
10.3.1 關(guān)于程序執(zhí)行效率的考慮
10.3.2 版本1:計算詞匯量
10.3.3 版本2:計算重疊部分
10.3.4 版本3:完整的程序
本章小結(jié)
第11章 Java的集合框架
11.1 列表
11.1.1 集合
11.1.2 LinkedList與ArrayList
11.1.3 迭代器
11.1.4 抽象數(shù)據(jù)類型
11.1.5 LinkedList類案例分析:篩法
11.2 數(shù)學(xué)集合
11.2.1 數(shù)學(xué)集合的概念
11.2.2 TreeSet與HashSet
11.2.3 數(shù)學(xué)集合上的運算
11.2.4 Set類案例分析:彩票機
11.3 映射
11.3.1 基本映射操作
11.3.2 映射視圖(keySet和values)
11.3.3 TreeMap與HashMap
11.3.4 Map類案例分析:字?jǐn)?shù)統(tǒng)計
11.3.5 集合綜述
本章小結(jié)
第12章 遞歸
12.1 遞歸的思想
12.1.1 一個與編程無關(guān)的例子
12.1.2 將迭代方法改寫為遞歸方法
12.1.3 遞歸方法的結(jié)構(gòu)
12.2 一個更好的遞歸實例
12.3 遞歸函數(shù)和數(shù)據(jù)
12.3.1 整數(shù)的冪運算
12.3.2 求最大公約數(shù)
12.3.3 目錄爬蟲
12.3.4 助手方法
12.4 遞歸圖形
12.5 遞歸回溯
12.5.1 一個簡單的例子:移動路線問題
12.5.2 8皇后問題
12.5.3 數(shù)獨問題
12.6 案例分析:求解前序表達(dá)式
12.6.1 中序、前序、后序表達(dá)式
12.6.2 計算前序表達(dá)式
12.6.3 完整的程序
本章小結(jié)
第13章 查找與排序
13.1 Java類庫中的查找與排序
13.1.1 二分法查找
13.1.2 排序
13.1.3 洗牌
13.1.4 用比較器來自定義順序
13.2 程序的復(fù)雜度
13.2.1 實驗分析
13.2.2 算法的復(fù)雜度類型
13.3 查找和排序算法的實現(xiàn)
13.3.1 順序查找
13.3.2 二分法查找
13.3.3 遞歸二分法查找
13.3.4 查找對象
13.3.5 選擇排序
13.4 案例分析:歸并排序算法的實現(xiàn)
13.4.1 分解與合并數(shù)組
13.4.2 遞歸的歸并排序
13.4.3 完整的程序
本章小結(jié)
第14章 棧與隊列
14.1 棧/隊列基礎(chǔ)
14.1.1 棧的概念
14.1.2 隊列的概念
14.2 棧/隊列常用操作
14.2.1 棧與隊列互換
14.2.2 隊列元素求和
14.2.3 棧元素求和
14.3 棧/隊列高級操作
14.3.1 刪除隊列中的元素
14.3.2 比較兩個棧
14.4 案例分析:表達(dá)式求值
14.4.1 標(biāo)記分解
14.4.2 求值計算
本章小結(jié)
第15章 實現(xiàn)集合類
15.1 簡單ArrayIntList類
15.1.1 添加數(shù)值和打印功能
15.1.2 關(guān)于封裝的思考
15.1.3 處理列表的中間內(nèi)容
15.1.4 引入另一個構(gòu)造函數(shù)和常量
15.1.5 前提條件和后置條件
15.2 更完整的ArrayIntList類
15.2.1 拋出異常
15.2.2 方便的方法
15.3 高級功能
15.3.1 自動調(diào)整列表大小
15.3.2 添加迭代器
15.4 ArrayList 類
本章小結(jié)
第16章 鏈表
16.1 鏈表節(jié)點
16.1.1 創(chuàng)建鏈表
16.1.2 鏈表基礎(chǔ)操作
16.1.3 操作節(jié)點
16.1.4 鏈表遍歷
16.2 鏈表類
16.2.1 簡單LinkedIntList類
16.2.2 追加新節(jié)點
16.2.3 操作中間節(jié)點
16.3 復(fù)雜的鏈表操作
16.4 IntList接口
16.5 LinkedList類
16.5.1 鏈表的變體技術(shù)
16.5.2 鏈表的迭代器
16.5.3 其他代碼細(xì)節(jié)
本章小結(jié)
第17章 二叉樹
17.1 二叉樹基礎(chǔ)
17.2 遍歷二叉樹
17.3 樹的常見操作
17.3.1 節(jié)點求和
17.3.2 計算樹的層數(shù)
17.3.3 計算葉子節(jié)點數(shù)量
17.4 二叉搜索樹
17.4.1 二叉搜索樹性質(zhì)
17.4.2 構(gòu)建二叉搜索樹
17.4.3 x = change(x)模式
17.4.4 在樹中進行搜索
17.4.5 二叉搜索樹的復(fù)雜性
17.5 SearchTree類
本章小結(jié)
第18章 高級數(shù)據(jù)結(jié)構(gòu)
18.1 散列技術(shù)
18.1.1 利用數(shù)組實現(xiàn)數(shù)學(xué)集合
18.1.2 散列函數(shù)和散列表
18.1.3 沖突
18.1.4 再散列
18.1.5 非整型數(shù)據(jù)的散列處理
18.1.6 HashMap的實現(xiàn)
18.2 優(yōu)先級隊列和堆
18.2.1 優(yōu)先級隊列
18.2.2 堆的概述
18.2.3 從堆中刪除元素
18.2.4 向堆添加元素
18.2.5 利用數(shù)組實現(xiàn)堆
18.2.6 堆排序
本章小結(jié)
附錄A Java總結(jié)
附錄B Java API規(guī)范和Javadoc注釋
附錄C Java 語法補充說明
索引