Problem Solving with Java teaches the sound problem solving skills that beginning programmers must understand alongside the basics of object-oriented programming using Java. The book emphasizes the use of objects and classes from the beginning by providing the basics of OOP from the start, but delaying the complications of the AWT, Swing, and more theoretical concepts of OOP until later. The authors' approach is to design a worker class or support class for each problem. The worker class has data fields for storing the problem inputs and it has methods that implement the algorithm needed to solve the problem. There is a separate application class that instantiates a worker object, passes data to this object, and then displays the results returned by the worker object. In this way, the student is introduced to the importance of object interaction and separation of concerns from the very beginning. The worker class knows how to solve the basic problem (units conversion, computation of area, etc.). The application class knows how to get the data from the user and display it. This approach better prepares students for the use of applets and GUIs. The worker class can be used without modification by an applet that performs the functions of the application class.