100% found this document useful (1 vote)
10 views58 pages

(Ebook PDF) Starting Out With Java: From Control Structures Through Data Structures 3rd Edition PDF Download

The document provides links to various eBooks related to Java and C++ programming, including multiple editions of 'Starting Out with Java' and 'Data Structures and Abstractions with Java.' It emphasizes the availability of these resources for download at ebooksecure.com. Additionally, it contains a detailed table of contents for the Java programming book, covering topics from control structures to data structures and file handling.

Uploaded by

yriqqizpx7103
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
100% found this document useful (1 vote)
10 views58 pages

(Ebook PDF) Starting Out With Java: From Control Structures Through Data Structures 3rd Edition PDF Download

The document provides links to various eBooks related to Java and C++ programming, including multiple editions of 'Starting Out with Java' and 'Data Structures and Abstractions with Java.' It emphasizes the availability of these resources for download at ebooksecure.com. Additionally, it contains a detailed table of contents for the Java programming book, covering topics from control structures to data structures and file handling.

Uploaded by

yriqqizpx7103
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 58

(eBook PDF) Starting Out with Java: From Control

Structures through Data Structures 3rd Edition


install download

https://ebooksecure.com/product/ebook-pdf-starting-out-with-java-
from-control-structures-through-data-structures-3rd-edition/

Download more ebook instantly today at https://ebooksecure.com


We believe these products will be a great fit for you. Click
the link to download now, or visit ebooksecure.com
to discover even more!

(eBook PDF) Starting Out with Java: From Control


Structures through Data Structures 4th Edition

http://ebooksecure.com/product/ebook-pdf-starting-out-with-java-
from-control-structures-through-data-structures-4th-edition/

(eBook PDF) Starting Out with Java: From Control


Structures through Objects, 7th Edition

http://ebooksecure.com/product/ebook-pdf-starting-out-with-java-
from-control-structures-through-objects-7th-edition/

(eBook PDF) Starting Out with C++: From Control


Structures through Objects 8th Edition

http://ebooksecure.com/product/ebook-pdf-starting-out-with-c-
from-control-structures-through-objects-8th-edition/

(eBook PDF) Starting Out with C++: From Control


Structures through Objects, Brief Version 8th Edition

http://ebooksecure.com/product/ebook-pdf-starting-out-with-c-
from-control-structures-through-objects-brief-version-8th-
edition/
(eBook PDF) Starting Out with C++ from Control
Structures to Objects 9th Edition

http://ebooksecure.com/product/ebook-pdf-starting-out-with-c-
from-control-structures-to-objects-9th-edition/

(eBook PDF) Data Structures and Abstractions with Java


4th Edition

http://ebooksecure.com/product/ebook-pdf-data-structures-and-
abstractions-with-java-4th-edition/

Data Structures and Abstractions with Java 5th Edition


(eBook PDF)

http://ebooksecure.com/product/data-structures-and-abstractions-
with-java-5th-edition-ebook-pdf/

(eBook PDF) Data Structures and Abstractions with Java


4th Global Edition

http://ebooksecure.com/product/ebook-pdf-data-structures-and-
abstractions-with-java-4th-global-edition/

(eBook PDF) Starting Out with Java: Early Objects 5th


Edition

http://ebooksecure.com/product/ebook-pdf-starting-out-with-java-
early-objects-5th-edition/
Contents vii

Having Multiple Conditionally Executed Statements . . . . . . . . . . . . . . . . 119


Flags . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 120
Comparing Characters . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 120
3.2 The if-else Statement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 121
3.3 Nested if Statements . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 124
3.4 The if-else-if Statement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 131
3.5 Logical Operators . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 137
The Precedence of Logical Operators . . . . . . . . . . . . . . . . . . . . . . . . . . . 143
Checking Numeric Ranges with Logical Operators . . . . . . . . . . . . . . . . . 144
3.6 Comparing String Objects . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 145
Ignoring Case in String Comparisons . . . . . . . . . . . . . . . . . . . . . . . . . . . 150
3.7 More about Variable Declaration and Scope . . . . . . . . . . . . . . . . . . . 151
3.8 The Conditional Operator (Optional) . . . . . . . . . . . . . . . . . . . . . . . . 152
3.9 The switch Statement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 154
3.10 Displaying Formatted Output with System.out.printf
and String.format . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 164
Format Specifier Syntax . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 167
Precision . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 167
Specifying a Minimum Field Width . . . . . . . . . . . . . . . . . . . . . . . . . . . . 168
Flags . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 170
Formatting String Arguments . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 174
The String.format Method . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 175
3.11 Common Errors to Avoid . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 178
Review Questions and Exercises   179
Programming Challenges   184

Chapter 4 Loops and Files   189


4.1 The Increment and Decrement Operators . . . . . . . . . . . . . . . . . . . . . 189
The Difference between Postfix and Prefix Modes . . . . . . . . . . . . . . . . . . 192
4.2 The while Loop . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 193
The while Loop Is a Pretest Loop . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 196
Infinite Loops . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 196
Don’t Forget the Braces with a Block of Statements . . . . . . . . . . . . . . . . 197
Programming Style and the while Loop . . . . . . . . . . . . . . . . . . . . . . . . 198
4.3 Using the while Loop for Input Validation . . . . . . . . . . . . . . . . . . . . 200
4.4 The do-while Loop . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 204
4.5 The for Loop . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 207
The for Loop Is a Pretest Loop . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 210
Avoid Modifying the Control Variable in the Body
of the for Loop . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 211
Other Forms of the Update Expression . . . . . . . . . . . . . . . . . . . . . . . . . . 211
Declaring a Variable in the for Loop’s Initialization Expression . . . . . . . 211
Creating a User Controlled for Loop . . . . . . . . . . . . . . . . . . . . . . . . . . . 212
Using Multiple Statements in the Initialization
and Update Expressions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 213
viii Contents

4.6 Running Totals and Sentinel Values . . . . . . . . . . . . . . . . . . . . . . . . . . 216


Using a Sentinel Value . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 219
4.7 Nested Loops . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 221
4.8 The break and continue Statements (Optional) . . . . . . . . . . . . . . . . 229
4.9 Deciding Which Loop to Use . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 229
4.10 Introduction to File Input and Output . . . . . . . . . . . . . . . . . . . . . . . . 230
Using the PrintWriter Class to Write Data to a File . . . . . . . . . . . . . . . 230
Appending Data to a File . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 236
Specifying the File Location . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 237
Reading Data from a File . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 237
Reading Lines from a File with the nextLine Method . . . . . . . . . . . . . . . 238
Adding a throws Clause to the Method Header . . . . . . . . . . . . . . . . . . . 241
Checking for a File’s Existence . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 245
4.11 Generating Random Numbers with the Random Class . . . . . . . . . . . . 249
4.12 Common Errors to Avoid . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 255
Review Questions and Exercises   256
Programming Challenges   262

Chapter 5 Methods   269


5.1 Introduction to Methods . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 269
void Methods and Value-Returning Methods . . . . . . . . . . . . . . . . . . . . 270
Defining a void Method . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 271
Calling a Method . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 272
Hierarchical Method Calls . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 277
Using Documentation Comments with Methods . . . . . . . . . . . . . . . . . . 278
5.2 Passing Arguments to a Method . . . . . . . . . . . . . . . . . . . . . . . . . . . . 279
Argument and Parameter Data Type Compatibility . . . . . . . . . . . . . . . . 281
Parameter Variable Scope . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 282
Passing Multiple Arguments . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 282
Arguments Are Passed by Value . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 284
Passing Object References to a Method . . . . . . . . . . . . . . . . . . . . . . . . . 285
Using the @param Tag in Documentation Comments . . . . . . . . . . . . . . . 288
5.3 More about Local Variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 291
Local Variable Lifetime . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 292
Initializing Local Variables with Parameter Values . . . . . . . . . . . . . . . . . 292
5.4 Returning a Value from a Method . . . . . . . . . . . . . . . . . . . . . . . . . . . 293
Defining a Value-Returning Method . . . . . . . . . . . . . . . . . . . . . . . . . . . 293
Calling a Value-Returning Method . . . . . . . . . . . . . . . . . . . . . . . . . . . . 295
Using the @return Tag in Documentation Comments . . . . . . . . . . . . . . 296
Returning a boolean Value . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 300
Returning a Reference to an Object . . . . . . . . . . . . . . . . . . . . . . . . . . . . 300
5.5 Problem Solving with Methods . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 302
Calling Methods That Throw Exceptions . . . . . . . . . . . . . . . . . . . . . . . . 306
5.6 Common Errors to Avoid . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 306
Review Questions and Exercises   307
Programming Challenges   312
Contents ix

Chapter 6 A First Look at Classes   319


6.1 Objects and Classes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 319
Classes: Where Objects Come From . . . . . . . . . . . . . . . . . . . . . . . . . . . . 320
Classes in the Java API . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 321
Primitive Variables vs. Objects . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 323
6.2 Writing a Simple Class, Step by Step . . . . . . . . . . . . . . . . . . . . . . . . . 326
Accessor and Mutator Methods . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 340
The Importance of Data Hiding . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 340
Avoiding Stale Data . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 341
Showing Access Specification in UML Diagrams . . . . . . . . . . . . . . . . . . . 341
Data Type and Parameter Notation in UML Diagrams . . . . . . . . . . . . . .341
Layout of Class Members . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 342
6.3 Instance Fields and Methods . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 343
6.4 Constructors . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 348
Showing Constructors in a UML Diagram . . . . . . . . . . . . . . . . . . . . . . . 350
Uninitialized Local Reference Variables . . . . . . . . . . . . . . . . . . . . . . . . . 350
The Default Constructor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 350
Writing Your Own No-Arg Constructor . . . . . . . . . . . . . . . . . . . . . . . . . 351
The String Class Constructor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 352
6.5 Passing Objects as Arguments . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 360
6.6 Overloading Methods and Constructors . . . . . . . . . . . . . . . . . . . . . . 372
The BankAccount Class . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 374
Overloaded Methods Make Classes More Useful . . . . . . . . . . . . . . . . . . 380
6.7 Scope of Instance Fields . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 380
Shadowing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 381
6.8 Packages and import Statements . . . . . . . . . . . . . . . . . . . . . . . . . . . . 382
Explicit and Wildcard import Statements . . . . . . . . . . . . . . . . . . . . . . . . 382
The java.lang Package . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 383
Other API Packages . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 383
6.9 Focus on Object-Oriented Design: Finding the Classes
and Their Responsibilities . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 384
Finding the Classes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 384
Identifying a Class’s Responsibilities . . . . . . . . . . . . . . . . . . . . . . . . . . . 387
This Is Only the Beginning . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 390
6.10 Common Errors to Avoid . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 390
Review Questions and Exercises   391
Programming Challenges   396

Chapter 7 Arrays and the ArrayList Class   405


7.1 Introduction to Arrays . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 405
Accessing Array Elements . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 407
Inputting and Outputting Array Contents . . . . . . . . . . . . . . . . . . . . . . . 408
Java Performs Bounds Checking . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 411
Watch Out for Off-by-One Errors . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 412
Array Initialization . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 413
Alternate Array Declaration Notation . . . . . . . . . . . . . . . . . . . . . . . . . . 414
x Contents

7.2 Processing Array Elements . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 415


Array Length . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 417
The Enhanced for Loop . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 418
Letting the User Specify an Array’s Size . . . . . . . . . . . . . . . . . . . . . . . . . 419
Reassigning Array Reference Variables . . . . . . . . . . . . . . . . . . . . . . . . . . 421
Copying Arrays . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 422
7.3 Passing Arrays as Arguments to Methods . . . . . . . . . . . . . . . . . . . . . 424
7.4 Some Useful Array Algorithms and Operations . . . . . . . . . . . . . . . . . 428
Comparing Arrays . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 428
Summing the Values in a Numeric Array . . . . . . . . . . . . . . . . . . . . . . . . 429
Getting the Average of the Values in a Numeric Array . . . . . . . . . . . . . . 430
Finding the Highest and Lowest Values in a Numeric Array . . . . . . . . . . 430
The SalesData Class . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 431
Partially Filled Arrays . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 439
Working with Arrays and Files . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 440
7.5 Returning Arrays from Methods . . . . . . . . . . . . . . . . . . . . . . . . . . . . 441
7.6 String Arrays . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 443
Calling String Methods from an Array Element . . . . . . . . . . . . . . . . . . . 445
7.7 Arrays of Objects . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 446
7.8 The Sequential Search Algorithm . . . . . . . . . . . . . . . . . . . . . . . . . . . . 449
7.9 Two-Dimensional Arrays . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 452
Initializing a Two-Dimensional Array . . . . . . . . . . . . . . . . . . . . . . . . . . . 456
The length Field in a Two-Dimensional Array . . . . . . . . . . . . . . . . . . . . 457
Displaying All the Elements of a Two-Dimensional Array . . . . . . . . . . . . 459
Summing All the Elements of a Two-Dimensional Array . . . . . . . . . . . . . 459
Summing the Rows of a Two-Dimensional Array . . . . . . . . . . . . . . . . . . 460
Summing the Columns of a Two-Dimensional Array . . . . . . . . . . . . . . . 460
Passing Two-Dimensional Arrays to Methods . . . . . . . . . . . . . . . . . . . . .461
Ragged Arrays . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 463
7.10 Arrays with Three or More Dimensions . . . . . . . . . . . . . . . . . . . . . . . 464
7.11 The Selection Sort and the Binary Search Algorithms . . . . . . . . . . . . . 465
The Selection Sort Algorithm . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 465
The Binary Search Algorithm . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 468
7.12 Command-Line Arguments and Variable-Length Argument Lists . . . . 470
Command-Line Arguments . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 471
Variable-Length Argument Lists . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 472
7.13 The ArrayList Class . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 474
Creating and Using an ArrayList Object . . . . . . . . . . . . . . . . . . . . . . . 475
Using the Enhanced for Loop with an ArrayList . . . . . . . . . . . . . . . . . 476
The ArrayList Class’s toString method . . . . . . . . . . . . . . . . . . . . . . . . 477
Removing an Item from an ArrayList . . . . . . . . . . . . . . . . . . . . . . . . . .478
Inserting an Item . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 479
Replacing an Item . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 480
Capacity . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 481
Using the Diamond Operator for Type Inference (Java 7) . . . . . . . . . . . . 482
7.14 Common Errors to Avoid . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 483
Contents xi

Review Questions and Exercises   483


Programming Challenges   488

Chapter 8 A Second Look at Classes and Objects   495


8.1 Static Class Members . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 495
A Quick Review of Instance Fields and Instance Methods . . . . . . . . . . . . 495
Static Members . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 496
Static Fields . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 496
Static Methods . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 499
8.2 Passing Objects as Arguments to Methods . . . . . . . . . . . . . . . . . . . . 502
8.3 Returning Objects from Methods . . . . . . . . . . . . . . . . . . . . . . . . . . . 505
8.4 The toString Method . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 507
8.5 Writing an equals Method . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 511
8.6 Methods That Copy Objects . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 514
Copy Constructors . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 516
8.7 Aggregation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 517
Aggregation in UML Diagrams . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 525
Security Issues with Aggregate Classes . . . . . . . . . . . . . . . . . . . . . . . . . 525
Avoid Using null References . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 527
8.8 The this Reference Variable . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 530
Using this to Overcome Shadowing . . . . . . . . . . . . . . . . . . . . . . . . . . . 531
Using this to Call an Overloaded Constructor
from Another Constructor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 532
8.9 Enumerated Types . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 533
Enumerated Types Are Specialized Classes . . . . . . . . . . . . . . . . . . . . . . . 534
Switching On an Enumerated Type . . . . . . . . . . . . . . . . . . . . . . . . . . . . 540
8.10 Garbage Collection . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 542
The finalize Method . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 544
8.11 Focus on Object-Oriented Design: Class Collaboration . . . . . . . . . . . 544
Determining Class Collaborations with CRC Cards . . . . . . . . . . . . . . . . . 547
8.12 Common Errors to Avoid . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 548
Review Questions and Exercises   549
Programming Challenges   553

Chapter 9 Text Processing and More


about Wrapper Classes   559
9.1 Introduction to Wrapper Classes . . . . . . . . . . . . . . . . . . . . . . . . . . . . 559
9.2 Character Testing and Conversion with the Character Class . . . . . . . 560
Character Case Conversion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 565
9.3 More String Methods . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 568
Searching for Substrings . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 568
Extracting Substrings . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 575
Methods That Return a Modified String . . . . . . . . . . . . . . . . . . . . . . . . 579
The Static valueOf Methods . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 580
xii Contents

9.4 The StringBuilder Class . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 582


The StringBuilder Constructors . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 583
Other StringBuilder Methods . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 584
The toString Method . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 587
9.5 Tokenizing Strings . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 593
9.6 Wrapper Classes for the Numeric Data Types . . . . . . . . . . . . . . . . . . 597
The Static toString Methods . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 598
The toBinaryString, toHexString, and toOctalString Methods . . . . . 598
The MIN_VALUE and MAX_VALUE Constants . . . . . . . . . . . . . . . . . . . . . . . 598
Autoboxing and Unboxing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 598
9.7 Focus on Problem Solving: The TestScoreReader Class . . . . . . . . . . . 600
9.8 Common Errors to Avoid . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 604
Review Questions and Exercises   605
Programming Challenges   608

Chapter 10 Inheritance   613


10.1 What Is Inheritance? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 613
Generalization and Specialization . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 613
Inheritance and the “Is a” Relationship . . . . . . . . . . . . . . . . . . . . . . . . . 614
Inheritance in UML Diagrams . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 622
The Superclass’s Constructor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 623
Inheritance Does Not Work in Reverse . . . . . . . . . . . . . . . . . . . . . . . . . . 625
10.2 Calling the Superclass Constructor . . . . . . . . . . . . . . . . . . . . . . . . . . 626
When the Superclass Has No Default
or No-Arg Constructors . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 632
Summary of Constructor Issues in Inheritance . . . . . . . . . . . . . . . . . . . . 633
10.3 Overriding Superclass Methods . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 634
Overloading versus Overriding . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 639
Preventing a Method from Being Overridden . . . . . . . . . . . . . . . . . . . . . 642
10.4 Protected Members . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 643
Package Access . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 648
10.5 Chains of Inheritance . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 649
Class Hierarchies . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 655
10.6 The Object Class . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 655
10.7 Polymorphism . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 657
Polymorphism and Dynamic Binding . . . . . . . . . . . . . . . . . . . . . . . . . . . 658
The “Is-a” Relationship Does Not Work in Reverse . . . . . . . . . . . . . . . . . 660
The instanceof Operator . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 661
10.8 Abstract Classes and Abstract Methods . . . . . . . . . . . . . . . . . . . . . . . 662
Abstract Classes in UML . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 668
10.9 Interfaces . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 669
An Interface is a Contract . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 671
Fields in Interfaces . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 675
Implementing Multiple Interfaces . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 675
Interfaces in UML . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 675
Contents xiii

Default Methods . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 676


Polymorphism and Interfaces . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 678
10.10 Anonymous Inner Classes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 683
10.11 Functional Interfaces and Lambda Expressions . . . . . . . . . . . . . . . . . 686
10.12 Common Errors to Avoid . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 691
Review Questions and Exercises   692
Programming Challenges   698

Chapter 11 Exceptions and Advanced File I/O   703


11.1 Handling Exceptions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 703
Exception Classes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 704
Handling an Exception . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 705
Retrieving the Default Error Message . . . . . . . . . . . . . . . . . . . . . . . . . . . 709
Polymorphic References to Exceptions . . . . . . . . . . . . . . . . . . . . . . . . . . 712
Using Multiple catch Clauses to Handle Multiple Exceptions . . . . . . . . . 712
The finally Clause . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 720
The Stack Trace . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 722
Handling Multiple Exceptions with One catch Clause (Java 7) . . . . . . . . 723
When an Exception Is Not Caught . . . . . . . . . . . . . . . . . . . . . . . . . . . . 725
Checked and Unchecked Exceptions . . . . . . . . . . . . . . . . . . . . . . . . . . . 726
11.2 Throwing Exceptions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 727
Creating Your Own Exception Classes . . . . . . . . . . . . . . . . . . . . . . . . . . 730
Using the @exception Tag in Documentation Comments . . . . . . . . . . . . 733
11.3 Advanced Topics: Binary Files, Random Access Files,
and Object Serialization . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 734
Binary Files . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 734
Random Access Files . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 741
Object Serialization . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 746
Serializing Aggregate Objects . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 750
11.4 Common Errors to Avoid . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 751
Review Questions and Exercises   751
Programming Challenges   757

Chapter 12 A First Look at GUI Applications   761


12.1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 761
The JFC, AWT, and Swing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 762
Event-Driven Programming . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 764
The javax.swing and java.awt Packages . . . . . . . . . . . . . . . . . . . . . . . 764
12.2 Creating Windows . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 764
Using Inheritance to Extend the JFrame Class . . . . . . . . . . . . . . . . . . . . 767
Equipping GUI Classes with a main Method . . . . . . . . . . . . . . . . . . . . . . 769
Adding Components to a Window . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 771
Handling Events with Action Listeners . . . . . . . . . . . . . . . . . . . . . . . . . . 777
xiv Contents

Writing an Event Listener for the KiloConverter Class . . . . . . . . . . . . . . 779


Background and Foreground Colors . . . . . . . . . . . . . . . . . . . . . . . . . . . . 784
The ActionEvent Object . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 788
12.3 Layout Managers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 793
Adding a Layout Manager to a Container . . . . . . . . . . . . . . . . . . . . . . . 794
The FlowLayout Manager . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 794
The BorderLayout Manager . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 797
The GridLayout Manager . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 804
12.4 Radio Buttons and Check Boxes . . . . . . . . . . . . . . . . . . . . . . . . . . . . 810
Radio Buttons . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 810
Check Boxes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 816
12.5 Borders . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 821
12.6 Focus on Problem Solving: Extending Classes from JPanel . . . . . . . . 824
The Brandi’s Bagel House Application . . . . . . . . . . . . . . . . . . . . . . . . . . 824
The GreetingPanel Class . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 825
The BagelPanel Class . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 826
The ToppingPanel Class . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 828
The CoffeePanel Class . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 830
Putting It All Together . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 832
12.7 Splash Screens . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 836
12.8 Using Console Output to Debug a GUI Application . . . . . . . . . . . . . . 837
12.9 Common Errors to Avoid . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 842
Review Questions and Exercises   842
Programming Challenges   845

Chapter 13 Advanced GUI Applications   849


13.1 The Swing and AWT Class Hierarchy . . . . . . . . . . . . . . . . . . . . . . . . . 849
13.2 Read-Only Text Fields . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 850
13.3 Lists . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 852
Selection Modes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 852
Responding to List Events . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 853
Retrieving the Selected Item . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 854
Placing a Border around a List . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 858
Adding a Scroll Bar to a List . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 858
Adding Items to an Existing JList Component . . . . . . . . . . . . . . . . . . . 863
Multiple Selection Lists . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 863
13.4 Combo Boxes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 868
Retrieving the Selected Item . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 869
13.5 Displaying Images in Labels and Buttons . . . . . . . . . . . . . . . . . . . . . . 874
13.6 Mnemonics and Tool Tips . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 880
Mnemonics . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 880
Tool Tips . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 882
13.7 File Choosers and Color Choosers . . . . . . . . . . . . . . . . . . . . . . . . . . . 882
File Choosers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 883
Color Choosers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 885
Contents xv

13.8 Menus . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 886


13.9 More about Text Components: Text Areas and Fonts . . . . . . . . . . . . . 895
Text Areas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 895
Fonts . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 898
13.10 Sliders . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 899
13.11 Look and Feel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 904
13.12 Common Errors to Avoid . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 906
Review Questions and Exercises   907
Programming Challenges   912

Chapter 14 Applets and More   917


14.1 Introduction to Applets . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 917
14.2 A Brief Introduction to HTML . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 919
Hypertext . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 919
Markup Language . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 920
Document Structure Tags . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 920
Text Formatting Tags . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 922
Creating Breaks in Text . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 924
Inserting Links . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 927
14.3 Creating Applets with Swing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 928
Running an Applet . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 930
Handling Events in an Applet . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 932
14.4 Using AWT for Portability . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 937
14.5 Drawing Shapes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 942
The XY Coordinate System . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 942
Graphics Objects . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 942
The repaint Method . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 956
Drawing on Panels . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 957
14.6 Handling Mouse Events . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 963
Handling Mouse Events . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 963
14.7 Timer Objects . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 973
14.8 Playing Audio . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 977
Using an AudioClip Object . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 978
Playing Audio in an Application . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 981
14.9 Common Errors to Avoid . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 982
Review Questions and Exercises   982
Programming Challenges   988

Chapter 15 Creating GUI Applications with JavaFX   991


15.1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 991
Event-Driven Programming . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 993
15.2 Stages and Scenes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 993
15.3 Scene Graphs and Nodes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 995
Creating a Scene . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 997
xvi Contents

15.4 Panes and Component Layout . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 999


VBox and HBox . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 999
Margin and Padding . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .1001
Nested Layouts . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1003
15.5 Events and Event Handling . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1004
Passing Information to Event Handlers . . . . . . . . . . . . . . . . . . . . . . . . 1006
Using Inner Classes for Event Handling . . . . . . . . . . . . . . . . . . . . . . . . 1009
Using Anonymous Local Inner Classes for Event Handling . . . . . . . . . . 1010
Using Lambda Expressions for Event Handling . . . . . . . . . . . . . . . . . . . 1011
15.6 Determining the Target of an Event . . . . . . . . . . . . . . . . . . . . . . . . . 1012
15.7 Radio Buttons and Check Boxes . . . . . . . . . . . . . . . . . . . . . . . . . . . 1015
Programming with Check Boxes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1019
Responding to Radio Button and Check Box events . . . . . . . . . . . . . . . 1020
15.8 Displaying Images . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1020
15.9 Timeline Animation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1022
15.10 Text Input Controls, Panes, and CSS Styling . . . . . . . . . . . . . . . . . . 1026
Text Input Controls . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1026
Using CSS to Style Nodes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1028
Preferred Width and Height of Components . . . . . . . . . . . . . . . . . . . . . 1029
TilePane . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1029
BorderPane . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1031
GridPane . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1033
Additional Panes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1034
15.11 Common Errors to Avoid . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1035
Review Questions and Exercises   1035
Programming Challenges   1038

Chapter 16 Recursion   1041


16.1 Introduction to Recursion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1041
16.2 Solving Problems with Recursion . . . . . . . . . . . . . . . . . . . . . . . . . . . 1044
Direct and Indirect Recursion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1048
16.3 Examples of Recursive Methods . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1049
Summing a Range of Array Elements with Recursion . . . . . . . . . . . . . . 1049
Drawing Concentric Circles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1050
The Fibonacci Series . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1052
Finding the Greatest Common Divisor . . . . . . . . . . . . . . . . . . . . . . . . . 1054
16.4 A Recursive Binary Search Method . . . . . . . . . . . . . . . . . . . . . . . . . . 1055
16.5 The Towers of Hanoi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1058
16.6 Common Errors to Avoid . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1063
Review Questions and Exercises   1063
Programming Challenges   1066

Chapter 17 Sorting, Searching, and Algorithm Analysis   1069


17.1 Introduction to Sorting Algorithms . . . . . . . . . . . . . . . . . . . . . . . . . . 1069
The Bubble Sort . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1069
Contents xvii

Using the Bubble Sort to Sort Objects . . . . . . . . . . . . . . . . . . . . . . . . . 1075


The Selection Sort . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1078
Using the Selection Sort to Sort Objects . . . . . . . . . . . . . . . . . . . . . . . . 1082
The Insertion Sort . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1084
Using the Insertion Sort to Sort Objects . . . . . . . . . . . . . . . . . . . . . . . . 1089
The Quicksort Algorithm . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1090
Using Quicksort to Sort Objects . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1094
17.2 Introduction to Search Algorithms . . . . . . . . . . . . . . . . . . . . . . . . . . 1094
The Sequential Search Algorithm . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1094
Average Case Analysis of the Sequential Search . . . . . . . . . . . . . . . . . . 1097
The Binary Search . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1097
Efficiency of the Binary Search . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1101
A Recursive Binary Search . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1101
17.3  Analysis of Algorithms . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1105
Computational Problems and Basic Steps . . . . . . . . . . . . . . . . . . . . . . 1106
Complexity of Algorithms . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1107
Worst Case Complexity of Algorithms . . . . . . . . . . . . . . . . . . . . . . . . . 1108
Average Case Complexity . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1109
Asymptotic Complexity and the Big O Notation . . . . . . . . . . . . . . . . . . 1110
17.4 Common Errors to Avoid . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1114
Review Questions and Exercises   1115
Programming Challenges   1118

Chapter 18 Generics   1121


18.1 Introduction to Generics . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1121
Using the Diamond Operator for Type Inference . . . . . . . . . . . . . . . . . 1124
18.2 Writing a Generic Class . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1124
Only Reference Types Can Be Passed to Type Parameters . . . . . . . . . . . 1129
Instantiating a Generic Class without Specifying a Type Argument . . . . 1130
Commonly Used Type Parameter Names . . . . . . . . . . . . . . . . . . . . . . . 1132
18.3 Passing Objects of a Generic Class to a Method . . . . . . . . . . . . . . . 1132
Constraining a Type Parameter . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1134
Defining a Type Parameter in a Method Header . . . . . . . . . . . . . . . . . 1136
The extends Key Word Constrains a Type to an Upper Bound . . . . . . . 1137
The super Key Word Constrains a Type to a Lower Bound . . . . . . . . . . 1137
18.4 Writing Generic Methods . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1138
18.5 Constraining a Type Parameter in a Generic Class . . . . . . . . . . . . . . 1139
18.6 Inheritance and Generic Classes . . . . . . . . . . . . . . . . . . . . . . . . . . . 1142
18.7 Defining Multiple Type Parameters . . . . . . . . . . . . . . . . . . . . . . . . . 1146
18.8 Generics and Interfaces . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1149
Constraining a Type Parameter to a Type That Implements
an Interface . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1150
18.9 Erasure . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1155
18.10 Restrictions on the Use of Generic Types . . . . . . . . . . . . . . . . . . . . . 1158
xviii Contents

18.11 Common Errors to Avoid . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1160


Review Questions and Exercises   1161
Programming Challenges   1164

Chapter 19 Collections and the Stream API   1167


19.1 Introduction to the Java Collections Framework . . . . . . . . . . . . . . . 1167
Lists, Sets, and Maps . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1167
Java Functional Interfaces . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1168
JCF Interfaces . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1168
Iterating a Collection . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1169
The Iterable Interface and the forEach method . . . . . . . . . . . . . . . . 1169
Iterators . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1170
The Enhanced For Loop . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1173
The Collection Interface . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1173
19.2 Lists . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1175
The List Interface . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1176
The ArrayList and LinkedList Classes . . . . . . . . . . . . . . . . . . . . . . . 1177
Creating and Initializing Lists . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1178
List Iterators . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1179
Methods of the LinkedList Class . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1182
Using an Interface Variable to Reference a Collection Object . . . . . . . 1183
19.3 Sets . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1185
The Set Interface . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1185
The HashSet Class . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1185
Implementing Your Own hashCode Method . . . . . . . . . . . . . . . . . . . . . 1190
The LinkedHashSet Class . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1194
The SortedSet Interface and the TreeSet Class . . . . . . . . . . . . . . . . . 1195
Using a Comparator to Compare Objects . . . . . . . . . . . . . . . . . . . . . . 1198
19.4 Maps . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1200
The HashMap Class . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1202
The LinkedHashMap Class . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1208
The SortedMap Interface and the TreeMap Class . . . . . . . . . . . . . . . . . 1210
19.5 The Collections Class . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1211
19.6 The Stream API . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1213
The Stream Package . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1214
Creating a Stream . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1214
Terminal Operations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1215
Intermediate Operations on Streams . . . . . . . . . . . . . . . . . . . . . . . . . . 1219
Intermediate Stream Operations are Lazy . . . . . . . . . . . . . . . . . . . . . . 1221
The Stream map Operation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1223
The Stream reduce Methods . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1224
Stream Collectors . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1226
19.7 Common Errors to Avoid . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1231
Review Questions and Exercises   1232
Programming Challenges   1235
Contents xix

Chapter 20 Linked Lists   1237


20.1 Introduction to Linked Lists . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1237
Creating Lists and Adding Nodes . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1238
Removing a Node . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1240
Traversing Linked Lists . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1241
20.2 Operations on Linked Lists . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1244
The isEmpty Method . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1244
The size Method . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1245
The add Methods . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1245
The remove Methods . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .1246
The toString Method . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1246
Graphical Interfaces for the Linked List Program . . . . . . . . . . . . . . . . . 1252
20.3 Doubly-Linked and Circularly-Linked Lists . . . . . . . . . . . . . . . . . . . . 1259
Adding a Node to a Doubly-Linked List . . . . . . . . . . . . . . . . . . . . . . . . 1260
Removing a Node from a Doubly-Linked List . . . . . . . . . . . . . . . . . . . . 1261
Circularly-Linked Lists . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1268
20.4 Recursion on Linked Lists . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1268
A Recursive Implementation of size . . . . . . . . . . . . . . . . . . . . . . . . . . 1269
A Recursive Implementation of the add(String e,
Node list) Method . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1270
A Recursive Implementation of add(int index, String e,
Node list) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1270
A Recursive Implementation of the remove Methods . . . . . . . . . . . . . . .1271
20.5 Common Errors to Avoid . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1283
Review Questions and Exercises   1283
Programming Challenges   1286

Chapter 21 Stacks and Queues   1289


21.1 Stacks and Their Applications . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1289
Examples and Applications of Stacks . . . . . . . . . . . . . . . . . . . . . . . . . . 1289
Stack Operations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1290
Stacks of Primitive Types . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1291
21.2 Array Implementation of Stacks . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1292
The Stack Push Operation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1293
The Stack empty Method . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1293
The Stack peek and pop Methods . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1293
Stacks of Objects . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1297
21.3 Linked Implementation of Stacks . . . . . . . . . . . . . . . . . . . . . . . . . . . 1298
Implementation of Stack Methods . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1299
21.4 Queues and Their Applications . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1303
21.5 Array Implementation of Queues . . . . . . . . . . . . . . . . . . . . . . . . . . . 1303
GUI Front Ends for the Queue Demo Program . . . . . . . . . . . . . . . . . . . 1310
Swing Version of the GUI Front End . . . . . . . . . . . . . . . . . . . . . . . . . . . 1311
JavaFX Version of the GUI Front End . . . . . . . . . . . . . . . . . . . . . . . . . . 1314
xx Contents

21.6 Linked List Implementation of Queues . . . . . . . . . . . . . . . . . . . . . . . 1317


Queue Initialization and Enqueuing of Items . . . . . . . . . . . . . . . . . . . . 1317
Dequeuing Items . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1318
21.7 Generic Implementation of Stacks and Queues . . . . . . . . . . . . . . . . 1322
21.8 Queues and Breadth-First Search . . . . . . . . . . . . . . . . . . . . . . . . . . . 1325
21.9 Common Errors to Avoid . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1328
Review Questions and Exercises   1329
Programming Challenges   1331

Chapter 22 Binary Trees, AVL Trees, and Priority Queues   1335


22.1 Binary Trees and Their Applications . . . . . . . . . . . . . . . . . . . . . . . . . 1335
Binary Tree Concepts . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1336
Applications of Binary Trees . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .1337
Representing Nodes of Binary Trees . . . . . . . . . . . . . . . . . . . . . . . . . . . 1337
Traversing a Binary Tree . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1338
Graphical Display of Binary Trees . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1341
Graphical Display of Binary Trees Using Swing . . . . . . . . . . . . . . . . . . 1342
Graphical Display of Binary Trees Using JavaFX . . . . . . . . . . . . . . . . . 1344
Class Implementation of Binary Trees . . . . . . . . . . . . . . . . . . . . . . . . . 1347
22.2 Binary Search Trees . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1347
Adding a Value to a Binary Search Tree . . . . . . . . . . . . . . . . . . . . . . . . 1349
Removing a Value from a Binary Search Tree . . . . . . . . . . . . . . . . . . . . 1349
Implementation of Binary Search Trees . . . . . . . . . . . . . . . . . . . . . . . . 1353
Graphical Display of Binary Search Trees . . . . . . . . . . . . . . . . . . . . . . . 1358
A Program for Testing the Binary Search Tree Class . . . . . . . . . . . . . . . 1360
22.3 AVL Trees . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1368
Adding New Elements to AVL Trees . . . . . . . . . . . . . . . . . . . . . . . . . . . 1369
Implementation of AVL Trees . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1372
22.4 Priority Queues . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1380
Applications of Priority Queues . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1382
Using Comparators with Priority Queues . . . . . . . . . . . . . . . . . . . . . . . 1383
Analysis of Heapsort . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1385
Implementation of Priority Queues . . . . . . . . . . . . . . . . . . . . . . . . . . . 1385
Binary Trees with the Heap Order Property . . . . . . . . . . . . . . . . . . . . . 1385
Complete Binary Trees and Heaps . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1386
The Depth of Complete Binary Trees . . . . . . . . . . . . . . . . . . . . . . . . . . 1387
Storing a Complete Binary Tree in an Array . . . . . . . . . . . . . . . . . . . . . 1387
Adding an Item to a Heap . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1388
Removing the Minimum Element . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1389
22.5 Common Errors to Avoid . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1397
Review Questions and Exercises   1397
Programming Challenges   1401

Index    1501
Contents xxi

Companion Website:
Chapter 23 Databases
Appendix A Working with Records and Random Access Files
Appendix B The ASCII/Unicode Characters
Appendix C Operator Precedence and Associativity
Appendix D Java Key Words
Appendix E Installing the JDK and JDK Documentation
Appendix F Using the javadoc Utility
Appendix G More about the Math Class
Appendix H Packages
Appendix I More about JOptionPane Dialog Boxes
Appendix J Answers to Checkpoints
Appendix K Answers to Odd-Numbered Review Questions
Appendix L Getting Started with Alice
Appendix M Configuring JavaDB
Case Study 1 Calculating Sales Commission
Case Study 2 The Amortization Class
Case Study 3 The PinTester Class
Case Study 4 Parallel Arrays
Case Study 5 The FeetInches Class
Case Study 6 The SerialNumber Class
Case Study 7 A Simple Text Editor Application
This page intentionally left blank
Location of Videonotes in the Text
VideoNote

Chapter 1 Compiling and Running a Java Program, p. 14


Using an IDE, p. 15
Your First Java Program, p. 25

Chapter 2 Displaying Console Output, p. 33


Declaring Variables, p. 39
Simple Math Expressions, p. 55
The Miles-per-Gallon Problem, p. 106

Chapter 3 The if Statement, p. 111


The if-else Statement, p. 121
The if-else-if Statement, p. 132
The Time Calculator Problem, p. 185

Chapter 4 The while Loop, p. 193


The Pennies for Pay Problem, p. 263

Chapter 5 Passing Arguments to a Method, p. 279


Returning a Value from a Method, p. 293
The Retail Price Calculator Problem, p. 312

Chapter 6 Writing Classes and Creating Objects, p. 327


Initializing an Object with a Constructor, p. 348
The Personal Information Class Problem, p. 397

Chapter 7 Accessing Array Elements in a Loop, p. 409


Passing an Array to a Method, p. 424
The Charge Account Validation Problem, p. 489

Chapter 8 Returning Objects from Methods, p. 505


Aggregation, p. 517
The BankAccount, Class Copy Constructor Problem, p. 554

Chapter 9 The Sentence Capitalizer Problem, p. 608

Chapter 10 Inheritance, p. 613


Polymorphism, p. 657
The Employee and Productionworker Classes Problem, p. 698

Chapter 11 Handling Exceptions, p.703


The Exception Project Problem, p. 759

(continued on the next page)


LOCATION OF VIDEONOTES IN THE TEXT (continued)
VideoNote
Chapter 12 Creating a Simple GUI Application, p. 764
Handling Events, p. 777
The Monthly Sales Tax Problem, p. 846

Chapter 13 The JList Component, p. 852


The JComboBox Component, p. 868
The Image Viewer Problem, p. 912

Chapter 14 Creating an Applet, p. 929


The House Applet Problem, p. 988

Chapter 15 Nested Layouts 2, p. 1038

Chapter 16 Reducing a Problem with Recursion, p. 1045


The Recursive Power Problem, p. 1067

Chapter 17 The Bubble Sort Algorithm, p. 1069


Searching for Objects with the Binary Search Algorithm, p. 1118

Chapter 18 Inheritance and Generic classes, p. 1142


Highest and Lowest Elements, p. 1165

Chapter 19 The HashMap Class, p. 1202

Chapter 20 Adding a Node to a Doubly-Linked List, p. 1260


Recursive Linked List Operations, p. 1287

Chapter 21 Array Implementation of Queues, p. 1303


Array-Based Deque, p. 1332

Chapter 22 Removing a Value from a Binary Search Tree, p. 1349


Prefix Calculator, p. 1402
Exploring the Variety of Random
Documents with Different Content
– A bolond! ordíta, két öklével ütve a halántékait. A bolond!
S oly szívdermesztő volt a tekintete, hogy a vadászgóréban
leskelődőnek egyszerre porba esett minden gondolatja,
szemrehányás, gúnyszó, korbácsütés, meghódolás! minden élő
eszme, csak a néma elzsibbadás vett minden tagjain erőt. És ha
pánczélvért fedte volna is tagjait, és kard, paizs lett is volna két
kezében, mozdulni nem volt képes e meztelen nő előtt, a ki ily bősz
tekintetet vet maga körül.
– A bolond! ordíta az még egyszer kitörő, felcsattanó hangon. S
azzal neki kezdett a futásnak. Félmeztelen, még a burnuszát is ott
feledve, rohant vissza, oly szilajon, mint valamikor ősdruszája, a
férfiölő Atalanta, a kastély felé.
Jól jártál vele, bolond, hogy ott nem fekszel most az ágyadban,
mert ha ez ott kap most, ez téged megfojt, összezúz, szerteszéttép!
És már most fuss innen, a hogy a lábaid birnak!

HÁTHA KÉT HALOTT ÖSSZEKERÜL?


Mikor Opatovszky Kornél báró, késő éjjel, Rokomozernek az
egylovas gyékényes szekerén, elhagyta őseinek birtokát, olyan
egyedül maradt a világban, mint a ki a hajótörésből úszott ki egy
ismeretlen partra. Nem volt senkije, semmije.
Rokomozer, a ki sejtette, hogy mi történhetett a kastélyban,
elmondogatott neki egyet-mást, a mit megtudott a báró elszökött fia
felől, hogy az most Illavaynál van, s hogy ott milyen jól bánnak vele.
Azt gondolta a szatócs, hogy ezzel majd kedvet csinál a bárónak,
hogy ő is odamenjen a nagybátyjához, a mi a legokosabb
elhatározás lett volna az ő részéről; hanem ezzel épen az ellenkező
hatást idézte elő. A báró csak hallgatta csendesen, hogy milyen jó
nevelést adnak Illavayék az ő felfogott magzatjának, akár csak a
saját gyermekük volna. A fiú egész nap a könyveket bújja, tanul, ir,
rajzol, dolgozik, tollal, czirkalommal, liniával, mappákat is készít –
egyszer csak közbe kiáltott aztán:
– Úgy kell a gazembernek!
Mert Kornél báró meggyőződése szerint, alig lehetne egy
gonosztevőre nézve, a ki a bölcsőtől elkezdve tizennégy hosszú
esztendőn keresztül folytonosan naponkinti apagyilkosságot követett
el, az egész kriminalkodexben súlyosabb büntetést kitalálni annál,
hogy el legyen itélve naphosszant könyveket bújni, tanulni, irni,
rajzolni, mappákat csinálni! Dehogy menne olyan helyre, a hol ilyen
kínzó szerszámokkal gyötrik az embert. Inkább egy egész
kétemeletes bolondok házába, tele őrültekkel, mint «egy» okos
emberrel egy házban.
Aztán valami főtt a fejében. Egy saját eszme. Abba úgy bele volt
szerelmesedve, mint a majom a fiába. Őrizte, féltette, nehogy
kiszaladjon a száján. Sejtette jól, hogy ha ő ezt csak egy féligmeddig
helyeseszű embernek elmondaná, az bizonyosan lebeszélné róla, hát
még ha Illavaynak előadná. Pedig ezelőtt az ember előtt nem
maradhatna vele titokban. Ennek az embervallató szemei kicsalnák
azt a rejtekhelyeiből. Egyre azt a tervet komponálta, illustrálta,
variálta, részletezte, szakaszozta, meg rekapitulálta.
Ezt már nem hagyja kiverni a fejéből.
Az egylovas szekér zötyögve barázdol kacskaringós útjában a
kátyúkkal elállt úton végig a bolondságokat kikeltő tele hold
fényénél.

A pozsonyi bezárt ház halottja szokott reggeli sétáját végezte a


kertben.
Ez a kert nem tudja azt, hogy mi a tavasz? Az ő virágai nem
bújnak ki a napsugártól a föld alól, az ő fái nem hajtanak új levelet,
nagyon jók a régiek is, tartják a szinüket.
Csak azok a kis vörösfekete, tarka bogarak, a mik kora tavaszszal
előjönnek a föld alól, merészkednek jelenteni, hogy kezdődik egy új
évforduló a világban. Jaj nekik, ha a sétáló halott útjába kerülnek!
Odabenn a szobáiban ugyanaz a világ van, a mi lenni szokott,
emberhangtalan méla csend, a gépmadár szomorú negyedórai
csicsergése, hideg ételek az egyik asztalon, felbontatlan levelek a
másikon.
A halottnak van foglalatossága, a mivel napját betölti. Olvasmány,
munka. De minő olvasmány. Csupa mathematikai könyveket
tanulmányoz. Még férfinak is rideg mulatság, hát még nőnek?
Keresni azt az ismeretlent, a kinek neve X és kutatni az érdekes
görög π rejtélyeit.
Magasabb egyenletek, logarithmusok, infinitesimal calculusok,
csillagász számítás, gyökkeresés, mértani ábrák! Megölői a
fantásiának és a poézisnak. Ez az ő mindennapi tanulmánya.
Prælegálhatna belőle, akár egy professor. A számtan, a mértan a
gondolatok jegeczvilága. Ezek közt érzi magát otthon.
Nála még az évszakok sem tesznek külömbséget. Nyáron nincs
melegebb a szobáiban, mint télen s a kandallóban mindig ég a tűz;
egy kombinált széntartó önmozgó gépezetével félóránkint ráönti a
szenet az izzó parázsra, ha senki nem néz is utána.
Csak minden hónapban egyszer szokták egy pár órára kioltani a
tüzet a kandallókban; ilyenkor a füstfaragó járja sorba a kürtőket, a
kormot letisztítani.
Ennek a kaparása, söprése az egyetlen profánus hang, a mi a
szobákba lehatol.
Az érdekes halott ugyan ezt a hangot sem hallja vagy nem ügyel
rá, mert egész lelkét elfoglalja az «érintőkből és a conjugált
háromszögből meghatározott kúpszelet nemének eldöntése» Möbius
nyomán s mikor az ember előtt ez az olvasmány áll:
(4).....(240)=0,(340)=0.
(24, c)..(240)=0,(134)(230)+(234)(136)=0.
(34, b)..(340)=0,(124)(230)+(234)(120)=0.
(b, c)...(124)(230)+(234)(120)=0,(134)(130)+(234)(130)

S ennek a megészlelésétől függ annak a kérdésnek az eldöntése,


hogy az illető kúpszelet hyperbola-e, vagy ellipsis? hát akkor
könnyen megtörténhetik rajta az az eset, hogy csak azon veszi észre
magát, mikor megszólal valaki a háta mögött s jó reggelt kiván.
Ezen aztán először elbámul, ki beszél ide lenn a halottak
országában? Azután felindul, hogy mer élő teremtés ide bejönni?
Végtére megretten; a hivatlan látogató, az a bizonyos fekete alak, a
kivel Mikulás napján a gyermekeket szokták ijesztgetni: a
kéményseprő.
Ajka nyitva marad a zsibbasztó rémülettől.
– Ne kiáltson ön, madame, suttogja tompa hangon a fekete
szurtos alak s tiltó mozdulatra emeli fel kezét.
Hiszen úgy sem kiált az, a halottak nagyon csendesen szoktak
beszélni.
– Mit akar ön? kérdi a hölgy, hidegvért szinlelve. Mért tört be
hozzám? Pénzt akar kapni? Nem szükség erőszakoskodnia. Itt
vannak a Wertheim-szekrény kulcsai. Abban áll a készpénzem.
Nyissa föl; a mit bankjegyekben, aranyban, ezüstben talál ott,
elviheti. A takarékpénztári könyveket ne bántsa, mert azokkal bajba
keveri magát. Tessék a kulcscsomag.
A grófnő elég nyugodt hangon tudott beszélni. Gondolt ő arra,
mikor ezt a házat örök temetőjeül berendezte, hogy ő rá itt egyszer
valami tolvaj is rátörhet, s minthogy cselédet nem tür a közelében,
senki sem fogja megvédeni. E végett azt az oltalmi stratagémát
találta ki, hogy készíttetett Bécsben egy tökéletes vasfalakból
alkotott fülkét, a minek a hátulját a Wertheim-szekrény képezte.
Mikor aztán ennek a szekrénynek a belső tresor ajtaját felnyitotta
valaki, akkor egy furfangos gépezet egyszerre lebocsátott egy
csapóajtót a fülke elé, s a bennlevő a vaskalitkában meg volt fogva,
s onnan csak egy vasrácson keresztül beszélhetett ki, a mi elég sűrű
volt arra, hogy ha fegyver van nála, ki ne lőhessen rajta. Ide
szándékozott beküldeni Pálma grófnő a kellemetlen látogatót.
Hanem a kéményseprő nem vette el tőle a kulcsokat. A helyett
megragadta a grófnő kezét s azt dörmögé a fülébe:
– Én vagyok Opatovszky Kornél!
Ez arczot, e szemeket látta már egyszer Pálma grófnő. Akkor,
mikor a vőlegénye azt mondta neki, akarja ön, hogy leugrassak
lovastól együtt innen a meredek bástyafokról? Most még ezen fölül
be is volt kormozva ez arcz; a hogy kéményseprőknél szokott az
lenni, a kiknek kiváltságuk van fényes nappal álarczczal sétálni az
utczán.
A helyzet semmit sem javult az által, hogy Pálma kiszabadítá a
kezét a férfi markából, mert arra az letérdelt lábai elé s most aztán
átölelte a térdeit s úgy tekintett fel hozzá, s az még rettenetesebb
tekintet volt.
– Én önt imádom! Ezt jöttem önnek megmondani.
Pálma megijedt valamitől. De nem attól, a mi más nőt az
ájulással kerülgetett volna; hogy most itt egyedül van egy minden
emberi lénytől távoleső szobában, bezárva, egy betörő férfi kezei
közt, a kire nézve a legszelidebb mentség az, hogy őrült. Nem. Ő
nem ettől ijedt meg Hiszen Opatovszky Kornél nem oroszlán s ő nem
tartozik a bárányok fajához. Neki is van két ökle, tíz körme, s ha
amannak van őrültsége, neki meg van hidegvére. Ha viaskodásra
kerül a sor, Rozgonyi Cziczelle unokája megfelel magáért! Hanem
azon rémült meg, hogy ha ez az eszeveszett látogatás valami olyan
zajjal fog végződni, a mi a külvilágba kihat, akkor az ő egész
mostanáig fentartott túlvilági uradalma egyszerre szétomlik. Nem
lehet játszani többé a halott szerepét. Embereket kell maga elé
bocsátania. Kérdésekre felelnie, megvallani, hogy él és mi a neve, és
a jövendőre nézve lemondani a magányról, társalgót, cselédet tűrni
ott maga körül, holott eddig egy ölebet sem akart a szobájában
tartani. Neki is meg volt a maga boldogsága, azt féltette, attól ijedt
meg, hogy ezt elveszik tőle, hogy sirjából kiránczigálják a napvilágra.
Ezt a sírboltot féltette!
Az volt az első eszméje, hogy ezt az őrült embert szép szóval
rávegye, hogy ugyanazon az úton hagyja el a szobáját, a melyen
észrevétlenül idejött. Szépen kell vele beszélni.
– Álljon fel, uram! szólt az előtte térdeplőhöz csendesen. S
magyarázza meg különös látogatásának okát.
Erre a nyugodt hangra egyszerre talpra ugrott Kornél s az arcza
sajátszerű vigyorgásra torzult.
– Ugy-e bár különös látogatás nemde, grófnő? Ön maga az oka.
Az ajtón keresztül nem bocsát magához élő embert; én
megvesztegettem a kéményseprőt, hogy adja át egy órára a
pánczélját, s e lovagkosztümben sikerült az ön szine elé kerülnöm.
Nem hiszem, hogy ezt előttem próbálta volna valaki.
– S mi oka volt önnek arra uram, hogy magát egy ilyen
lángészcsinyra elszánja?
– Ön lángészcsinynak nevezi ezt grófnő? Ön tehát nem haragszik
érte? Ön nem dobat ki? Nem karmolja ki a szememet?
E kérdés után Kornél hevesen csókolt kezet a grófnőnek, fekete
foltot hagyva a fehér bársonyon a kormos orra hegyével és Pálma
nem törülte le onnan a korom csóknyomot.
– Üljön le ön. Ide a karszékbe.
– Haha! Ez a kormos irhabőr sem ült még damaszt karszékben
soha. Szólt nevetve Kornél, a mint a kinált helyre levetette magát.
Pálma grófnő egész nyugodtan foglalt vele helyet szemközt a
pamlagon.
– Tehát lépjünk mindjárt in medias res, grófnő! ugyebár? A körül
forog a kérdés, hogy vajjon az én apám egyetlen fia, báró
Opatovszky Kornél csakugyan őrült bolond ember-e, vagy pedig egy
okos és helyeseszű egyéniség?
– S ezt itt ezen a helyen akarja ön megtudni?
– Itt! Ezen a helyen. És ebben a jelmezben. De nemcsak magam
akarom ezt megtudni, de az egész világgal tudatni, még pedig oly
ekklatáns módon, hogy a felől senkinek semmiféle kételye fenn ne
maradhasson, a mire minden ember vagy azt mondja, hogy «ez az
Opatovszky csakugyan egy kötözni való bolond, tébolydába való!»
vagy pedig azt, hogy «no, lám, ez az Opatovszky megtalálta valahára
a jobbik eszét!» Ilyesmit akarok tenni.
– S mennyiben szolgálhatok én médiumul ennek a kényes
kérdésnek az eldöntésére?
– Ön határoz ebben, egyesegyedül, grófnő. Senki más, mint
Temetvényi Pálma grófnő. Ön emlékezni fog rá, hogy volt egy idő, a
mikor Temetvényi Pálma grófnő az én jegyesem volt?
– Ismertem azt a hölgyet. Úgy tudom, hogy régen meghalt és el
is temették.
– Oh én tudom azt, hiszen én voltam a gyilkosa! Oh mennyi
lelkimardosást kellett nekem ezért kiállanom! Ha ön az én keblembe
láthatna! Ez a fehér arcz üldözött éjjeli álmaimban, mint kisértet!
– Nagyon hizelgő rám nézve ez az öntudatlan vendégszereplése
képmásomnak.
Opatovszky csak most vette észre, hogy megfordított bókot talált
mondani a grófnőnek. Azért is abbahagyta azt a fáradtságot, hogy
elérzékenyülése tanujelével, szemeiből alápergő könyeivel még
jobban elmázolja az arczán a kormot s fordított a beszéd hangulatán,
hizelkedésre fogta.
– Oh nem! Nem így mondtam. Ön nagyon szép most is, grófnő,
Isten ugyse; egészen elbájoló. Sokkal szebb, mint ezelőtt tizennégy
évvel volt, pedig akkor is nagyon szép volt.
Pálma kezdett hátrább huzódni a nyugtalanító ömledezés elől. A
rávillogó szemekben bizonyos neme az éhségnek volt kifejezve, a mi
olyanformát mond, hogy «szeretnék beléd harapni».
Kornél vette észre Pálma tekintetéből, hogy elsiette magát. Ezt
később kellett volna elmondani. Visszatért az előbbi mélabús
hangulatba.
– Eléggé meglakoltam én ezért az esztelen ballépésemért,
grófnő, higyje el. A purgatórium valóságos Mahomed paradicsoma
ahhoz képest, a mit én kiálltam tizennégy esztendő alatt. Azért volt
az, hogy beszaladgáltam az egész világot, mert otthon nem volt
maradásom. De hisz ön ezt mind nagyon jól tudja.
– Én? szólt közbe elbámulva Pálma grófnő.
– Van nekünk egy közös jó barátunk, egy nemeslelkű nagy
ember. No, ugyebár, nem szükség a nevét kimondanom ön előtt
grófnő?
Pálma összehuzta a szemöldeit s néma fejbólintással inte, hogy
ért belőle valamit.
– Ez a nemeslelkű férfi mindenkor értesíté önt a felől, hogy minő
viszontagságokon megy keresztül az az ember, a ki önt, a gyémántot
felcserélte – egy békasóért.
– Báró úr! Én nekem nem okoz vele kellemes érzést, ha ily
kifejezéseket használ – a felesége iránt.
– Feleségem? Semmi feleségem! Hát azt hiszi ön, hogy az a
bizonyos némber Donna Atalanta Di Pelargonios marquisnő? Az ám!
Egy cseh muzsikusnak a leánya, mamsell Muskatlinek Hanna vagy
Panna, vagy Libussa, vagy nem tudom én, hogy mi a keresztneve.
Engem luddá tettek, rászedtek. Komédia volt az egész. Azelőtt
Loreley név alatt produkálta magát a czirkuszban s három perczig el
tudott sétálni lélekzetvétel nélkül egy üveg-kádban a publikum előtt.
S ezt én mind csak most tudtam meg, tizennégy esztendő mulva.
Egyetlen igaz barátom Koczur fedezte fel előttem (az is gazember
volt, hogy akkor meg nem mondta, mikor még nem kerültem a
hálójukba!) De én magam a saját szemeimmel is meggyőződtem
felőle. Majd mindjárt el is mondom én az egész történetet a
grófnőnek. De hogy is kezdjek hozzá? Úgy? Igen. A feleségem, azaz
hogy nem a feleségem, hanem egy kalandornő, mamsell Muskatlinek
engemet először is tökéletesen kirabolt; azután pedig
megajándékozott.
– Hogyan? Kirabolta és megajándékozta.
– No igen, kirabolt minden vagyonomból, és a mellett
megajándékozott; nem mondom, hogy két tökéletes
szarvasagancscsal, mert tudom, hogy ezzel a grófnő szemérmetes
kedélyét megsérteném, de igen is megajándékozott két istentől
elrugaszkodott, vásott porontytyal, a kiknek az egyike fiú, a másika
leány; de a kik azért vetekednek egymással mindenféle emberfölötti
gonosztettekkel.
– Ön túlszigorú gyermekei iránt. Talán inkább az eltévesztett
nevelés okozta a vásottságot.
Kornél báró egyetértően hunyorgatott. Jó nyomon volt már.
– Igen, igen. Ez volt a főok. Elhanyagolt nevelés. Hisz a grófnő
nagyon jól van értesülve e felől. Tudom én!
– Én vagyok jól értesülve? kérdé Pálma elbámulva.
– Szt! Ez titok. A mi közös titkunk. Ön egy angyal. Még az
angyaloknál is jobb teremtés. Ön félrevonulva az egész világtól, még
akkor sem szünt meg áldást terjeszteni azok fölé, a kik önt oly
keserüen megbántották.
– Nem értem önt.
– Ön nagylelkű. Ön el akarja titkolni jótetteit. Hisz ez is az ön
jellemvonása. Ön nagyobb szellem a zsidók Jehovájánál. Ön nem azt
mondta: megbüntetem az apák álnokságait a fiakban, ön az apa
bűneiért jótéteményekkel halmozta el annak gyermekeit. Ha valaha
imádtam volna a Jehovát, most detronisálnám, s önt ültetném a
helyébe.
Pálma egyik ellentétes kedélyállapotból a másikba esett. Ez az
ember hol megrémíté, hol nevetésre ingerelte, közbe-közbe
megharagítva és sajnálatra költve.
– Miattam meg ne fossza ön az oltárt az istenektől, mert én
valóban nem tudok semmit e nekem tulajdonított nagylelküségről.
– Grófnő! komolyan szóljunk. Most már nagyon komolyan kérem.
E kérdés körül forog meg minden. Az én életemről van szó. Többről
az életemnél. Elevenen eltemettetésemről. Tudja ön, hogy mit akart
velem tenni az az asszony? Nem asszony; csak mamsell! Be akart
csukatni a bolondok házába. Elhiszi ön, hogy kitelik tőle ilyesmi?
– Elhiszem!
– De az okát nem találja ki grófnő. Semmi regényes indok. Csupa
vastag önérdek. Azt akarta, hogy magam ismerjem el magamról,
hogy bolond vagyok, irjam meg az elismervényt, pecsételjem le a
gyűrűmmel, a mi nélkül az aláirásom nem hiteles, hogy ő aztán ezzel
fölvehesse azt az összeget, a mit az apám hitbizományban letett,
arra az esetre, ha én egyszer a bolondok házába kivánok saját
magam jószántából fölvétetni. Hát lehet valakinek ilyen
képtelenséget kigondolni? Hiszen ha már valaki elismeri magáról,
hogy bolond, akkor eo ipso nem bolond, ha pedig valósággal bolond,
akkor nincs az az emberi hatalom, a mi őt rábirhassa, hogy ezt
elismerje, leirja, aláirja, megpecsételje s maga oda menjen a
Lunatik-Asyl kapujára bezörgetni: «eresszenek be, kérem szépen, én
bolond vagyok, be akarom magamat csukatni». Hol itt a logika, hol
itt a psychologia?
Pálma valóban nem tudta ezeknek egyikét sem föltalálni.
É
– És mégis, csak egy hajszálon mult, hogy az a furfangos némber
be nem font ezzel a cselszövénynyel. Az irást már elkészítettem. De
nem adtam a kezébe. Itt van a zsebemben. El tudja ön olvasni az én
irásomat, grófnő? Ugyan kérem, olvassa el. Nem olyan szépen van
irva, a hogy egykor önhöz irtam a leveleket, hajh! azok boldog idők
voltak. De igen szépen kérem, olvassa el.
Kornél előhuzta a sokrét összehajtott iratot a kéményseprő
bőrpánczél kebeléből. Pálma grófnőnek meg kellett annak
tartalmával ismerkednie. Azután visszaadta azt Kornélnak.
– Ugy-e, hogy nagyon különös? De a mit ön soha ki nem fog
találni, ez az, hogy hogyan lehetett egy férfi olyan gyönge, hogy egy
ilyen iratot saját kezével lemásoljon? Pedig ez az egész rejtélynek a
kulcsa. Hallotta bizonyosan a grófnő az illavai fegyenczek szándékolt
kitörését.
– Semmit sem hallottam róla.
– Hogyan? Azt sem hallotta, hogy ez alkalommal Zsiborákot
agyonlőtték és monsieur Cousin elvágta a saját nyakát?
– Nem tudok semmiről, a mi a világban történik.
– De már ezt az egyet csak lehetetlen, hogy meg ne irta volna
önnek Illavay.
Pálma fölugrott a helyéről s indulatosan kiálta föl:
– Kérem, ezt a nevet ne mondja ki többet előttem.
– Hiszen nem azért mondtam, hogy önnek kellemetlenséget
okozzak vele. Csupán csak azért, hogy ő volt az, a ki a haramiákat a
nép segítségével leverte.
– Ne beszéljen ön nekem róla! rivallt föl Pálma s oly zila
tekintetet vetett Kornél báróra, hogy annak elhalt az ajkán a szó.
Nem érte föl ököllel, hogy ha valamivel föl lehet zavarni egy halottat
a nyugalmából, ez az a szó, hogy az, a kit elvesztett, most is
ugyanaz a mesebeli hős, a ki egykor volt, hogy a jelenet, melyben
őt, mint egy földfeletti tündérlovagot tanulta ismerni, minden
csodatételeivel ismétlődhetik. Ez olyan gondolat, a mitől ököllel kell
ütni a koporsófödelet belülről!
– De édes Istenem! Én csak azért voltam kénytelen ezt
elmondani, mivelhogy akkor történt az, hogy a nép, a mely a rablók
leverésére sietett, holmi rejtélyes fegyvereket kapott, a mikről utóbb
kisült, hogy azokat Olaszországból hozták ide be a hegyek közé. És
azután rám fogják, hogy én hozattam be azokat a fegyvereket. Pedig
becsületemre mondom, egészen ártatlan vagyok benne!
Ez megint olyan furcsa mondás volt, hogy Pálma grófnő egész
fölindulása egyszerre kitörő ideges kaczagásba ment át.
– De nem nevetni való ez, grófnő. Komoly dolog ez nagyon. Mert
az embernek a nyaka körül jár a hurok. Hadd mondjam el tovább,
grófnő; kérem, üljön le a helyére. Volt nekem egy jó barátom,
Koczur. Tetszett őt ismerni.
– Nem jegyeztem föl az emlékemben.
– Nagyon jól tette a grófnő. Felejtse is el. Nagy gazember volt,
szegény jó fiú. Nekem testi-lelki jó barátom volt. Játszó-társam,
kutyám, lovam, gyermekkorom óta. Hanem azért, ha valahol
megkaphatom még egyszer a világban, úgy lelövöm, mint a tököt.
Sok bajból kihúzott a derék ember, ezuttal is neki köszönhetem,
hogy kiszabadított a legnagyobb csávából, hanem azért mégis
lelövöm, mint a varjut, a hol megkapom. Mert hogyha száz
esztendeig élne s ez alatt folyvást ragályos betegeket ápolna és
mezítlábos emberek számára csizmát varrna, s holta után ezer
esztendeig mindig postaszolgálatot teljesítene az ég és föld között,
még akkor sem ellensulyozná azt az egy rettenetes bűnét, hogy ő
volt az, a ki engemet öntől, Istennők legjobbika, csalfa módon
elválasztott, s ezzel az endori boszorkánynyal összeboronált! Ezért
meg fogom őt ölni! Esküszöm a poklok minden ördögére, hogy meg
fogom őt ölni!
A kormos arcz egészen megelevenült ez új indulatkitöréstől.
Pálma grófnőnek elmult a nevető kedve, a mint a vérbeforgó
szemekre tekintett.
Opatovszky Kornél egészen megfeledkezett róla, hogy micsoda
furcsa vitéznek van ezuttal álczázva.
– Grófnő! Pálma grófnő! mondá érzékeny páthoszszal. Hát
nézzen az arczomra és mondja meg, úgy nézek-e én ki, mint a kiről
azt lehet feltenni, hogy az osztrák birodalmat föl akarja forgatni?
Komolyan beszélek. Sok mindenféle nagy bolondságot elkövettem
életemben; de erre az egyre nem gondoltam soha.
Pálma grófnő fejbólintással mutatta, hogy egészen elhiszi ezt
neki.
– No lássa! És ezért mégis mintha minden ellenem esküdött
volna! Épen azokban a fatális napokban hozta meg Koczur azt a
bizonyos ötezer forintot, a minek a provenientiáját a grófnő
legjobban fogja tudni.
– Én? szólt a grófnő elbámulva, s a fejét rázta tagadólag.
– No! Grófnő! Most már vége a titkolózásnak! Én ismerem az ön
nemes motivumait; de ezuttal most már életről és halálról van szó.
Vagy azt akarja a grófnő tán, hogy engem a vesztőhelyre vigyenek?
Vagy legjobb esetben tíz esztendeig toljam a talyigát Olmüczben?
Ezt akarja-e?
A grófnő megijedt.
– Dehogy akarom.
– No, ha nem akarja, hát akkor ismerje el, hogy tudja jól a
provenientiáját annak az ötezer forintnak.
A grófnő kénytelen volt ráhagyni, hogy tudja.
– S megengedi nekem, hogy ezt az egész világgal tudassam?
Ráhagyta, hogy megengedi.
– Hogy megtudja a ministerium, megtudja a császár, megtudja
még az auditor is!
A grófnő el nem tudta gondolni, hogy miféle zöld csoda lehet az,
a minek megtudására a fent elősorolt hatalmasságok olyan igen
kiváncsiak; de csak belenyugodott a különös kivánságba.
Erre aztán gyöngéd mosolygásra fintorult el a látogató kormos
ábrázata.
– Akkor nyujtsa nekem legelébb is a kezét grófnő, hadd
csókoljam meg azt. Nyujtsa kérem a kezét! mert azért jöttem ide
express, hogy önnek ezért kezet csókoljak.
Rá kellett szánnia magát a vállalatra.
Kornél egészen ráfektette az arczát a nyujtott kézre.
– Így ni! Oh ez a gyöngéd kezecske volt az én őrangyalom
mindig. Ez szabadít ki engem most is sírom fenekéből, börtönöm
mélyéből. Ez a kéz még engem boldoggá is fog tenni!
Pálma grófnő ugyan örült, mikor visszakaphatta megint a kezét.
– És lássa a grófnő, ezek a semmirekellők mégis azt hiresztelték,
hogy én azt az összeget Garibalditól kaptam a fölkelés
organisálására. S mikor a puttsnak vége volt, az embereket
összefogdosták, akkor nekem estek, megrohantak, elhitették velem,
hogy én is compromittálva vagyok s addig rémítgettek, míg
ráhagytam magam beszélni, hogy leirjam azt az okiratot, a miben
saját magamat bolondnak deklarálom.
– Ezt már hallottam egyszer.
– De csak olvassa el még egy kicsit a grófnő azt az irást. Nem
rettenetes ez? Az volt a szerencsém, hogy a gyűrűt nem tudtam
lehuzni az ujjamról, hogy megpecsételjem vele az irást; a nélkül
pedig az én névaláirásom nem érvényes. S ez volt rám nézve a
mennyei gondviselés. Hiszi a grófnő, hogy van mennyei gondviselés?
A grófnő olyan csodálatos tekintetet vetett rá, a miből még a
bolond is megértett annyit, hogy igen rossz helyen alkalmazta ezt a
kérdést, egy élve eltemetett embertől kérdezi ezt – a sírásó!
– No ha végig meg fogja hallgatni ezt az én esetemet – sőt
mondhatnám: «a mi esetünket», mert mindnyájan bele vagyunk
abba foglalva, akkor meg fog róla győződni a grófnő, hogy igaz az, a
mit a «Fehérek»-ben mond az a nem tudom, hogy hivják? Sir
Patriknak, hogy «van, sir Patrik», s azzal főbelövi. De, hogy
legjobban megértse a grófnő a dolgot, ime olvassa el Koczurnak ezt
a levelét, a mit kutyafuttában irt hozzám. Olvassa el, kérem.
Pálma émelyítő undort érzett e levél olvasása után. Annyi visszás
érzelmet, annyi gyülöletes emléket keltett az szivében.
– Így tépték ők össze két szerető szivnek boldogságát! kiálta föl
elkeseredéssel a kéményseprő. De van gondviselés az égben! Van,
Pálma grófnő. A gyalázatos csalás napfényre került. Én felderítettem
azt, hahaha! A Loreley!
S itt elkezdte össze-vissza hadarni a megtörténteket, hogy szedte
ő rá Atalantát a vízbeejtett gyűrűvel, hogy kereste az azt éjjeli
fáklyafénynél a tó hinárjai között, három perczig kitartva a víz alatt,
hogy árulta el ez által, hogy az egész vízbefulási scénája kicsinált
komédia volt! Pálma csak a szavakat hallotta, de értelmükre nem
hallgatott. Oly rút, oly zavart, oly utálatos volt előtte az egész
történet, hogy nem birta azt lelkébe befogadni. Rá sem birt nézni a
beszélőre, fejét félrefordította tőle s megtagadta minden érzékének,
hogy vele foglalkozzék.
Így aztán csak azon vette egyszer észre magát, hogy a
kéményseprő a lábainál térdel és kezét megragadja.
– Mit akar ön?
– Azt akarom önnek megmondani, hogy most már szabad
vagyok. Isteni és emberi törvények szerint szabad. A kivel az oltár
előtt megesküdtem, az nem az volt, a kinek magát kiadta. E csalás
megsemmisíti a házasságot. Nekem nincs nőm többé, nem is volt.
Kezemet annak adhatom, a kinek akarom. Az egész egy átkozott
álom volt, semmi más. Én az vagyok, a ki tizenöt év előtt voltam, az
ön vőlegénye és ön az én menyasszonyom.
Pálma grófnő megdermedt e tekintet előtt. Most kezdte
megérteni, hogy ez komoly bolondság.
Opatovszky Kornél fölemelkedett térdéről s méltóságteljes állásba
vágta magát.
– Báró Apátváry Opatovszky Kornél eljött, jóvátenni hibáját s egy
új jobb élettel helyrehozni az elmultat, a gonoszt. Én voltam az, a ki
miatt az angyalok legjobbika önkényt kereste föl élve a sírboltot; én
leszek az, ki a sírbolt ajtaját feltöröm, hogy őt az életnek újra
visszaadjam.
Vette észre a grófnő arczvonásain, hogy annak nem csekély
idegenkedése van a kéményen keresztül emelkedni az elhagyott szép
világra, szabadítója vezetése mellett. Azt hivé, hogy jó lesz neki
gyöngéd bókokkal meglágyítani a szivét.
– Az igaz, Pálma grófnő, hogy azóta egy kis idő elmult, de
becsületemre mondom, hogy Pálma grófnő most is olyan szép, mint
akkor volt, oly szeretetreméltó, s esküszöm a magam részéről, hogy
én is képes vagyok egy nőt boldogítani.
Pálma grófnő rémülten tapasztalá, hogy kisértete egyre bátrabb
kezd lenni, már kezével a vállát érinti s szemei egészen keresztbe
állnak.
Fölgerjedt a haragja s eltaszította őt magától:
– Hallgasson ön és hagyjon el!
De ez nem volt olyan egyszerű «apage Satanas»-sal elűzhető
gonosz lélek.
– Mondtam, grófnő, hogy én ma itten vagy valami nagyon
okosat, vagy valami nagyon bolondot fogok elkövetni; szólt Kornél
báró, s most már odaült Pálma grófnő mellé a pamlagra. Azt, hogy
én idejöttem és még milyen úton jöttem ide, ön maga idézte elő.
– Hogyan? uram!
– No már megint nem akarja tudni. Hát ki volt az, a ki innen az
egész világtól elzárt házból az én sorsomat figyelemmel kisérte? és a
midőn észrevette, hogy sorsom rossz fordulatot vett, ki volt az, a ki
megszabadító kezét kinyujtotta utánam, hogy fölemeljen? Ki volt az,
a ki azokat a gyönge ötezer forintokat Illavaynak külte, hogy azokat
Koczur által részben az én becsületbeli adósságaim törlesztésére
saját magamnak, részben elzüllött gyermekeim neveltetésére
azoknak a másikaknak kézbesítse? Nem ön volt-e az grófnő?
Pálma előtt most kezdett már világosodni! Azt hitte, hogy most
már egészen érti ez orozva udvarlás indokait. És most aztán már
utálta ezt az embert. Először félt tőle, azután szánta, most már
megvetette. Úgy volt vele, mint a hogy idegen kutyával szokott lenni
az ember; eleinte attól fél, hogy megharapja, azután meg attól, hogy
megcsókolja, azon is aggódik, hogy hátha meg van veszve? míg
utoljára rájön, hogy ez a kutya éhes!
A míg azt hitte róla, hogy futó bolond, volt némi tekintettel
iránta; most megtudta, hogy ez okos ember s ezzel ki lett
szolgáltatva egész kegyetlen boszujának.
Mert a halottak boszuállók, kivált ha nők.
Abban a rémületben, hogy egy őrjöngő ember erőszakos
szenvedélyének martalékául van ejtve, még volt valami hizelgő rá
nézve: ez a veszélyérzet még hevesebb dobogásra intette szivét; de
az a tudat, hogy egy tönkrejutott préda botlik bele végső
gyámoltalanságában abba a mentő gondolatba, hogy régi
menyasszonyát azért a kis megtakarított pénzért felkeresse, ez csupa
jegeczczé változtatta kedélyét, a mi ott karczol, a hol hozzáérnek.
Most már nem lesz hozzá irgalommal.
Opatovszky megdöbbenésnek vette ezt az elmerevült tekintetet
Pálma arczán, növelni szándékozott a hatást.
– Grófnő! Ön elárulta a szivét. Elárulta, hogy az érez. Velem
tudatva lett ez az érzés. Engem felköltöttek eddigi álmomból. Azt az
asszonyt, a kiről azt hittem, hogy feleségem, elkergettem magamtól.
De még üldözni is fogom törvény szerint, mint csalót. Engemet
önnek az elárult jósága egészen új emberré alkotott. Ne kivánja ön,
hogy visszaalakítsam magamat az elhagyott emberré. Én magammal
játszani nem engedek! Én ide betörtem úgy, a hogy tudtam. Itt
vagyok. S innen el nem megyek a nélkül, hogy czélt érjek. Ön
összehivhatja az embereit, azoknak ugyan elébb bezárt ajtókat kell
keresztül törni, s bemutathat nekik, mint vagy eljegyzett vőlegényét,
vagy mint becsülete elrablóját. Választhat tetszése szerint.
S azzal szerét ejtette, hogy Pálma hajából kihuzza a fésüt, s
leomló hosszú szőke hajfonadékai egyikét kezébe kerítse.
Pálma tudott uralkodni kedélyén.
– Ön tehát mindent tud, suttogá csendesen; nem kellett volna
ezt elárulniok azoknak, a kikre bízva volt. Azt hittem, hogy jól el
tudtam azt titkolni. Tudják sokan, hogy nekem egész kis könyvtáram
van takarékpénztári könyvecskékből. Hanem azt nem tudja senki,
hogy ezekre a könyvekre az ön gyermekeinek a neve van felirva.
– Oh az szükségtelen. Az egészen fölösleges, grófnő. Minek a
gyermekek nevei oda? Én azokat ki akarom tagadni. Anyjostól el
akarom űzni. Nekem nincs rájok semmi szükségem. Minek volna
azokra pazarolni az ön jótéteményeit; protestált Kornél báró egész
méltó felgerjedésével egy, rossz gyermekei miatt elbúsult atyai
szivnek. Dolgozzanak! Majd, duskálkodni! Dolgozzanak!
– Hiszen még addig sokat dolgozhatnak, szólt fél mosolygó
arczczal Pálma grófnő, mert csak halálom után jutnának hozzá; az
én családomban pedig a férjhez nem ment nők iszonyú sokáig
szoktak élni. Ezt a felfedezést azonban csak azért tettem önnek,
hogy meggyőzzem róla, mennyire volt gondja a szegény élő-
halottnak az iránt, a ki őt eltemette.
– Ön nemes szivű, grófnő! Tudtam én azt! Én tudom, mit
vesztettem akkor, mikor önt elvesztettem. Ha akkor rossz ördögöm ki
nem veri planetámat a sphærájából, most hatalmas ember volnék,
talán nagykövet valamely küludvarnál, egyesült birtokaink felérnének
egy német herczegséggel.
– Most már ne beszéljünk erről, uram; hanem értekezzünk a
magunk dolgáról komolyan. Önnek a házassága meg lesz
semmisítve, ez bizonyos. Akkor ön visszatérhet oda, a honnan önt,
mint mondá, egy rossz álom eltérítette. Hogy én megbocsátottam
önnek, arról már ön többet tud, mint én akartam. De hát az atyám?
Hogy fog ön azzal kibékülni?
– Ah! Az öreg úr is meg fog hajolni a bevégzett tények előtt.
– Önnek a vagyoni helyzete nagyon zilált?
– Bizony e tekintetben Temetvényi grófnak sincs mivel kérkedni,
neki is épen a szája széléig ér.
– Ne értse félre, a mit mondok. Két főúr, a ki már annyira meg
van alázva, hogy a hitelezőjének még az előszobájában levegye a
kalapját, még akkor is lehet egymással szemben olyan büszke, hogy
fölcsapja a kalapot a fejére, ha hozzá hasonló másik látogatására
jön. Én csak magamról beszélek. Rám nézve volna az végtelenül
megalázó, ha azt mondaná a világ: «ime a régi jegyese visszatért
hozzá akkor, a mikor már vagyonilag tönkrejutott, elvette őt a
pénzeért». Ezt nem szabad a világnak sem önről, sem én rólam
mondani. Önnek előbb rendeznie kell vagyoni állapotait; kiszabadulni
terhelő kötelezettségeiből; tisztázni legalább egy részét
uradalmainak, hogy mikor egy rangjához méltó új asszonyt visz a
házhoz, az a ház minden benne levővel együtt az ön igazi sajátja
legyen, nem igényper alatt levő executio-tárgy.
Opatovszky feltolta a fejéről a kéményseprő sisakot, hogy
megvakarhassa a füle tövét. Ez sehogy se akar belemenni a fejébe.
– Hogyan? kérem. Nyöszörgé nyefegő hangon.
– Igen egyszerű módon, felelt Pálma nyugalommal. Én a
menyasszonyi hozományomat nem az esküvő után, hanem az
esküvő előtt bocsátom önnek rendelkezésére. Nem tudom, mennyire
mehetnek önnek a tartozásai, de azt hiszem, hogy az én
tőkepénzeim bőven fogják azokat fedezni.
Kornél báró hevülni kezdett ettől a szótól.
– Ön átvesz tőlem most annyit, a mennyit szükségesnek talál,
hogy birtokát rendezze. Ha egyszer aztán ezzel helyben van, akkor
egész fölénynyel jelenhetik meg Temetvényi gróf előtt, mint
rendezett birtokú gavallér, ajánlatát megújítani s az egész világ tudni
fogja, hogy ön vett el engem; nem én vettem el önt. Nos, uram, el
fogja ön ereszteni hajtekercsemet?
– Ha ön a kezét adja érte cserébe.
– Előbb feleljen ön. Elfogadja-e az én ajánlatomat?
– Micsoda ajánlatát?
– Azt, hogy ön most rögtön átveszi tőlem a menyasszonyi
hozományomat; visszamegy vele azon az úton, a melyen idejött, s
azután, ha ismét eljön, négylovas hintón fog az udvaromra bejáratni?
A «négylovas hintó» tette meg! De régen nem volt már Kornél
bárónak ebből egyebe, mint a megmaradt hosszú ostor, a négylóhoz
való, a mivel olykor a parkon végig sétálva, nagyokat szokott
pattogtatni s mondogatta hozzá: «gyi te Szellő, hallóh Alborac!»
Nagyon kiváncsisággerjesztő az az ajánlat, hogy vessen az ember
egy pillantást abba a mesemondta könyvtárba, a hol csupa ezeres,
tízezeres, százezres betéti könyvek vannak egymás mellé állítva
sorba s tanulmányozza rajtuk az összeadás tudományát, azzal a
kellemes érzéssel, hogy mindez a menyasszonyának hozománya. A
költők sokat beszélnek arról a tündéri gyönyörről, a mit a
menyasszonytól anticipando még a menyegző előtt nyujtott
kegyosztás okoz a férfiszivnek; hát ha még egyszer ilyen reális
alapokon nyugvó bizalomnyilvánulásról van szó.
Vajjon mennyi lehet ottan? Az emberek milliókról beszélnek.
Pálma grófnő elővette zsebéből a Wertheimpénztár kulcsait s
odanyujtá azokat Kornélnak.
Ezért aztán megszabadult a hajtekercse, ismét föltűzhette azt a
fésüjére.
– Egészen önre bízom magamat.
Opatovszkyban egy perczre föllázadt az egy csepp nemes vér,
mely tiltakozott ellene, hogy egy gavallér elfogadja az általa megkért
hölgynek a pénztárkulcsát, a menyegző előtt.
E tétovázását látva, Pálma grófnő annyira tudta vinni az
önuralmat, hogy egészen odahajolt hozzá s csábító mosolylyal nézett
a szemébe s a kulcscsomagot forró kézszorítással nyomta a
markába.
Ha a négy ló, meg a milliók nem huzták eléggé oda, úgy ez a
mosoly, ez a kézszorítás egészen odasegíté, a veszedelmes
egérfogóba.
– Hiszen e percztől fogva minden a tied! suttogá a grófnő.
(Veni, vidi, vici! mondá magában a golyhó, s megcsókolva az
édesen erőszakoló kezet, oda hagyta magát vezettetni a fülkéhez, a
hol a pénztár volt elhelyezve.)
Pálma megmagyarázta neki, hogy elébb a felső zárt kell fölnyitni,
azután az alsót, utoljára a fogas kulcscsal a középsőt. Kornél báró
köszönte szépen az utasítást, tud ő a Wertheim-zárral bánni; hisz
neki is volt tűz- és betörésmentes szekrénye, a míg fölöslegessé nem
tette magát.
Mikor aztán az alsó zárban elfordította a kulcsot, akkor egy
csattanást hallott a háta mögött s egyszerre nagy lett körülötte a
sötétség. Szétnézett és Pálma grófnőt nem látta sehol; egy arasznyi
magasságú rács pálczáin keresztül szürődött be hozzá egy kis
világosság. Úgy meg volt fogva a csapdában, mint egy ostoba egér.
Eleinte el nem tudta gondolni, hogy mi történt vele? Csak az
jutott eszébe, hogy ez ugyan furcsa kis menyasszonyi kelengye, a
hol a skatulyának a teteje rácsapódik a kiváncsi vőlegényre! Azt
hitte, hogy ez valami tréfa. Hanem aztán, mikor ahhoz a szűk
rácsozathoz lépett, a melyen keresztül a szobába lehetett látni, az az
egy tekintet fölvilágosította a helyzetéről. Pálma grófnőt látta maga
előtt. Olyannak látta, a milyennek még soha sem. Ilyen lehet a
halott, a ki sírjából föltámad, hogy háborgatóját megölje, egy
istennő, ki embertől eredő gyalázatáért boszut állni leszáll az
Olympról! Arczának márványfehére lángolt, felnyilt ajkai között
villogott az összeszorított fogsor, egész arcza torzkép volt; de
gyönyörű, az asszonyindulat dæmonerővé magasulva sugárzott
tekintetéből, vegyítve a fenyegető kifejezésben minden, a mi a nőt
emberfölöttivé teszi abban a pillanatban, a mikor diadalmaskodik;
Mária, mikor a kigyó fejére tapos; Juno, mikor Ixion ölébe dobja a
felhőt, ilyen volt.
De Kornélnak nem ezek a magas alakok jutottak eszébe; nem
igen volt jártas sem a keresztyén, sem a pogány mythologiában;
neki csak az «ezeregyéjszaka» volt a bibliája, az a tündérasszony
jutott neki eszébe, a ki királyi férjét félig kővé változtatja, aztán meg
az a bolond dzsin, a melyik rá hagyja magát beszélni, hogy bujjék
vissza még egyszer abba a korsóba, a melyikből kiszabadult. Most ő
lett ez a dzsin. S az ott ama tündér.
Ekkor valami villant az eszébe. Az észhomálynak szoktak villámai
lenni. Ha ez a vasajtó arra csattant le, hogy a pénzszekrényben
elfordították a kulcsot, akkor csak megint föl kell nyilni, ha azt a
kulcsot visszafordítják. Odarohant, hanem aztán szomoruan
tapasztalá, hogy azt a kulcsot se jobbra, se balra nem lehet fordítani
többé, meg van az is fogva.
Ekkor aztán igazán megijedt.
Megint visszament a világosságadó rácshoz, kitekintett rajta.
Onnan végig lehetett látni az egész szobán.
A kegyetlen istennő már akkor egy asztalnál ült s épen nem
istennői munkával foglalkozott, levelet irt. (Mint tudjuk, Minerva, az
irás istenasszonya, csak a szövés művészetére volt büszke, – lásd
Arachne – de maga nem levelezett.) Tehát Pálma grófnő irt, még
pedig nagy nyugalommal.
– Grófnő, instálom! szólt Kornél báró, megkoczogtatva a vasajtót,
mint valami illedelemtudó látogató.
Az iró hölgy föl sem tekintett.
– Szeretnék innen kimenni.
Ezzel úgy látszik nem mondott valami meglepőt a
megszólítottnak.
– Nagyon sötét van idebenn, nem látom, a miért a grófnő
ideküldött. Grófnő, ez illetlenség! egy becsületes embert, egy
főrangú urat így rászedni, becsukni, mint valami tolvajt. Grófnő, igen
szépen kérem, bocsásson ki innen, becsületem szentségére
fogadom, hogy még csak egy szóval sem fogom önt bántani. Hiszen
behihatja ön a cselédeit s azokkal dobathat ki innen. De ne dobasson
ki, igazán mondom, meg fogom újítani tanuk előtt azon ajánlatomat,
hogy önt nőül veszem. Becsületes szándékkal jöttem ide. Grófnő!
Mást mondok. Ha nem akarja, hogy a cselédjei megtudják, hogy én
itt voltam, mondja meg, hogyan kell megint kinyitni ezt az ördöngös
ajtót? Ön ezalatt kifuthat a mellékszobába s bezárhatja az ajtót; én
elmegyek, a merre idejöttem, a kürtőn keresztül. Grófnő, hát nincs
önnek szive?
Mintha a falaknak beszélt volna.
A kegyetlen tündérnő bevégezte a levélirást csendesen; le is
pecsételte a levelet s ráirta a czímet; azután a zsebébe tette azt.
Akkor aztán fölkelt s lanyha léptekkel odament a csapó ajtóhoz.
– Ön szólt hozzám? kérdezé a bennszorulttól.
– Igen is, grófnő. Kérem, legyen vége a tréfának. Bocsásson ön
ki innen a ketreczből.
– Ki lesz ön bocsájtva, mihelyt megigéri ön, hogy megtartja azt a
szavát, a mit egy nőnek adott.
– Oh, megtartom! Igérem! Esküszöm rá! Lovagi
becsületszavamra fogadom! Beváltom minden igéretetemet, a mit
önnek tettem, grófnő.
– Nekem nem tett ön semmi igéretet; mert azt én elfelejtettem.
Nem arról van szó, hanem arról, a mit a feleségének igért ön.
– Micsoda?
– Hogy be fog önként menni a Lunatic-Asylba.
– Hogyan? Ön is gyilkosomnak akar kiadni?
– Nem úgy van. Az ön feleségének igaza van. Ha ön ismeretlen
eredetű pénzösszeget fogadott el egy olyan embertől, a kinek ön
eddig csak alamizsnát szokott osztogatni, az csak árulási részvét
miatt történhetett. Ha volt önnek erről tudomása, akkor ön áruló;
börtönben a helye. Én soha nem küldtem önnek semmi összeget. Ön
választhat a börtön és tébolyda között. Én annak adom önt át, a
melyiknek akarja.
– Grófnő. Ön igazán kegyetlen. Ha ön engemet annak az
asszonynak a kezébe ad, az engem meg fog ölni. Hiszen ismeri őt a
grófnő. Herkulesekkel birkózik és bikákat öl le.
– Legyen nyugodt. Nem annak a nőnek a kezébe adom. Annak az
embernek irtam, a kit egyedül nem tudok még elfelejteni az élő
világból.
– Illavay nagybátyámnak?
– Igen. Megirtam neki, hogy jöjjön sietve. Mihelyt itt lesz, ő vele
fog ön értekezhetni a további teendőkről. Ő becsületes ember s
önnek jóakarója. Úgy fogja elintézni az ügyet, hogy az ön atyja által
e czélra hagyományozott összeg biztos kezekbe jusson, s arra a
czélra legyen fölhasználva, hogy önnek úri kényelmet, teljes ellátást
adjanak a kedélykórok menedékében, a hol ön igen jól fogja magát
találni, s megszabadul minden gondjától. Ha más kezekbe jutna ez
az összeg, nem vagyok felőle egészen bizonyos, hogy az ön javára
lenne-e egészen fordítva? Látja ön, mennyire javát akarom.
– Csókolom kezeit. A grófnő nagyon kegyes. Tehát ön is azt
kivánja, hogy megigérjem, hogy aláirom azt a bolondjogi elismerést?
Az az, hogy alá van már irva; de a gyűrűvel is lepecsételjem? Kivánja
igéretemet, grófnő?
– Az ön igéretei értéktelenek. Én az okmányt akarom előbb a
kezemben birni, kellően ellátva, addig el nem küldöm ezt a levelet
Illavaynak.
– Hát mit tesz, ha én nem pecsételem azt meg?
– Itt hagyom önt, s kimegyek a többi szobáimba, s holnap megint
visszajövök, a kérdést ismételni.
– Ez szivtelenség! Ez erőszakos kényszerítés.
– Én nem hozattam önt ide.
– No jól van, hát lepecsételem ezt az irást a gyűrűmmel; de hát
idebenn nincs mivel.
– Majd mindjárt lesz.
Pálma az iróasztalához ment, s visszatért viasztekercscsel, egy
szál aranyos spanyolviaszszal, meg egy ezüst gyufatartó tokkal.
– Ezeket mind be lehet venni a rácson keresztül.
Kornélnak első dolga volt a viaszgyertyácskát meggyujtani, s
aztán körülnézni vele a sötétben.
– No jól van. De hát ha én most azt az irást odaadom a
grófnőnek, meddig fog ez a fogság tartani?
– A míg az ön nagybátyja megérkezik.
– De hisz az soká fog tartani.
– Azt hiszem, nem. Ő nem messze lakik innen. A levelemet még
ma megkapja, s holnap ilyenkor itt lehet.
– De hátha nincs épen otthon.
– Akkor itt lesz holnap után.
– És mit eszem és mit iszom én itt addig?
– Azt én nem tudom.
– Ön engem itt éhen akar megölni!
– Ne féljen ön. Az ember nem hal meg olyan könnyen éhen. Én
próbáltam egyszer tizenhat napig nem enni, nem inni semmit, s
mégis itt vagyok.
– De én nem próbáltam még tizenhat óráig sem. Én dühös
leszek, mint a vadállat, ha megéhezem.
– Arról én nem tehetek. Ez nem az én dolgom.
– Grófnő! Azt mondom, hogy ne akarjon engemet dühbe hozni!
Ha én méregbe jövök, török, zuzok, mindent, a mit magam körül
találok. Felkapom a székeket s keresztültöröm velük a falat! Olyan
dörömbölést csapok, hogy az egész ház meghallja. Kapom ezt a
gyertyát, s a helyett, hogy irásomat pecsételném le mellette,
felgyujtom vele a butorokat idebenn, s ide égek az ön
takarékpénztári könyveivel együtt.
– Tanácslom önnek, hogy csendesen tartsa magát. Ebből az
oduból erőszakkal ki nem szabadulhat ön. A falak mind vasból
vannak. A butorok támlánya bronz, szövete azbeszth, azokat
meggyujtani nem lehet. Dörömbölést csaphat ön, a milyen nagyot
akar, s azt a czélját elérheti, hogy az egész ház összeszaladjon s önt
itt találja. Hanem abban az esetben azt a rossz fordulatot fogja adni
sorsának, hogy önt, mint dühös őrjöngőt fogják megkötözve az
őrültek házába szállítani, s az úri kényelem helyett fogadja önt ott az
elzárt ketrecz, a miben a szerencsétlen örjöngőket tartják.
– De én már is éhes vagyok!
– Akkor engedje ön a gyomrát és az eszét egymással tanácsot
ülni. Talán a gyomra okosabb lesz. Minél hamarább elhatározza
önnek a bölcsesége, hogy azt az iratot, helyesen ellátva, ezen a
rácson keresztül kiadja, annál hamarább útnak indul az én levelem.
Öntől függ, hogy siessen, vagy halasztassa kiszabadulását ebből a
nehéz helyzetből.
– Tehát csakugyan azt akarja grófnő, hogy az őrültek házába
menjek? Örökre itt hagyjam a világot? Élve eltemettessem
magamat?
E szóknál elkezdett sírni.
Csak az kellett még, hogy az utálat teljes legyen iránta, hogy
sírva fakadjon egy férfi.
– Ah uram, a kik sírnak, azok még élnek. Én attól a naptól fogva,
hogy élve eltemettek, egy könyet sem ejtettem soha. Határozzon!
Menjek vagy maradjak?
Odabenn elhallgattak.
Pár percz mulva a megpecsételt okirat előbújt a rács pálczái
között s odahullott Pálma lábaihoz.
Pálma fölvette azt, megnézte s visszadobta a földre.
Azután kiment a termébe. Egy mozaik asztalon hevertek az
érkezett levelei; azokat megnézegette, félredobálta, egyen kívül, azt
az egyet átolvasva, keblébe dugta. Azután a saját maga által irt
levelet letette az asztalra, a villamcsengetyű gombját megnyomta, és
maga lement a kertjébe, sorbajárni a művirágokat, hány nyilt ki
közülük tegnap óta – tizennégy év óta?
Beszélni nem szokott senkivel, emberrel nem szokott találkozni
soha. Csak másnap nyitott be ismét az irószobába. A csapda üres
volt; a vasajtó felhuzódott. Az asztalon pedig hevert egy
gyászjelentés.

«Báró Apátfalvy Opatovszky Kornél jelenti


minden rokonának és ismerőseinek, hogy a
mai napon, hosszas szenvedés után, örök
nyugalomra tért a döblingi kedélybeteg
ápoldában. Béke hamvaira!

A HOLD SZARVÁNAK UTOLSÓ FÉNYPONTJA.


Meghalni és eltemetkezni, édes, nyugodalmas gondolat! De
eltemettetni s azután is számlálni a napokat, a mik még hátra
vannak!
Azok között, a kiket ez a szomoru végzet ért, senki sem olyan
szánandó hallott, mint Temetvényi Ferdinánd gróf. A mi körülveszi,
az mind kriptafal; a márványnyal kirakott, a gobelinnel bevont, a
művészremekkel telifestett termek: kriptafal mind. – A ki belép hozzá
valami hirt hozni, az mind halálmadár. – A levél, a mit felbont,
gyászjelentés. – Mikor felrakja az érdemrendeit a mellére: az a sok
kereszt egy egész temetőt képvisel; mindegyik alá ő maga van
eltemetve. Sokszorosan van eltemetve: mint főur, mint gazdag
ember, mint világfi, mint apa. Ez, ez fáj legjobban. De még el akarja
tagadni magától. Még keres valami menedéket az utolsó alakjában,
vándorolva egyik alakból a másikba, mint az indus lelke. A
nagyhatalmú államférfi még megvan! Az, a kitől rettegett az egész
felvidék. Három vármegyében kis császár.
Most áll hatalma tetőpontján. Egy messzeágazó összeesküvés az
ő hatalomköre alatt lett felfedezve, elnyomva.
Igaz, hogy az egy simplex embernek az érdeme, a kinek a nevét
ő nem szereti kimondani, hanem az nem jön elő a maga érdemeiért
bizonyozni: talán nem is tudja, hogy azok érdemek. Szereti, ha nem
háborgatják. Az egész dicsőség a kormányzó főur javára marad.
S most még ezzel a kezébe jutott sulyos hatalomeszközzel olyat
zúzhat halálos ellensége fejére, a mivel azt egyszerre
szétmorzsolhatja. Meglesz az semmisítve, mint anyag és szellem. Az
egész összeesküvést ennek a fejére lehet olvasni.
Az porrá lesz, ő pedig megszilárdul. Érdemei ismét felvontatják a
lejtőn. Arra pedig igen nagy szükség van, mert nagyon mélyen ment
már aláfelé. Büszkesége, boszuvágya, meggondolatlan merész
kisérletei vagyonát tönkretették. Hitelezői csak azért nem indítanak a
vára ellen ostromot, gonoszabbat, mint a faltörő kosokkal: mert még
kezében a hatalom. De azt már sejti, hogy egészen el van készülve.
Még ugyan ámítgatja magát azzal, hogy magányos, álmatlan óráiban
összeállít csalfa vagyoni mérlegeket, felbecsülve fekvő birtokait
eszményi árakra, kiszámítva: mennyit adhatnának gazdag
műszeretők műremekei gyüjteményeért? Felvesz behajthatatlan
tartozásokat aktivái közé, s aztán kiszámítja belőle, hogy még mindig
jól áll. Mikor azonban egy-egy szorongató teher valami elhatározásra
ösztönzi, úgy, hogy rászánja magát sub camera charitatis egy-egy
ismerős főurnak bizalmasan megirni, hogy kész volna uradalmai
közül valamelyiket, kezelési nehézségek miatt, szabad kézből eladni,
azoktól olyan leverő ajánlatokat kap, hogy szégyenli végigolvasni. A
mit pedig a műkincseért igérnek, az ilyen levelek csak összetépni
valók. Kincs az, mikor veszik; – szemét, mikor eladják. Azt is
tapasztalta, hogy kevés az országban a rendezett úr: inkább
szabadulni akar mindenki a birtokától, mint szerezni hozzá; – külföldi
tőkepénz pedig iszonyodik az itteni viszonyoktól. Az olyan földet, a
mely folyvást inog-mozog, – senki sem választja megtelepedési
helyül. Ilyenkor a nagybirtokos, a ki adós, rosszabb a koldusnál. No,
de most már jobb idők következnek! (Minden sülyedő hajó gazdája
ezzel szokta biztatni magát.) Az ország állapotai megszilárdulnak s
akkor ismét helyreáll a magánosok hitele is.
E hiú káprázatokat hogy szétfútta egyszerre az a bolond szél. Az
a bolond szél, a mi egy bolond szájból jön. Opatovszky Kornél
tréfásan gyászos esete a pozsonyi elátkozott kastélyban egyszerre
két hatalmas nagy család ősvárait döntötte halomba.
Mikor ezt az esetet Ferdinánd gróf megértette ügyvéde leveléből,
ájultan rogyott össze.
Jobb is lett volna neki, ha nem hozatja magát életre többé.
Ez a tudósítás ugyanaz a hang volt, a mi a kriptaajtónak a
becsapódása.
Most már veszve van minden!
Az az egy ember, a kinek az árán a haza és trónmentő nagy
érdemeit meg lehetett volna szerezni, elfogva, nem mint vakmerő
lázító, hanem mint egy hóbortos bolond, nem az apa által, hanem a
leánya által, – nem Garibaldi veres ingében, hanem a kéményseprő
csuhájában, s az elfogás hire, egész története, körülményei nem egy
eldicsekedni való hőstett, hanem egy nevetni való történet, a miből
himet fognak varrni az udvari pletykakörökben és változatokat
mesélni a krajczáros lapokban; nevet már azon nagy hahotával az
egész világ.
Mikor eszméletéhez térve, végiggondolt ezen Temetvényi
Ferdinánd, azt mondá magában: «elhagyom ezt az országot!»
Hiszen olyan könnyű az embernek megutálni a hazáját.
Csak ezt a nagy darab sárt le tudná rázni a lábáról, a mi hozzá
van ragadva!
Ezt a hat négyszög-mérföldre terjedő sárt, a közé keveredett
kövekkel, az ősi kastélyokkal egyben.
Adná akárkinek, a ki megadná az árát, lengyel, cseh, angol,
német grófnak, herczegnek. Egy nagy darabot a hazából. A mit
meggyülölt!
(Hogy futnak a várromokkal koronázott hegyek egymás alól!)
A mely napon ezt a rettenetes hirt vette, egy hétig senki sem
hajtatott be a kastély udvarára. Tudták már, hogy szánni kell.
Ő maga ki sem mert menni a falai közül.
Mintegy oktáváján a gyászesetnek, levelet kap a szomszéd
uradalmi kastélyból, a minek czímiratán már fölismeri a levéliró
kezét.
Ki kopogtat be legelébb is az eltemetett halottnál? Ugyan ki más,
mint a vakandok?
Diadém kézvonásaira ismert.
Félredobta a levelet fölbontatlanul.
Hát annyira jutott már, hogy az az ember ő hozzá levelet mer
írni?
Fölnyergeltette a lovát s kiporoszkált az erdőbe. Összevissza
barangolta a méltóságos nagy vadaskertet.
«Hát ez már mind nem lesz az enyim?»
Az erdei tekervényes út vitte, a merre nem is akart menni, az ősi
várromokhoz. Egyszer csak azt vette észre, hogy odafenn van a
Temetvényi várromoknál.
A hol a kövek mind beszélnek – annak, a ki azt megérti.
Öt század történetét emlegetik fel azok.
Most ennek a történetnek vége.
A tisztes romok teli vannak már firkálva a látogatók neveivel. A
kaputornácz boltozatának zárkövére nagy fekete betükkel van felirva
ez a név: WURST. Közönyös név: akárkié lehet. Valami vándor-
társaság legmerészebb tagja lehetett az, a ki a nevét megörökítette
ott. – És Temetvényi Ferdinánd gróf érzi azt, hogy az ő neve ezeken
a köveken még csak nem is wurst.
A hussziták, a zsebrákok, a kuruczok, a labanczok, a hajdemákok
nem pusztítottak kegyetlenebbül itten, mint az ő tétlen kezei.
Az a még fennálló küszöbpillér is mond neki valamit.
Azon az emlékezetes kézfogón, mielőtt útjára ment volna, azt
mondá neki ez a csodálatos ember, tenyerével erre a bazaltra
csapva:
– Ha ön ezt az embert, ezt a Diadémot, magához közel ereszti,
húsz esztendő mulva ez a kő sem lesz az öné és az ivadékaié többé.
Még be sem telt a húsz esztendő s már eljött, a mit mondott.
Hát próféta lakik ebben az emberben?
Minden veszedelem, mely lavinakép sodorta magával
egymásután büszkesége egész egyetemét, ennél az embernél
kezdődött.
S most végződik nála.
Tudta ő jól, hogy mi van abban a levélben, a mit eldobott, s nem
akart fölbontani.
Külföldi tőkepénzesek keresnek heverő millióik számára
elhelyezésre való tért. Azokkal van összeköttetése Diadémnak. Azt ő
sokszálú összeköttetéseinél fogva régóta tudta.
Dominiumokat akarnak vásárolni, megszorult, jól eladósodott
magyar főuraktól.
Diadém régóta igyekszik a gondjaira bizott apátvári uradalmat
rájuk sózni, de a tőkepénzesek furfangos emberek. Rájöttek, hogy az
apátvári uradalom a temetvényi nélkül nem más, mint egy elátkozott
darab föld, a mibe minden új birtokos bele fog veszteni s örül, ha
mezitláb kiszaladhat belőle, hanem a két uradalom egyesítve, az már
számbavehető volna.
A halálmadár zörget az ablakon. Érzi, hogy halálos beteg van
odabenn.
Bizony temetkezés ennek a vége, uram!
A temetkezés szomorú dolog; még akkor is, mikor az ember
itthagyja ezt az egész szép világot s maga elmegy a föld alá; hát
még az a temetkezés, mikor az ember eltemeti az egész szép
világot, – s maga meg itt marad.
Az a fekete küszöb azt mondta neki, hogy a végzetnek teljesülni
kell. Nézzünk szét még egyszer innen a magaslatból, ezen az egész
szép világon: – azután menjünk haza, temessük el azt!
Mikor Ferdinánd gróf visszatévedt a dolgozószobájába – maga
sem tudta hogyan? azt a földre dobott levelet ott találta ismét az
asztalán. Talán csak a rendszerető komornyik tette oda, látva, hogy
felbontatlan levél.
Ő a sors intésének vette azt.
Eszébe jutottak, a míg a borítékot felszakítá, azok a mindenféle
mesék megmérgezett levelekről, a mikkel nagy potentátokat halálra
küldöztek. Ebben is méreg volt: rosszabb annál, a mivel Ferrara
herczeg gyilkolta meg az ellenségeit.
Diadém egyenesen a lényegen kezdte. – Van egy hatalmas
conzortium, mely 50–100–200 millió forinttal rendelkezik. Szándéka
Magyarországon nagy uradalmakat vásárolni; olyan uradalmakat, a
mik terjedelmeiknél fogva mostani birtokosaiknak keveset
jövedelmeznek. Fényes feltételek igértetnek. Lehet azok között
válogatni. A temetvényi uradalom egyike azoknak, a miknek
megszerzéséért a conzortium még rendkívüli áldozatokra is kész.
Azonkívül, hogy a mostani birtokos minden passiváit, a hol csak
léteznek, átvállalja, az ingó vagyont becsár szerint kifizeti, még
biztosítja számára életfogytiglan ugyanazt a virtuális jövedelmet, a
mit jelenleg a birtokából tiszta haszonkép húz.
Nagy szó!
A jelenlegi jövedelem egészen rámegy az adósságtörlesztésre és
a kamatokra (s az az adósság olyan, mint a polyp, mentül jobban
törlesztik, annál jobban nő.) Akkor pedig az egész jövedelem
megvolna, lehetne élni gond nélkül – egész holtig. – Azontúl pedig –
nem következik semmi.
Hatékony volt az a méreg!
A gróf behivatta a titkárját s elkezdett neki levelet diktálni.
Hármat elrontott, míg a negyedikkel csakugyan meg volt elégedve.
Kegyes volt találkozót adni Diadém úrnak és még az éjjelre, miután
holnap korán hivatalos körútra kell mennie.
Nem volt ugyan semmiféle körutra menetele, csak azért rendelte
éjszakára a bankárt, hogy akkor sötét van, nem látják, ha idejön.
Émelygett attól a gondolattól, hogy ennek az embernek a csizmái
még egyszer az ő kastélya parquettejein csikorogjanak.
Welcome to Our Bookstore - The Ultimate Destination for Book Lovers
Are you passionate about testbank and eager to explore new worlds of
knowledge? At our website, we offer a vast collection of books that
cater to every interest and age group. From classic literature to
specialized publications, self-help books, and children’s stories, we
have it all! Each book is a gateway to new adventures, helping you
expand your knowledge and nourish your soul
Experience Convenient and Enjoyable Book Shopping Our website is more
than just an online bookstore—it’s a bridge connecting readers to the
timeless values of culture and wisdom. With a sleek and user-friendly
interface and a smart search system, you can find your favorite books
quickly and easily. Enjoy special promotions, fast home delivery, and
a seamless shopping experience that saves you time and enhances your
love for reading.
Let us accompany you on the journey of exploring knowledge and
personal growth!

ebooksecure.com

You might also like