This is an introductory course in problem solving and computer programming in Java. Although Java is an object oriented programming language, the course begins by introducing traditional structured programming and data constructs (i.e. selections, loops, methods, primitive types, and arrays). Then consideration is given to the object-oriented programming constructs (i.e. encapsulation, composition, inheritance, polymorphism, abstract classes, and interfaces). The second meeting of the class each week is entirely devoted to laboratory work where students tackle programming exercises and demonstrate their work. Homework comprises weekly multiple-choice tests. Two larger programming projects are undertaken. There is a written midterm exam and a written final exam. By the end of the course a student will have obtained a reasonable familiarity with the Java API (Application Programming Interface) and a Java IDE (Integrated Development Environment).