Chapter 0 modules¶
- 0.1. Data Structures and Algorithms
- 0.2. Spotlight: Carl Friedrich Gauss
- 0.3. Spotlight: Francis Bacon
- 0.4. Command Line Basics
- 0.5. Parsing Command Line Parameters In Your Program
- 0.6. Using Parameters in Eclipse
- 0.7. Installing the Web-CAT Submission Plug-in for Eclipse
- 0.8. Common Debugging Methods
- 0.9. Debugging In Eclipse
- 0.10. Reading Input (from Files or Otherwise)
- 0.11. Random Access Files In Java
- 0.12. JUnit Testing And You
- 0.13. Writing JUnit Tests
- 0.14. Code Coverage In JUnit
- 0.15. Mutation Coverage In JUnit
- 0.16. Mutation Testing Examples
- 0.16.1. Types of Mutants
- 0.16.1.1. Arithmetic Operation Mutant
- 0.16.1.2. Example Code 1: Arithmetic Operation Mutant
- 0.16.1.3. Logical Expression Mutant (Remove Conditionals)
- 0.16.1.4. Example Code 2: Logical Expression Mutant (Remove Conditionals)
- 0.16.1.5. Example Code 3: Multiple Mutants in One (EvenOddCheck)
- 0.16.1.6. Example Code 4: Loop Conditions (optional)
- 0.16.1. Types of Mutants
- 0.17. Mutation Coverage: FAQ
- 0.17.1. Frequently Asked Questions
- 0.17.1.1. What is Mutation Testing and why should I use it?
- 0.17.1.2. Does 100% Mutation Score mean 100% Project Correctness?
- 0.17.1.3. Why does writing Mutation Tests take so much time?
- 0.17.1.4. Why should I use Mutation Testing instead of Code Coverage?
- 0.17.1.5. Why are we using this particular set of mutation operators?
- 0.17.1.6. Does 100% Mutation Score mean my code is perfect?
- 0.17.1.7. Why do I have bugs in my code despite having 100% Mutation Score?
- 0.17.1.8. Why do my mutation tests not cover all branches of my code?
- 0.17.1.9. How do I localize the bugs in my code?
- 0.17.1.10. How do I recover the “Mutation List”/”Mutation Summary” tabs?
- 0.17.1. Frequently Asked Questions
- 0.18. Abstract Data Types
- 0.19. Introduction to Object Oriented Programming
- 0.20. The Unified Modeling Language
- 0.21. Software Development Processes
- 0.22. Pointers Chapter Introduction
- 0.23. Basic References Part 1
- 0.24. Basic References Part 2
- 0.25. Syntax of the Lambda Calculus
- 0.26. Local Memory
- 0.27. Heap Memory
- 0.28. Link Nodes
- 0.29. Link Nodes Practice Exercises
- 0.30. Additional Practice Exercises
- 0.31. Chapter Introduction
- 0.32. Sets and Relations
- 0.33. Miscellaneous Notation
- 0.34. Logarithms
- 0.35. Summations
- 0.36. Recurrence Relations
- 0.37. Mathematical Proof Techniques
- 0.38. Estimation
- 0.39. Chapter Summary Questions
- 0.40. Searching in an Array
- 0.41. Chapter Introduction
- 0.42. Problems, Algorithms, and Programs
- 0.43. Comparing Algorithms
- 0.44. Best, Worst, and Average Cases
- 0.45. Faster Computer, or Faster Algorithm?
- 0.46. Asymptotic Analysis and Upper Bounds
- 0.47. Lower Bounds and \(\Theta\) Notation
- 0.48. Calculating Program Running Time
- 0.49. Analyzing Problems
- 0.50. Common Misunderstandings
- 0.51. Multiple Parameters
- 0.52. Space Bounds
- 0.53. Code Tuning and Empirical Analysis
- 0.54. Algorithm Analysis Summary Exercises
- 0.55. Algorithm Analysis Summary Exercises
- 0.56. Chapter Introduction: Lists
- 0.57. The List ADT
- 0.58. Array-Based List Implementation
- 0.59. Linked Lists
- 0.60. Comparison of List Implementations
- 0.61. Doubly Linked Lists
- 0.62. List Element Implementations
- 0.63. Stacks
- 0.64. Linked Stacks
- 0.65. Freelists
- 0.66. Implementing Recursion
- 0.67. Queues
- 0.68. Linked Queues
- 0.69. Linear Structure Summary Exercises
- 0.70. Introduction
- 0.71. Writing a recursive function
- 0.72. Code Completion Practice Exercises
- 0.72.1. Introduction
- 0.72.2. Recursion Programming Exercise: Largest
- 0.72.3. Recursion Programming Exercise: Multiply
- 0.72.4. Recursion Programming Exercise: GCD
- 0.72.5. Recursion Programming Exercise: log
- 0.72.6. Recursion Programming Exercise: Cummulative Sum
- 0.72.7. Recursion Programming Exercise: Add odd values
- 0.72.8. Recursion Programming Exercise: Sum Of the Digits
- 0.72.9. Recursion Programming Exercise: Count Characters
- 0.73. Writing More Sophisticated Recursive Functions
- 0.74. Harder Code Completion Practice Exercises
- 0.75. Writing Practice Exercises
- 0.76. Tracing Recursive Code
- 0.77. Tracing Practice Exercises
- 0.78. Summary Exercises
- 0.79. Design Patterns
- 0.80. Alternative List ADT Designs
- 0.81. Comparing Records
- 0.82. The Dictionary ADT
- 0.83. Binary Trees Chapter Introduction
- 0.84. Binary Trees
- 0.85. Binary Tree as a Recursive Data Structure
- 0.86. The Full Binary Tree Theorem
- 0.87. Binary Tree Traversals
- 0.88. Implementing Tree Traversals
- 0.89. Information Flow in Recursive Functions
- 0.89.1. Information Flow in Recursive Functions
- 0.89.2. Binary Tree Set Depth Exercise
- 0.89.3. Collect-and-return
- 0.89.4. Binary Tree Check Sum Exercise
- 0.89.5. Binary Tree Leaf Nodes Count Exercise
- 0.89.6. Binary Tree Sum Nodes Exercise
- 0.89.7. Combining Information Flows
- 0.89.8. Binary Tree Check Value Exercise
- 0.89.9. Combination Problems
- 0.89.10. Binary Tree Height Exercise
- 0.89.11. Binary Tree Get Difference Exercise
- 0.89.12. Binary Tree Has Path Sum Exercise
- 0.90. Binary Tree Node Implementations
- 0.91. Composite-based Expression Tree
- 0.92. Binary Tree Space Requirements
- 0.93. Binary Search Trees
- 0.94. Dictionary Implementation Using a BST
- 0.95. Binary Tree Guided Information Flow
- 0.96. Multiple Binary Trees
- 0.97. A Hard Information Flow Problem
- 0.98. Array Implementation for Complete Binary Trees
- 0.99. Heaps and Priority Queues
- 0.100. Huffman Coding Trees
- 0.101. Trees versus Tries
- 0.102. Proof of Optimality for Huffman Coding
- 0.103. Binary Tree Chapter Summary
- 0.104. Chapter Introduction: Sorting
- 0.105. Sorting Terminology and Notation
- 0.106. Insertion Sort
- 0.107. Bubble Sort
- 0.108. Selection Sort
- 0.109. The Cost of Exchange Sorting
- 0.110. Optimizing Sort Algorithms with Code Tuning
- 0.111. Shellsort
- 0.112. Mergesort Concepts
- 0.113. Implementing Mergesort
- 0.114. Quicksort
- 0.115. Heapsort
- 0.116. Binsort
- 0.117. Radix Sort
- 0.118. An Empirical Comparison of Sorting Algorithms
- 0.119. Lower Bounds for Sorting
- 0.120. Sorting Summary Exercises
- 0.121. Chapter Introduction: File Processing
- 0.122. Primary versus Secondary Storage
- 0.123. Disk Drives
- 0.124. Buffer Pools
- 0.125. The Programmer’s View of Files
- 0.126. External Sorting
- 0.127. Introduction
- 0.128. Hash Function Principles
- 0.129. Sample Hash Functions
- 0.130. Open Hashing
- 0.131. Bucket Hashing
- 0.132. Collision Resolution
- 0.133. Improved Collision Resolution
- 0.134. Analysis of Closed Hashing
- 0.135. Deletion
- 0.136. Hashing Chapter Summary Exercises
- 0.137. Chapter Introduction: Memory Management
- 0.138. Dynamic Storage Allocation
- 0.139. Sequential-Fit Methods
- 0.140. First Fit
- 0.141. Circular First Fit
- 0.142. Best Fit
- 0.143. Worst Fit
- 0.144. Sequential Fit Peformance
- 0.145. Other Memory Allocation Methods
- 0.146. Failure Policies and Garbage Collection
- 0.147. Indexing Chapter Introduction
- 0.148. Linear Indexing
- 0.149. ISAM
- 0.150. Tree-based Indexing
- 0.151. 2-3 Trees
- 0.152. B-Trees
- 0.153. Indexing Summary Exercises
- 0.154. General Trees
- 0.155. Union/Find and the Parent Pointer Implementation
- 0.156. Sequential Tree Representations
- 0.157. Graphs Chapter Introduction
- 0.158. Graph Implementations
- 0.159. Graph Traversals
- 0.160. Topological Sort
- 0.161. Shortest-Paths Problems
- 0.162. Minimal Cost Spanning Trees
- 0.163. Kruskal’s Algorithm
- 0.164. All-Pairs Shortest Paths
- 0.165. Spatial Data Structures
- 0.166. The PR Quadtree
- 0.167. KD Trees
- 0.168. The Bintree
- 0.169. Other Spatial Data Structures
- 0.170. Data and Algorithm Analysis
- 0.171. An Introduction to Problem Solving
- 0.172. Semester Overview
- 0.173. Introduction to Analyzing a Problem
- 0.174. Bounds Review
- 0.175. Growth Rates Review
- 0.176. Summation Techniques
- 0.177. Solving Recurrence Relations
- 0.178. Chapter Introduction: Search
- 0.179. Analyzing Search in Unsorted Lists
- 0.180. Search in Sorted Arrays
- 0.181. Self-Organizing Lists
- 0.182. Bit Vectors for Representing Sets
- 0.183. Perfect Hashing
- 0.184. Finding the Maximum Value
- 0.185. Adversarial Lower Bounds Proofs
- 0.186. State Space Lower Bounds Proofs
- 0.187. Finding the \(i\) th Best Element
- 0.188. Optimal Sorting
- 0.189. Number Problems
- 0.190. The Transformation Concept
- 0.191. The Fast Fourier Transform
- 0.192. Introduction to Probabilistic Algorithms
- 0.193. Finding Prime Numbers
- 0.194. Random Numbers
- 0.195. Skip Lists
- 0.196. Balanced Trees
- 0.197. The AVL Tree
- 0.198. The Splay Tree
- 0.199. The Red-Black Tree
- 0.200. The Sparse Matrix
- 0.201. Dynamic Programming
- 0.202. Amortized Analysis
- 0.203. 0/1 Knapsack Problem
- 0.204. Edit Distance
- 0.205. KMP String Search Algorithm
- 0.206. Boyer-Moore String Search Algorithm
- 0.207. Rabin-Karp String Search Algorithm [Draft]
- 0.208. General Tree Implementations
- 0.209. K-ary Tree Implementations
- 0.210. Limits to Computing
- 0.211. Reductions
- 0.212. NP-Completeness
- 0.213. Circuit Satisfiability
- 0.214. Formula Satisfiability
- 0.215. 3-CNF Satisfiability
- 0.216. The Clique Problem
- 0.217. The Independent Set Problem
- 0.218. The Vertex Cover Problem
- 0.219. The Hamiltonian Cycle Problem
- 0.220. The Traveling Salesman Problem
- 0.221. NP-Completeness Proofs
- 0.222. Reduction of Circuit SAT to SAT
- 0.223. Reduction of SAT to 3-SAT
- 0.224. Reduction of 3-SAT to Clique
- 0.225. Reduction of Clique to Independent Set
- 0.226. Reduction of Independent Set to Vertex Cover
- 0.227. Reduction of 3-SAT to Hamiltonian Cycle
- 0.228. Reduction of Hamiltonian Cycle to Traveling Salesman
- 0.229. Coping with NP-Complete Problems
- 0.230. Unsolveable Problems
- 0.231. Turing Machines
- 0.232. Derivations and Parse Trees
- 0.233. Ambiguous Grammars
- 0.234. Enforcing Order of Operations
- 0.235. Parser Generators
- 0.236. Using Parser Generators to Interpret a Language
- 0.237. List Construction and Deconstruction
- 0.238. Developing Basic, Recursive List-processing Functions
- 0.239. Recurring On Lists That Aren’t Flat
- 0.240. Using Helper Functions with Accumulators
- 0.241. Scope, Closures, Higher-order Functions, Static vs. Dynamic Binding
- 0.242. Procedural Abstraction: Map, Curry, and Compose
- 0.243. Procedural Abstraction: The Filtering and Folding (or Reduce) Patterns
- 0.244. Combining Map and Reduce
- 0.245. Continuations and Continuation Passing
- 0.25. Syntax of the Lambda Calculus
- 0.246. Semantics of the Lambda Calculus
- 0.247. Free and Bound Variables
- 0.248. Alpha-Conversion
- 0.249. The Substitution-Based Model of Evaluation
- 0.250. Beta-Reduction
- 0.251. Reduction Strategies
- 0.252. Church Numerals and Booleans
- 0.253. Recursive Functions
- 0.254. Defining SLang 1
- 0.255. Environment-based Model of Evaluation
- 0.256. Let Expressions
- 0.257. Defining SLang 2
- 0.258. Tying The Knot
- 0.259. Parameter-Passing Mechanisms
- 0.260. Lazy Lists
- 0.261. Types in Programming Languages
- 0.261.1. Motivating Examples
- 0.261.2. Type System: Definition
- 0.261.3. Type System: Static Versus Dynamic
- 0.261.4. Type System: Safe Versus Unsafe
- 0.261.5. Type System: Strong Versus Weak
- 0.261.6. Type System: Typed Variables or Values
- 0.261.7. Type System: Explicit Versus Implicit typing
- 0.261.8. The Many Uses of Type Systems
- 0.262. Type Inference
- 0.262.1. Type Environments
- 0.262.2. Typing Rules Expressed as Post Systems
- 0.262.3. Typing in a Scaled-down ML
- 0.262.4. Using Post System Rules to Describe Type Inferencing in ML
- 0.262.5. Parametric Polymorphism in ML
- 0.262.6. Type inferencing in ML
- 0.262.7. Type Inferencing Problem 1
- 0.262.8. Type Inferencing Problem 2
- 0.262.9. Type Inferencing Problem 3
- 0.262.10. Type Inferencing Problem 4
- 0.262.11. Type Inferencing Problem 5
- 0.262.12. Type Inferencing Problem 6
- 0.263. GLOSSARY
- 0.264. Formal Languages
- 0.265. Overview
- 0.266. Major Concepts
- 0.267. Deterministic Finite Acceptors
- 0.268. Non-Deterministic Finite Automata
- 0.269. Minimizing the Number of States in a DFA
- 0.270. Regular Expressions
- 0.271. Regular Grammars
- 0.272. Closure Properties of Regular Grammars
- 0.273. Identifying Non-regular Languages
- 0.274. Properties
- 0.275. Context-Free Languages
- 0.276. Transforming Grammars
- 0.277. Pushdown Automata
- 0.278. PDAs and Context Free Languages
- 0.279. Deterministic Pushdown Automata
- 0.280. Properties of Context-Free Languages
- 0.281. Models of Computation
- 0.231. Turing Machines
- 0.282. Parsing Introduction
- 0.283. LL Parsing
- 0.284. LR Parsing
- 0.285. CYK Parsing
- 0.286. Structure of a Compiler
- 0.287. Recursively Enumerable Languages
- 0.288. Intro Exercises
- 0.289. FA Exercises
- 0.290. Regular Language Exercises
- 0.291. Sheet 5
- 0.292. Sheet 6
- 0.293. Sheet 7
- 0.294. Intro Exercise Practice
- 0.295. FA Exercise Practice
- 0.296. Regular Language Exercise Practice
- 0.297. Sheet 5 Practice
- 0.298. List Iteration
- 0.299. List Iteration Visualizations
- 0.300. Classwork 8
- 0.301. Homework 8
- 0.302. Understanding this Course
- 0.302.1. Read the Course Syllabus
- 0.302.2. Who Is This Class For?
- 0.302.3. Students of Many Experience Levels
- 0.302.4. Online and Face-to-face Sections
- 0.302.5. Weekly Schedule
- 0.302.6. Reading Activities
- 0.302.7. Labs
- 0.302.8. Programming Assignments
- 0.302.9. Programming Language and Environment
- 0.302.10. Cheating and The Honor Code
- 0.302.11. Self-Check: Confirm Your Understanding
- 0.303. Getting Started
- 0.303.1. Installing BlueJ
- 0.303.2. Introducing LightBot
- 0.303.3. From LightBot to Micro Worlds
- 0.303.4. Self Check: Micro-Worlds
- 0.303.5. A Bit More LightBot
- 0.303.6. Textually Representing Programs
- 0.303.7. Self-Check: Turning Micro-Worlds into Code
- 0.303.8. What Does LightBot Say About Programming?
- 0.303.9. A Programmable LightBot in Java
- 0.303.10. Syntax Practice 1a
- 0.303.11. Creating New Objects
- 0.303.12. Calling Methods on an Object
- 0.303.13. Putting it All Together
- 0.303.14. A Word on Making Code Easy to Read
- 0.303.15. Syntax Practice 1b
- 0.303.16. Programming Practice 1
- 0.303.17. Check Your Understanding
- 0.304. Inheritance and Polymorphism: Subclasses and Methods
- 0.304.1. The Jeroos of Santong Island
- 0.304.2. Your Opinions on Course Grading Policies
- 0.304.3. Class Hierarchy and Inheritance
- 0.304.4. Summarizing: What is Inheritance?
- 0.304.5. Syntax Practice 2a: Jeroo Methods
- 0.304.6. Problem Solving and Algorithms
- 0.304.7. Creating and Using Jeroo Methods
- 0.304.8. What is Polymorphism?
- 0.304.9. Syntax Practice 2b: Subclass Constructors
- 0.304.10. Syntax Practice 2c: More Subclass Constructors
- 0.304.11. Programming Practice 2
- 0.304.12. Check Your Understanding
- 0.305. Conditional and Repeating Actions
- 0.305.1. Selection
- 0.305.2. Conditions Using Sensor Methods
- 0.305.3. An Overview of Conditional Statements
- 0.305.4. Java’s Syntax for the If-Then-Else Structure
- 0.305.5. Syntax Practice 3a: If-Then-Else
- 0.305.6. Creating Optional Statements With If-then
- 0.305.7. Java’s Syntax for the If-then Structure
- 0.305.8. Syntax Practice 3b: If-Then
- 0.305.9. Java’s Syntax for the Multi-way Selection Structure (a cascaded if)
- 0.305.10. Syntax Practice 3c: Multi-way If
- 0.305.11. Compound Conditions
- 0.305.12. Syntax Practice 3d: Compound Conditions
- 0.305.13. Repeating Actions
- 0.305.14. Generic Repetition Structures
- 0.305.15. Java’s Syntax for the While Loop
- 0.305.16. Syntax Practice 3e: While Loops
- 0.305.17. Programming Practice 3
- 0.305.18. Check Your Understanding
- 0.306. Software Testing
- 0.306.1. What Is Software Testing?
- 0.306.2. Writing Your First Software Test
- 0.306.3. Check Your Understanding: Software Testing Concepts
- 0.306.4. More About Methods
- 0.306.5. Check Your Understanding: Method Signatures
- 0.306.6. Check Your Understanding: Methods with Parameters
- 0.306.7. Good Habits for Conditionals
- 0.306.8. A Different Type of Complex If-Statement
- 0.306.9. Short Circuit Evaluation
- 0.306.10. Check Your Understanding: Logical Equivalence
- 0.306.11. Syntax Practice 4a: Compound Conditionals
- 0.306.12. Syntax Practice 4b: Conditionals and Relational Operators
- 0.306.13. Programming Practice 4
- 0.306.14. Module Review
- 0.307. Variables, Fields, and Parameters
- 0.307.1. Variables
- 0.307.2. Check Your Understanding: Variables
- 0.307.3. Fields Versus Local Variables
- 0.307.4. Changing Private Variables: Mutator Methods
- 0.307.5. Check your Understanding: Scope
- 0.307.6. Accessor Methods
- 0.307.7. Check Your Understanding: Fields, Getters and Setters
- 0.307.8. Syntax Practice 5a: Fields and Accessors
- 0.307.9. The Return Keyword
- 0.307.10. Check your Understanding: Typed Methods and Return Statements
- 0.307.11. Syntax Practice 5b: Mutators and Return Statements
- 0.307.12. Using Fields in Testing
- 0.307.13. Programming Practice 5a
- 0.307.14. Programming Practice 5b
- 0.308. Pictures and For-each Loops
- 0.309. Aggregation, Strings and More Loops
- 0.309.1. Object-Oriented Design: Aggregation, Composition, and Delegation
- 0.309.2. Strings and Characters
- 0.309.3. Check Your Understanding: Strings
- 0.309.4. Counter-controlled Loops
- 0.309.5. Check Your Understanding: Counter Controlled Loops
- 0.309.6. Tips on Random Numbers
- 0.309.7. Check Your Understanding: Random Numbers
- 0.309.8. Method Overriding
- 0.309.9. Check Your Understanding: Method Overriding
- 0.309.10. Syntax Practice 7a: For Loops and OO Design
- 0.309.11. Syntax Practice 7b: toString and Returning Values
- 0.309.12. Programming Practice 7a
- 0.309.13. Programming Practice 7b
- 0.310. Grouping Objects Using Lists and Nested For Loops
- 0.310.1. Collections of Objects
- 0.310.2. Interfaces
- 0.310.3. Check Your Understanding: Interfaces
- 0.310.4. Syntax Practice 8a: Strings
- 0.310.5. The List Interface
- 0.310.6. Generics
- 0.310.7. ArrayList
- 0.310.8. Check Your Understanding: ArrayLists
- 0.310.9. Syntax Practice 8b: Lists
- 0.310.10. Nested For Loops
- 0.310.11. Check Your Understanding: Nested For Loops
- 0.310.12. Syntax Practice 8c: Nested Loops
- 0.310.13. Check Your Understanding
- 0.310.14. Programming Practice 8a
- 0.310.15. Programming Practice 8b
- 0.311. Lists, Loop Idioms, Generics, and the Null Keyword
- 0.311.1. Modelling the Contents of a Library
- 0.311.2. Looping Idioms
- 0.311.3. Check Your Understanding: Loop Idioms
- 0.311.4. Syntax Practice 9a: Loop Idioms
- 0.311.5. Generics Revisited
- 0.311.6. Check Your Understanding: Generics
- 0.311.7. Syntax Practice 9b: Generics
- 0.311.8. The Null Keyword
- 0.311.9. Diagnosing a Null Pointer Exception
- 0.311.10. Check Your Understanding: Null
- 0.311.11. Using BlueJ’s Debugger
- 0.311.12. Using BlueJ’s Code Pad
- 0.311.13. Programming Practice 9a: Loop Idioms
- 0.311.14. Programming Practice 9b: Loops and Generics
- 0.312. Arrays
- 0.312.1. Creating An Array
- 0.312.2. Accessing Items in Arrays
- 0.312.3. Setting Items in an Array
- 0.312.4. Arrays Compared to Lists (or ArrayList)
- 0.312.5. Putting It All Together
- 0.312.6. Check Your Understanding: Arrays
- 0.312.7. Syntax Practice 10a
- 0.312.8. Iterating Over Arrays
- 0.312.9. Check Your Understanding: Iterating with Arrays
- 0.312.10. Syntax Practice 10b
- 0.312.11. Initializing Array Contents
- 0.312.12. Printing Arrays
- 0.312.13. Copying Array Variables
- 0.312.14. Naming Array Variables
- 0.312.15. Writing Test Assertions Involving Arrays
- 0.312.16. Applying Arrays in a Problem
- 0.312.17. Syntax Practice 10c
- 0.312.18. Check Your Understanding
- 0.312.19. Programming Practice 10a
- 0.312.20. Programming Practice 10b
- 0.313. Multi-dimensional Arrays
- 0.313.1. Dimensions in an Array
- 0.313.2. Check Your Understanding: 2D Arrays
- 0.313.3. Syntax Practice: 2D Array Basics
- 0.313.4. Iterating through a 2D Array
- 0.313.5. Check Your Understanding: Iterating with 2D Arrays
- 0.313.6. Syntax Practice: Looping Over 2D Arrays
- 0.313.7. Multi-Dimensional Arrays
- 0.313.8. Syntax Practice: 3D Arrays
- 0.313.9. But Can You Have Multi-dimensional Lists?
- 0.313.10. Integer Division and Modulus
- 0.313.11. Check Your Understanding: Modulus
- 0.313.12. Syntax Practice: Modulus
- 0.313.13. Programming Practice: Multi-dimensional Arrays
- 0.313.14. Programming Practice: Mod
- 0.314. Variable Scoping, Input, and Output
- 0.314.1. Variable Scoping
- 0.314.2. Summarizing Scope Concepts
- 0.314.3. Check Your Understanding: Scope
- 0.314.4. Syntax Practice: Scoping
- 0.314.5. Java Input and Output
- 0.314.6. Output Using PrintWriters
- 0.314.7. Check Your Understanding: Output
- 0.314.8. Input Using Scanners
- 0.314.9. A Complete Input Example
- 0.314.10. Check Your Understanding: Input
- 0.314.11. A Complete Input/Output Example
- 0.314.12. Testing I/O-based Operations
- 0.314.13. Check Your Understanding: Testing
- 0.315. Maps and Sets
- 0.315.1. The Map and Set Interfaces
- 0.315.2. The Map Interface
- 0.315.3. Syntax Practice: Making Maps
- 0.315.4. Adding and Accessing Pairs in a Map
- 0.315.5. Syntax Practice: Adding to Maps
- 0.315.6. Checking for and Removing Pairs in a Map
- 0.315.7. A Visual Summary of Using Map and HashMap
- 0.315.8. Syntax Practice: Map Contains and Remove
- 0.315.9. Looping Over Map Contents
- 0.315.10. Check Your Understanding: Maps
- 0.315.11. The Set Interface
- 0.315.12. Syntax Practice: Making A Set
- 0.315.13. Adding Values to a Set
- 0.315.14. Syntax Practice: Adding to a Set
- 0.315.15. Checking Values in a Set
- 0.315.16. Syntax Practice: Set Contains
- 0.315.17. Removing Values from a Set
- 0.315.18. Syntax Practice: Set Remove
- 0.315.19. Looping Over Sets
- 0.315.20. Check Your Understanding: Sets
- 0.315.21. Programming Practice: Maps
- 0.316. Static, Main, and Exceptions
- 0.316.1. The Main Method
- 0.316.2. Check Your Understanding: Main Methods
- 0.316.3. The Static Keyword
- 0.316.4. Check Your Understanding: The Static Keyword
- 0.316.5. Your Opinions on Course Grading Policies
- 0.316.6. Errors
- 0.316.7. Throwing Exceptions
- 0.316.8. Check Your Understanding: Throwing Exceptions
- 0.316.9. Syntax Practice: Throwing Exceptions
- 0.316.10. Try/Catch Blocks
- 0.316.11. Check Your Understanding: Try/Catch Blocks
- 0.316.12. Syntax Practice: Try-Catch Blocks