Programming and Problem Solving with Java