1. Before writing a program, think ONLY in terms of objects.
2. Nothing replaces pen and paper. plan out a pseudo code to follow
3. translate the program to paper.
I think problems with primitives or syntactic errors are easily solvable. The problem is getting the thinking process out on paper the problem. Designing classes(Object oriented view) is the caveat.
Specifically for Java I would definitely recommend
1. Kathy Sierra's book
SCJP 6 (good head start)
2. Joshua Bloch's
Effective Java (better way of looking at things)
As a whole
1. Headfirst design Patterns book is good.
2. Introduction to Algorithms.