Programming and problem solving with Java