McGill University
School of Computer Science

Computer Science 308-203A
Introduction to Computing II

Fall Session, 2000

Examples (mostly) from Class

The following are examples either presented in class or provided as a "Java supplement" for those who have not seen Java. Feel free to use them for reference or as a template.

Simple Class Hierarchy
Some Minimalistic Classes

These three files define a very simple class hierarchy that does little other than create some objects and call some methods, printing out what is executing as it goes along. contains a main function which runs the test, and the other two form a class hierarchy of just two classes ( extends,,

Skeleton Java Program

This little ".java" file has the minimum skeleton for a real program, into which you can insert your own code. Remember that the filename and the name of the "public class" must match.

Download source

Skeleton Java Program

This one gives the "magic incantation" for reading input from the keyboard. If you want to use some package found elsewhere to provide that functionality, that's fine but make sure you include the necessary code (java and class files) with your submission of assignments.

Download source

Sept 7, 2000
(in class, but revised)
boolean parens(String s)

This program determines whether the parentheses in a String are well-matched, i.e. if there is a '(' for every ')', properly nested.


"((a) b ((c)))" has well-matched parentheses
")a("  does not
Two implementations are provided: one which is recursive and one which is not.

As I said in class, the problem cannot "really" be solved non-recursively, and the iterative routine below actually suffers from a theoretical limitation on the size of the input String (< 8GB in length!). But for most of us, that's not really a problem, so either version would be acceptable (say, on an assignment).

Download iterative version
Download recursive version

Sept 12, 2000
(in class)
String add(String a, String b)

This function takes two Strings (assumed to contain String representations of integers) and adds them together recursively, one digit at a time.

Recursion ends when both Strings are empty (""). If one is empty and the other not, the empty one is (cleverly) replaced with "0" at the beginning of the routines to avoid trying to take a character out of a null-string (which would make the program crash).

 Download source

Sept 12, 2000
int coins(int cents)

This function counts (recursively) the number of ways to make up a certain number of cents using pennies and/or nickels and/or dimes and/or quarters.

It works as follows: the recursive function takes quarters first, then dimes, then nickels and lastly pennies. The denomination we're on is passed in as an additional argument.

Java tricks: It uses integer constants to represent the different denominations of coins and a constant array to give the value in cents of each of those denominations.

Download source

Sept 19, 2000
(For HW #2)
abstract class UserIO

This class provides the basic functionality of reading a String from an input stream. It has three abstract methods which are meant to encapsulate prompting a user for input and then converting the input to the right format. In the HW, you are to extend this class to fill in those methods (a skeleton for the subclass PromptIO  is provided as well). (skeleton)

Sept 19, 2000
(For HW #2)
Text-based Windows Package

This set of classes performs some of the work of a "window manager" of the kind used in visual programming APIs (like the AWT for Java or the window manager from Microsofts Win32 API), but greatly simplified and using text. There is a simple command line interface for testing code, located in, which you should not need to modify.

You should download the whole thing compressed as a jar-file and then decompress it. If running in a command shell, use the following command, which will create a directory "windows" in the current working directory:

jar -xf windows.jar
It contains a skeleton module called which you will fill in for HW #2.

Compressed archive: Windows.jar

As individual files (if you must download them this way... I advise figuring out how to use jar):

Sept 19, 2000
(For HW #1)
class Keyboard

This is (purportedly) the source code for the Keyboard class used in 202. Google found it for me on some random server somewhere in Connecticut and I haven't tried to make it run, so "no warrenty expressed or implied."

Sept 26, 2000
(implements concepts discussed in class)
Lists Package

In class we discussed Lists, Stacks and Queues as data structures which are all variations on a simple theme. These basic concepts are implemented by the following code. Note that a class SimpleList was used to define the minimal functionality of a List, and this class was extended to get the three types in question. Note also that SimpleList is not abstract: it can be instantiated. It just doesn't provide much functionality on its own.


Oct 3, 2000
(implements concepts discussed in class)
Growable Arrays

Growable arrays were provided in class as another simple example of Big-Oh notation (and a practical one since the JDK class Vector is implemented in this way). Here's the files:,,

Oct 19, 2000
Examples of Parsing Expressions

Here are two examples of using a tokenizer, in particular the TwoLayerTokenizer which you are to use for the term project, to parse some simple kinds of strings.

The first is a command line to perform a couple simple calculations on vectors, e.g. get the distance between two points.

The second parses expressions with integers, additions, multiplications and parentheses using the standard order of operations. The parsing is a little more complicated than what you need to do on the project, actually, and this is why for the calculation project operations are expressed, for example as (+ (* 3 4) 2) rather than as (3*4 + 2)...,


Send comments/questions to
[ McGill University ][ Academic Programs ] [ SOCS HOME

September 12, 2000