This course ended on May 10, 2011

CPSC 225: Intermediate Programming

   Department of Mathematics and Computer Science
   Hobart and William Smith Colleges

   Spring 2011.

   Instructor:  David J. Eck  (

   Course Handout:

   Monday, Wednesday, Friday, 3:00--3:55 PM, Room Gulick 206B.
   Lab:  Thursday, 11:55 to 1:20, Library Multimedia Lab.
   Office Hours:  MWF, 10:10--11:05 AM and 1:55--2:50 PM
                  Thursday, 10:30--11:30 AM

Lab 1, January 20
MathQuiz / Eclipse
Lab 2, January 27
Sorting Benchmarks
Lab 3, February 3
Lab 4, February 10
Lab 5, February 17
CVS / Binary Trees
Lab 6, February 24
Debugging / Image Collage
Lab 7, March 3
Web Collage, Part 1
Lab 8, March 10
Web Collage, Part 2
Lab 9, March 24
A NetGame Framework
Lab 10, March 31
Continue with Lab 9
Lab 11, April 7
Web Server
Lab 12, April 14
Work on Final Project
GUI Tutorial 1
Mouse Tools
GUI Tutorial 2
Keyboard Input
GUI Tutorial 3
Dialog Boxes

Some Links:

End of Semester: May 2 and Final Exam

The final class is on Monday, May 2. Students will be showing their final projects. The final exam can be taken on Saturday, May 7, at 1:30 in Napier 102 or on Tuesday, May 10, at 1:30 in our regular classroom.

Final projects are due no later than 1:30 on Tuesday, May 10. Please be sure that I know where to find your project.

Here is the final exam information sheet. You can also consult the review sheets for the first test, and for the second test.

Week 14: April 25, 27, and 29

An information sheet is available for the final exam.

We will work on topics from Chapter 13 this week, including a review of some of the features of Graphics2D (Section 13.2), Actions and their use with buttons and menu items (Section 13.3), and the MVC design pattern and its use in JList and JTable.

Week 13: April 18 20, and 22

Monday will be another day in the computer lab, where you can work on either a Keyboard tutorial or a Dialog box tutorial. On Wednesday, we will continue with our discussion of threads. We will cover the lower-level methods wait() and notify(). We will also be talking a bit about threads and networking. If time permits on Friday, we will move on to Chapter 13.

Week 12: April 11, 13, and 15

On Monday, class will meet in a computer lab and you will work on a tutorial. (A tutorial is kind of like a lab, except that there is nothing to turn in, and the program that you will work on is not very interesting in itself.) This tutorial is about responding to mouse drags and about using JRadioButtonMenuItems in menus. The next tutorial, on Friday or next Monday will be at least partly on dialog boxes.

Aside from the tutorial, we will be covering material on Threads from Chapter 12..

On Friday, Phase 4 of the final project is due. You should turn in a significant amount of code for your final project. I would like to see something that compiles and runs, even though only partly complete. For lab this week, you can work on your final project.

Week 11: April 4, 6, and 8

There is a test on Wednesday. An information sheet is available.

We will be talking about Java's basic networking classes, Socket and ServerSocket on Monday, so that you will be able to use them in the lab on Thursday. We will also have to look briefly at the HTTP protocol that is used for making and responding to web requests. This material will not be on the test. The reading is Section 11.4. We will continue with that material and with other topics from Chapter 11 on Friday.

Week 10: March 29 and 31; April 1

We begin Chapter 11 this week. Chapter~11 covers input/output, including files and networking. We have already covered parts of this material, but we will be going over it much more thoroughly and more systematically. We beging with the general idea of "streams," which are used to represent sources or destinations for data, such as files and network connections. The reading is Sections 11.1 through 11.3.

On Friday, April 1, you should a plan for your final project. Quoting from the final project description, "The plan must include a list of the major classes that will be used in the project, with a description of what the class will do. It should describe the GUI or other user interface, if applicable. It should identify any files or other external resources that will be used or generated. And it should identify any obstacles that you foresee to completing the project, such as aspects that you stil don't know how to implement."

There is a test looming on Wednesday of next week, April 6.

Week 9: March 21, 23, and 25

By the end of the week we will be essentially finished with Chapter 10. Note that we will not cover much of Section~10.5.

A part of the week will be spent discussing the network framework that will be used in the lab.

Week 8: March 7, 9, and 11

See the final project info sheet for complete information about the final project. "Phase 1" of the project is due on Wednesday. You should turn in two short discussions of possible final project ideas, including not more than one game probram.

We will continue the material that we started last week. By the end of the week, we should be finished with Sections 10.1, 10.2, 10.3, 11.4.1, 12.1, and 12.3.3. For the lab this week, you will finish the web collage project.

Next week is Spring break. Have a great time.

Week 7: February 28; March 2 and 4

We will continue Chapter 10, Sections 1, 2, and 3 this week, on generic programming and the Java Collection Framework. Note that I will be covering this material in the order in which it appears in the textbook.

The labs for the next two weeks will use some advanced material from later in the book, including threads, blocking queues, and some basic networking. On Wednesday, we will break routine to talk about these topics. In the book, the material that we need is in Sections 12.1.1, 12.3.3, 11.4.1, and a bit from 12.1.2 and 12.1.3.

Week 6: February 21, 23, and 25

There is a test on Wednesday, February 23. An information sheet is available.

On Monday, I will quickly cover some of the material on BNF and parsing from Section 9.5. However, this material is not on the test, nor will it be on a future test.

On Friday, we begin Chapter 10, which covers generic programming, parameterized types, and the Java Collection Framework.

Week 5: February 14, 16, and 18

This week is devoted to trees -- mostly binary trees. We will cover Section 9.4. This includes the basics of binary trees and binary tree traversal algorithms, Binary Sort Trees, and Expression trees. We spend about a day on each concept.

Week 4: February 7, 9, and 11

We cover Section 9.3 this week, on stacks and queues. This section also covers postfix expressions and how they can be evaluated using a stack. But we will also cover some of the material from Section 13.1, since you will need to know about the BufferedImage class for the lab.

Week 3: January 31; February 2 and 4

We will continue with Section 9.1 this week, and we will start Section 9.2, and will continue working on it next week. We will look at several more recursive algorithms, and the lab will ask you to write several recursive methods. We will then move on to linked data structures and, in particular, linked lists. A linked list consists of objects joined into a linked structure by points that connect each object in the list to the next. We will look at several operations on linked lists and how they can be implemented.

Week 2: January 24, 26, and 28

The reading for the week is Section 8.5, on the Analysis of Algorithms, and Section 9.1, on recursion. We will just be starting 9.1; we will finish it next week.

Analysis of Algorithms is the field that studies the efficiency of algorithms -- how long they take to run and how many resources they use. We are only interested in run-time efficiency, that is, the question of how the run time of an algorithm depends on the size of the input. This will be only a bare introduction to the field. You will learn the basics of Θ(f(n)) and O(f(n)), and a little about the comparisons between different run times, such as Θ(n2) versus &Theta(n*log(n)).

A recursive definition is one that uses the term that is being defined in the definition. A recursive subroutine is one that calls itself, either directly or indirectly. We will begin looking at how recursion works and how it can be useful.

Week 1: January 19 and 21

This shortened three-day week is an introduction to the course. We will begin with a little review on Wednesday. We will then start in on Chapter 8. We will only be covering Section 8.3 and Section 8.5 in that chapter. However, I encourage you to read the entire chapter.

Section 8.3 covers exceptions and the try..catch statement in more detail than you've probably seen, and it covers checked exceptions and mandatory exception handling. Section 5 is an introduction to the "Analysis of Algorithms," which considers efficiency of algorithms in terms of the amount of time that they take to run for an input of a given size. This is an important consideration that we will use throughout the course when evaluating algorithms. It might be next week before we get to Section 8.5.

The lab on Thursday will include an introduction to the Eclipse integrated development environment. Part of the lab will be a program for you to work on, which will be due next week.