 |
Introduction to Programming Using Java, Fourth Edition
Source Code
THIS PAGE CONTAINS LINKS to the source code for
examples appearing in the free, on-line textbook
Introduction to Programming Using Java, Version 4.0,
which is available at http://math.hws.edu/javanotes/.
You should be able to compile these files and use them. Note however that
some of these examples depend on other classes, such as TextIO.class and MosaicFrame.class, that
are not built into Java. These are classes that I have written. Links to the source code are provided below.
To use examples that depend on my classes, you will need to compile the source code for the
required classes and place the compiled classes in the same directory with the main
class file. If you are using an integrated development environment such as CodeWarrior
or JBuilder, you can simply add any required source code files to your project.
See Appendix 2 for more information on Java
programming environments and how to use them to compile and run these examples.
Most of the solutions to end-of-chapter exercises are not
listed on this page. Each end-of-chapter exercise has its own Web page,
which discusses its solution.
The source code of a sample solution of each exercise is given in full on the
solution page for that exercise. If you want to compile the solution, you should
be able to cut-and-paste the solution out of a Web browser window and into
a text editing program. (You can't cut-and-paste from the HTML source of the
solution page, since it contains extra HTML markup commands that the Java compiler
won't understand.)
Note that many of these examples require Java version 1.3 or later. Some of them were written
for older versions, but will still work with current versions. When you compile
some of these older programs with current versions of Java, you might get warnings about
"deprecated" methods. These warnings are not errors. When a method is deprecated, it means
that it should not be used in new code, but it has not yet been removed from the language.
It is possible that deprecated methods might be removed from the language at
some future time, but for now you just get a warning about using them.
Part 1: Text-oriented Examples
Many of the sample programs in the text are based on console-style input/output, where the computer
and the user type lines of text back and forth to each other. Some of these programs use the standard
output object, System.out, for output. Most of them use my non-standard class,
TextIO for both input and output. The programs are stand-alone applications,
not applets, but I have written applets that simulate many of the programs. These "console
applets" appear on the Web pages that make up the text. The following list includes
links to the source code for each applet, as well as links to the source code of
the programs that the applets simulate. All of the console applets depend on
classes defined in the files ConsoleApplet.java,
ConsolePanel.java,
and ConsoleCanvas.java. These three files, or the class files
compiled from them, must be available when you compile any console applet. The class files
must be available when the applet is used. (Being "available" means being in the same
directory where you are compiling the program, or being in the same directory as the HTML
file that uses the applet.)
Most of the standalone programs depend on the TextIO class,
which is defined in TextIO.java. Either TextIO.java or TextIO.class must
be available when you compile the program, and TextIO.class must be available when you run the
program. These programs and applets will work with Java 1.1, as well as with later versions.
- ConsoleApplet.java, a basic class that does the HelloWorld program in
Section 2.1. (The other console applets, below, are defined as subclasses of
ConsoleApplet.)
- Interest1Console.java, the first investment example,
from Section 2.2. Simulates Interest.java.
- TimedComputationConsole.java, which does some simple
computations and reports how long they take,
from Section 2.3. Simulates TimedComputation.java.
- PrintSquareConsole.java, the first example that does user input,
from Section 2.4. Simulates PrintSquare.java.
- Interest2Console.java, the second investment example, with user input,
from Section 2.4. Simulates Interest2.java.
- Interest3Console.java, the third investment example,
from Section 3.1. Simulates Interest3.java.
- ThreeN1Console.java, the "3N+1" program
from Section 3.2. Simulates ThreeN1.java
- ComputeAverageConsole.java, which finds the average of numbers entered by the user,
from Section 3.3. Simulates ComputeAverage.java
- CountDivisorsConsole.java, which finds the number of divisors of an integer,
from Section 3.4. Simulates CountDivisors.java
- ListLettersConsole.java, which lists all the letters that occur in a line of text,
from Section 3.4. Simulates ListLetters.java
- LengthConverterConsole.java, which converts length measurements between various units of measure,
from Section 3.5. Simulates LengthConverter.java
- PrintProduct.java, which prints the product of two numbers
from Section 3.7. (This was given as an example of writing console applets,
and it does not simulate any stand-alone program example.)
- GuessingGameConsole.java, the guessing game
from Section 4.2. Simulates GuesingGame.java.
A slight variation of this program, which reports the number of games won by the user,
is GuesingGame2.java.
- RowsOfCharsConsole.java, a useless program that illustrates subroutines
from Section 4.3. Simulates RowsOfChars.java.
- TheeN2Console.java, an improved 3N+1 program
from Section 4.4. Simulates ThreeN2.java
- RollTwoPairsConsole.java rolls two pairs of dice until
the totals come up the same,
from Section 5.2. Simulates RollTwoPairs.java.
The applet and program use the class PairOfDice.java.
- HighLowConsole.java plays a simple card game,
from Section 5.3. Simulates HighLow.java.
The applet and program use the classes Card.java and
Deck.java. (The Deck class
uses arrays, which are not covered until Chapter 8.)
- BlackjackConsole.java lets the user play a game
of Blackjack, from the exercises for Chapter 5.
Uses the classes Card.java, Hand.java,
BlackjackHand.java and Deck.java.
- BirthdayProblemConsole.java is a small program that uses
arrays, from Section 8.2. Simulates BirthdayProblemDemo.java.
- ReverseIntsConsole.java demonstrates a dynamic array
of ints by printing a list of input numbers in reverse order, from Section 8.3.
Simulates ReverseWithDynamicArray.java, which uses the
dynamic array class defined in DynamicArrayOfInt.java.
A version of
the program that uses an ordinary array of ints is ReverseInputNumbers.java.
- LengthConverter2Console.java,
an improved version of LengthConverterConsole.java.
It converts length measurements between various units of measure.
From Section 9.2. Simulates LengthConverter2.java
- LengthConverter3.java is a version of the previous program,
LengthConverter2.java,
which uses exceptions to handle errors in the user's input. From the user's point of
view, the behavior of LengthConverter3 is
identical to that of LengthConverter2, so I didn't include an applet version in the text.
From Section 9.4.
- ReverseFile.java, a program that reads a file of numbers
and writes another file containing the same numbers in reverse order. From
Section 10.2. This file depends on TextReader.java.
Since applets cannot manipulate files, there is no applet version of this program.
- WordList.java, a program that makes a list of the words
in a file and outputs the words to another file. From
Section 10.3. Depends on TextReader.java.
There is no applet version of this program.
- CopyFile.java, a program that copies a file. The input and
output files are specified as command line arguments. From
Section 10.3. There is no applet version of this program.
- Two pairs of command-line client/server network applications from
Section 10.5: DateServe.java
and DateClient.java;
CLChatServer.java and CLChatClient.java.
There are no corresponding applets.
- TowersOfHanoiConsole.java, a console applet that gives
a very simple demonstration of recursion, from Section 11.1.
- ListDemoConsole.java demonstrates the list class
that is defined in StringList.java,
from Section 11.2. Simulates ListDemo.java.
- PostfixEvalConsole.java uses a stack to evaluate
postfix expressions, from Section 11.3. The stack class is
defined in NumberStack.java. Simulates PostfixEval.java.
- SortTreeConsole.java demonstrates some subroutines
that process binary sort trees, from Section 11.4.
Simulates SortTreeDemo.java.
- SimpleParser3Console.java reads expressions entered
by the user and builds expression trees to represent them.
From Section 11.5. Simulates SimpleParser3.java.
Related programs, which evaluate expressions without building expression trees, are
SimpleParser1.java and SimpleParser2.java.
- ListInsert.java, a very short program that
demonstrates a subroutine for inserting a new item into a sorted generic
List, from Section 12.2. There is no
corresponding Console applet.
- WordListWithTreeSet.java,
another demonstration program from Section 12.2.
It makes a list of distinct words from a file. This is a version of
WordList.java that uses a TreeSet
to store the words. There is no corresponding Console applet.
- SimpleParser5Console.java uses a HashMap
as a symbol table in a program that can evaluate expressions that contain variables,
from Section 12.4. This applet simulates the
program SimpleParser5.java.
- WordCount.java uses Maps, Sets, and Lists to make
a list of all the words in a file along with the number of times that each
word occurs in the file, from Section 12.4.
This program requires TextReader.java.
There is no applet version.
Part 2: Graphical Examples from the Text
- GUIDemo.java and GUIDemo2.java,
simple GUI demo applets from Section 1.6. These applets demonstrate
AWT and Swing components, respectively.
(You won't be able to understand the source code until you read Chapters 6 and 7.)
- StaticRects.java, a rather useless applet from
Section 3.7 that just draws a set of nested rectangles.
- MovingRects.java, the sample animation applet from
Section 3.7. (This depends on SimpleAnimationApplet2.java.)
- RandomMosaicWalk.java, a standalone program that displays a
window full of colored squares with a moving disturbance, from
Section 4.6. (This depends on
MosaicCanvas.java and Mosaic.java.)
The applet version of the random walk, which is shown on the web page, is
RandomMosaicWalkApplet.java. The source
code for the applet uses some advanced techniques.
- RandomMosaicWalk2.java is a version of
the previous program, RandomMosaicWalk.java,
modified to use a few named constants. From Section 4.7.
- ShapeDraw.java, the applet with dragable shapes,
from Section 5.4. This file produces six class files
when it is compiled.
You won't be able to understand everything in this file until you've read
Chapters 6 and 7.
- HelloWorldApplet.java and
HelloWorldApplet2.java,
the utterly basic first sample applet, from Section 6.1.
The second version has an init() method to set its foreground and background colors.
- HelloSwing.java and
HelloSwing2.java,
a very basic sample applet using Swing, events, and a dialog box,
from Section 6.1. The second version
uses an anonymous nested class to respond to clicks on a button.
- ColorChooserApplet.java, an applet for investigating
RGB and HSB colors. This is a Java 1.1 applet which uses the AWT rather than Swing.
From Section 6.3.
- RandomStrings.java, which draws randomly colored and positioned
strings, from Section 6.3.
- ClickableRandomStrings.java, an extension of the
previous applet in which the applet is redrawn when the user clicks it with the mouse,
from Section 6.4.
(ClickableRandomStrings2.java
is an equivalent class that uses an anonymous subclass of MouseAdapter
to do the event handling.)
- SimpleStamper.java, a basic demo of MouseEvents,
from Section 6.4.
- SimpleTrackMouse.java, which displays information
about mouse events, from Section 6.4.
- SimplePaint.java, a first attempt at a paint program
in which the user can select colors and draw curves, from Section 6.4.
- KeyboardAndFocusDemo.java, which demos keyboard events,
from Section 6.5.
- SubKillerGame.java, a simple arcade-style game,
from Section 6.5. This applet is based on
KeyboardAnimationApplet2.java.
- HelloWorldJApplet.java,
a fairly simple example of using layouts and multiple buttons,
from Section 6.6.
- HighLowGUI.java, a simple card game,
from Section 6.5. This file defines two classes used by the applet.
The program also depends on Card.java, Hand.java,
and Deck.java
- SimplePaint2.java, a second attempt at a paint program
in which the user can select colors and draw curves, from Section 6.5.
This file defines two classes that are used by the applet.
- HighLowGUI2.java, a version of the simple card game,
HighLowGUI.java. This version gets pictures of cards from an image file.
From Section 7.1.
- DoubleBufferedDrag.java and
NonDoubleBufferedDrag.java,
two little applets that demonstrate double buffering. In the second, double
buffering is turned off.
From Section 7.1.
- RubberBand.java, a little applet that illustrates
using an off-screen image and rubber band cursor, from Section 7.1.
- SimplePaint3.java, an improved paint program that uses
an off-screen canvas to back up the on-screen image, from Section 7.1.
- LayoutDemo.java, which demos a variety of layout
managers, from Section 7.2.
- BorderDemo.java, which shows six different
type of Borders, from Section 7.2.
- RGBColorChooser.java, a simplified version of
ColorChooserApplet.java that lets the
user select a color with three sliders that control the RGB components,
from Section 7.4.
- SimpleCalculator.java, which lets the user do arithmetic
operations using JTextFields and JButtons, from Section 7.4.
- StopWatch.java and MirrorLabel.java,
two small custom component classes, and ComponentTest.java,
an applet that tests them. From Section 7.4.
- NullLayoutDemo.java, which demonstrates how to do your own
component layout instead of using a layout manager, from Section 7.4.
- ShapeDrawWithMenus.java, an improved version of
ShapeDraw.java that uses a menu bar, menus, and a pop-up menu, from
Section 7.5.
- HelloWorldSpectrum.java, an applet that displays
the message "HelloWorld" in animated color,
from Section 7.6. A first example of using a Timer
directly to animate an applet.
- ScrollingHelloWorld.java, an applet that scrolls a message,
from Section 7.6. Shows how to animate an applet with
a Timer created in the applet's start() method.
- Mandelbrot.java, an applet that draws a representation of
the famous Mandelbrot set,
from Section 7.6. This applet creates a separate thread
to do the long computation of the colors for the set.
- ShapeDrawFrame.java, another version of
ShapeDraw as a JFrame instead
of an JApplet. From Section 7.7. The ShapeDrawFrame
class contains a main() routine and can be run as an application.
The applet ShapeDrawLauncher.java, merely
displays a button. When you click on the button, a ShapeDrawFrame window
is opened.
- HighLowFrame.java, another version of
HighLowGUI2 as a JFrame instead
of an JApplet, and with a main program to run it as an application.
The applet HighLowLauncher.java
is a button that can be used to open a HighLowFrame window.
- SimpleDialogDemo.java, a little applet
that just demonstrates four of Swing's standard dialog boxes. From
Section 7.7.
- RandomStringsWithArray.java, which draws randomly colored and positioned
strings and uses an array to remember what it has drawn, from Section 8.2.
- SimpleDrawRects.java, in which the user can place colored rectangles
on a canvas and drag them around, from Section 8.3. This simplified
shape-drawing program is meant to illustrate the use of vectors. The file also defines a
reusable custom component, RainbowPalette.
- Checkers.java, which lets two people play checkers against
each other, from Section 8.5. At 702 lines, this is a relatively
large program.
- TrivialEdit.java, a standalone application
which lets the user edit short
text files, from Section 10.3. This program depends
on TextReader.java.
- ShapeDrawWithFiles.java, a final version of
ShapeDraw.java that uses files to save and reload
the designs created with the program. This version is an independent
program, not as an applet.
It is described at the end of Section 10.3.
- ReadURLApplet.java, an applet that reads data
from a URL, from Section 10.4. This is similar
to the command-line program ReadURL.java, from
the same section.
- ChatSimulation.java, an that simulates a
two-way network connection, using a thread, from Section 10.5.
- ChatWindow.java, a JFrame that supports chatting
between two users over the network, from Section 10.5.
This class depends on TextReader.java. This class
can be run as a standalone application, as either a server or a client.
- BrokeredChat.java, an applet that sets up chat connections
that use the previous example, ChatWindow.java.
There is a server program, ConnectionBroker.java,
which must be running on the computer from which the Web page containing the
applet was downloaded. (The server keeps a list of available "chatters" for
the applet.) From Section 10.5.
- Blobs.java, an applet that demonstrates recursion, from
Section 11.1.
- DepthBreadth.java, an applet that uses stacks and queues, from
Section 11.3.
Part 3: End-of-Chapter Applets
This section contains the source code for the applets that are used as
decorations at the end of each chapter. In general, you should not expect to
be able to understand these applets at the time they occur in the text.
Most of these are older applets will work with Java 1.1 or even Java 1.0.
- Moire.java, an animated design, shown at the end of Section 1.7.
(You can use applet parameters to control various aspects of this applet's behavior. Also note that you
can click on the applet and drag the pattern around by hand. See the source code for details.)
- JavaPops.java, and applet that shows multi-colored
"Java!"s, from the end of Section 2.5. (This depends on
SimpleAnimationApplet.java.)
- MovingRects.java, the sample animation applet from
Section 3.7. (This depends on SimpleAnimationApplet2.java.)
This is also listed above, as one of the graphical examples from the text.
- RandomBrighten.java, showing a grid of colored
squares that get more and more red as a wandering disturbance visits them,
from the end of Section 4.7. (Depends on
MosaicCanvas.java.) (Another applet
that shows an animation based on MosaicCanvas.java
is MosaicStrobeApplet.java, the applet version of the
solution to one of the exercises for Chapter 4.)
- SymmetricBrighten.java, a subclass of the
previous example that makes a symmetric pattern, from the end of
Section 5.6. Depends on MosaicCanvas.java
and RandomBrighten.java.
- TrackLines.java, an applet with lines that track the mouse,
from Section 6.6.
- KaleidaAnimate.java, an applet that
shows symmetric, kaleidoscope-like animations, from Section 7.7.
Depends on SimpleAnimationApplet.java.
- Maze.java, an applet that creates a random maze and solves it,
from Section 8.5.
- SimpleCA.java, a Cellular Automaton applet, from the end of Section 9.4.
This applet depends on the file CACanvas.java. For more information on
cellular automata see http://math.hws.edu/xJava/CA/.
- TowersOfHanoi.java, an animation of the solution to the Towers of Hanoi
problem for a tower of ten disks, from the end of Section 10.5.
- LittlePentominosApplet.java, the
pentominos applet from the end of Section 11.5.
This file defines two classes, LittlePentominosApplet and PentominosBoardCanvas. A pentomino
is made up of five connected squares. This applet solves puzzles that involve filling a
board with pentominos. If you click on the applet it will start a new puzzle. For
more information see
http://math.hws.edu/eck/xJava/PentominosSolver/
where you'll also
find the big brother of this little applet.
- The applet at the end of Section 12.4 is
the same Moire.java that was used at the end of
Chapter 1.
Part 4: Required Auxiliary Files
This section lists many of the extra source files that are required by various
examples in the previous sections, along with a description of each file.
The files listed here are those which are general enough to be useful in other
programming projects.
- TextIO.java which defines a class containing some
static methods for doing input/output. These methods make it easier to use
the standard input and output streams, System.in and System.out. The TextIO
class defined in this file will be useless on a system that does not implement
standard input. In that case, try using the following file instead.
- TextIO.java for GUI defines an alternative version
of the TextIO class. It defines the same set of input and output routines
as the original version of TextIO. But instead of using standard I/O,
it opens its own window, and all the input/output is done in that window. Please read
the comments at the beginning of the file. (For people who have downloaded
this book: The file is located in a directory named
TextIO-GUI inside the source directory.)
- ConsoleApplet.java, a class that can be used as a framework
for writing applets that do console-style input/output. To write such an applet, you have to
define a subclass of ConsoleApplet. See the source code for details. Many examples of applets
created using ConsoleApplet are available above.
Any project that uses this class also requires ConsolePanel.java and
ConsoleCanvas.java.
- ConsolePanel.java, a support class that is required by any
project that uses ConsoleApplet.
- ConsoleCanvas.java, a support class that is required by any
project that uses ConsoleApplet.
- SimpleAnimationApplet2.java, a class that can be used
as a framework for writing animated applets. To use the framework, you have to define a
subclass of SimpleAnimationApplet. This class uses Swing and requires Java 1.3 or higher.
Section 3.7 has an example.
- SimpleAnimationApplet.java, a class that can be used
as a framework for writing animated applets. This class has the same functionality as
the previous class, but it is
a Java 1.0 applet and so can be used even with very old versions of Java. This file is
used as the basis for some of my end-of-chapter applets.
- Mosaic.java which let's you write programs that work with
a window full of rows and columns of colored rectangles. Mosaic.java depends
on MosaicCanvas.java. There is an example in
Section 4.6.
- MosaicCanvas.java, a subclass of the built-in Canvas class that
implements a grid of colored rectangles.
- KeyboardAnimationApplet2.java, a class that can be used
as a framework for writing animated applets, which the user can interact with by using the keyboard.
This framework can be used for simple arcade-style games, such as the SubKiller game in
Section 6.5. To use the framework, you have to define a
subclass of KeyboardAnimationApplet2. This requires Java 1.2 or higher.
- KeyboardAnimationApplet.java, an older version
of the previous class that has essentially the same functionality but that works with
Java 1.1. (This version is not used in this textbook.)
- Expr.java, a class for working with mathematical
expressions that can include the variable x and mathematical functions such
as sin and sqrt. This class was used in Exercise 9.4.
- TextReader.java, a
class that can be used to read data from text files and other input streams.
From Section 10.1.
David Eck
(eck@hws.edu), July 2002
| | Copyright© 1998-2004 All Rights Reserved. No portion of this site may be reproduced or redistributed without prior written permission from VistaEdge Technologies
All registered trademarks appearing on this site are the property of their respective owners. Java is a trademark or registered trademark of Sun Microsystems, Inc. in the United States and other countries. This site is not connected to Sun Microsystems, Inc. and is not sponsored by Sun Microsystems, Inc. | |
|  |