Preface v Special Features xxvi 1 Introduction 1 1.1 Computer Programs 2 1.2 The Anatomy of a Computer 3 1.3 The Java Programming Language 5 1.4 Becoming Familiar with Your Programming Environment 7 1.5 Analyzing Your First Program 11 1.6 Errors 13 1.7 PROBLEM SOLVING Algorithm Design 15 The Algorithm Concept 15 An Algorithm for Solving an Investment Problem 16 Pseudocode 17 From Algorithms to Programs 18 HT 1 Describing an Algorithm with Pseudocode 18 WE 1 Writing an Algorithm for Tiling a Floor 20 2 Using Objects 23 2.
1 Objects and Classes 24 Using Objects 24 Classes 25 2.2 Variables 26 Variable Declarations 26 Types 28 Names 29 Comments 30 Assignment 30 ST 1 Variable Type Inference 33 2.3 Calling Methods 33 The Public Interface of a Class 33 Method Arguments 34 Return Values 35 Method Declarations 36 2.4 Constructing Objects 38 2.5 Accessor and Mutator Methods 40 2.6 The API Documentation 41 Browsing the API Documentation 41 Packages 43 2.7 Implementing a Test Program 44 ST 2 Testing Classes in an Interactive Environment 45 WE 1 How Many Days Have You Been Alive? 46 WE 2 Working with Pictures 46 2.8 Object References 46 2.
9 Graphical Applications 49 Frame Windows 50 Drawing on a Component 51 Displaying a Component in a Frame 53 2.10 Ellipses, Lines, Text, and Color 54 Ellipses and Circles 54 Lines 55 Drawing Text 56 Colors 56 3 Implementing Classes 61 3.1 Instance Variables and Encapsulation 62 Instance Variables 62 The Methods of the Counter Class 64 Encapsulation 64 3.2 Specifying the Public Interface of a Class 66 Specifying Methods 66 Specifying Constructors 67 Using the Public Interface 69 Commenting the Public Interface 69 3.3 Providing the Class Implementation 72 Providing Instance Variables 72 Providing Constructors 73 Providing Methods 75 HT 1 Implementing a Class 78 WE 1 Making a Simple Menu 81 3.4 Unit Testing 81 3.5 PROBLEM SOLVING Tracing Objects 84 3.6 Local Variables 86 3.
7 The this Reference 88 ST 1 Calling One Constructor from Another 90 3.8 Shape Classes 90 HT 2 Drawing Graphical Shapes 94 4 Fundamental Data Types 99 4.1 Numbers 100 Number Types 100 Constants 102 ST 1 Big Numbers 106 4.2 Arithmetic 107 Arithmetic Operators 107 Increment and Decrement 107 Integer Division and Remainder 108 Powers and Roots 109 Converting Floating-Point Numbers to Integers 110 ST 2 Avoiding Negative Remainders 112 ST 3 Combining Assignment and Arithmetic 113 ST 4 Instance Methods and Static Methods 113 4.3 Input and Output 114 Reading Input 114 Formatted Output 115 HT 1 Carrying Out Computations 118 WE 1 Computing the Volume and Surface Area of a Pyramid 121 4.4 PROBLEM SOLVING First Do it By Hand 121 WE 2 Computing Travel Time 122 4.5 Strings 122 The String Type 122 Concatenation 123 String Input 124 Escape Sequences 124 Strings and Characters 124 Substrings 125 ST 5 Using Dialog Boxes for Input and Output 128 5 Decisions 131 5.1 The if Statement 132 ST 1 The Conditional Operator 137 5.
2 Comparing Values 137 Relational Operators 138 Comparing Floating-Point Numbers 139 Comparing Strings 140 Comparing Objects 141 Testing for null 141 HT 1 Implementing an if Statement 143 WE 1 Extracting the Middle 146 5.3 Multiple Alternatives 146 ST 2 The switch Statement 148 5.4 Nested Branches 149 ST 3 Block Scope 154 ST 4 Enumeration Types 155 5.5 PROBLEM SOLVING Flowcharts 156 5.6 PROBLEM SOLVING Selecting Test Cases 159 ST 5 Logging 161 5.7 Boolean Variables and Operators 161 ST 6 Short-Circuit Evaluation of Boolean Operators 165 ST 7 De Morgan''s Law 165 5.8 APPLICATION Input Validation 166 6 Loops 171 6.1 The while Loop 172 6.
2 PROBLEM SOLVING Hand-Tracing 179 6.3 The for Loop 183 ST 1 Variables Declared in a for Loop Header 189 6.4 The do Loop 190 6.5 APPLICATION Processing Sentinel Values 192 ST 2 Redirection of Input and Output 194 ST 3 The "Loop and a Half" Problem 194 ST 4 The break and continue Statements 195 6.6 PROBLEM SOLVING Storyboards 197 6.7 Common Loop Algorithms 199 Sum and Average Value 199 Counting Matches 200 Finding the First Match 200 Prompting Until a Match is Found 201 Maximum and Minimum 201 Comparing Adjacent Values 202 HT 1 Writing a Loop 203 WE 1 Credit Card Processing 206 6.8 Nested Loops 206 WE 2 Manipulating the Pixels in an Image 209 6.9 APPLICATION Random Numbers and Simulations 209 Generating Random Numbers 210 The Monte Carlo Method 211 6.
10 Using a Debugger 213 HT 2 Debugging 215 WE 3 A Sample Debugging Session 217 7 Arrays and Array Lists 221 7.1 Arrays 222 Declaring and Using Arrays 222 Array References 225 Using Arrays with Methods 226 Partially Filled Arrays 226 ST 1 Methods with a Variable Number of Arguments 229 7.2 The Enhanced for Loop 230 7.3 Common Array Algorithms 232 Filling 232 Sum and Average Value 232 Maximum and Minimum 232 Element Separators 232 Linear Search 233 Removing an Element 234 Inserting an Element 234 Swapping Elements 236 Copying Arrays 237 Reading Input 238 ST 2 Sorting with the Java Library 240 7.4 PROBLEM SOLVING Adapting Algorithms 240 HT 1 Working with Arrays 242 WE 1 Rolling the Dice 245 7.5 PROBLEM SOLVING Discovering Algorithms by Manipulating Physical Objects 245 7.6 Two-Dimensional Arrays 248 Declaring Two-Dimensional Arrays 248 Accessing Elements 249 Locating Neighboring Elements 250 Accessing Rows and Columns 251 Two-Dimensional Array Parameters 252 WE 2 A World Population Table 253 ST 3 Two-Dimensional Arrays with Variable Row Lengths 254 ST 4 Multidimensional Arrays 255 7.7 Array Lists 255 Declaring and Using Array Lists 255 Using the Enhanced for Loop with Array Lists 258 Copying Array Lists 259 Wrappers and Auto-boxing 259 Using Array Algorithms with Array Lists 260 Storing Input Values in an Array List 261 Removing Matches 261 Choosing Between Array Lists and Arrays 262 ST 5 The Diamond Syntax 264 7.
8 Regression Testing 264 8 Designing Classes 271 8.1 Discovering Classes 272 8.2 Designing Good Methods 273 Providing a Cohesive Public Interface 273 Minimizing Dependencies 274 Separating Accessors and Mutators 275 Minimizing Side Effects 276 ST 1 Call by Value and Call by Reference 278 8.3 PROBLEM SOLVING Patterns for Object Data 282 Keeping a Total 282 Counting Events 283 Collecting Values 283 Managing Properties of an Object 284 Modeling Objects with Distinct States 284 Describing the Position of an Object 285 8.4 Static Variables and Methods 286 ST 2 Alternative Forms of Instance and Static Variable Initialization 289 ST 3 Static Imports 290 8.5 PROBLEM SOLVING Solve a Simpler Problem First 291 8.6 Packages 295 Organizing Related Classes into Packages 295 Importing Packages 296 Package Names 297 Packages and Source Files 297 ST 4 Package Access 298 HT 1 Programming with Packages 299 8.7 Unit Test Frameworks 300 Inheritance 305 9.
1 Inheritance Hierarchies 306 9.2 Implementing Subclasses 310 9.3 Overriding Methods 314 ST 1 Calling the Superclass Constructor 318 9.4 Polymorphism 319 ST 2 Dynamic Method Lookup and the Implicit Parameter 322 ST 3 Abstract Classes 323 ST 4 Final Methods and Classes 324 ST 5 Protected Access 324 HT 1 Developing an Inheritance Hierarchy 325 WE 1 Implementing an Employee Hierarchy for Payroll Processing 330 9.5 Object: The Cosmic Superclass 330 Overriding the toString Method 330 The equals Method 332 The instanceof Operator 333 ST 6 Inheritance and the toString Method 335 ST 7 Inheritance and the equals Method 336 10 Interfaces 339 10.1 Using Interfaces for Algorithm Reuse 340 Discovering an Interface Type 340 Declaring an Interface Type 341 Implementing an Interface Type 343 Comparing Interfaces and Inheritance 345 ST 1 Constants in Interfaces 346 ST 2 Nonabstract Interface Methods 347 10.2 Working with Interface Variables 348 Converting from Classes to Interfaces 348 Invoking Methods on Interface Variables 349 Casting from Interfaces to Classes 349 WE 1 Investigating Number Sequences 350 10.3 The Comparable Interface 350 ST 3 The clone Method and the Cloneable Interface 352 10.
4 Using Interfaces for Callbacks 355 ST 4 Lambda Expressions 358 ST 5 Generic Interface Types 360 10.5 Inner Classes 360 10.6 Mock Objects 361 10.7 Event.