CPSC 225
Fall 2017
Intermediate Programming

A language that doesn't affect the way
you think about programming, is not worth knowing.
-- Alan J. Perlis

This course is continuation of an introductory Java programming course, typically CPSC 124. The topics we cover are both new and elaborations of those you have seen before. The focus will be on learning to develop more complex and interesting Java programs which use more advanced features of Java such as OOP, inheritance, exception handling, Java Collection classes, Java Graphics 2D, simple networking, etc.

We will be using a number of tools to write Java programs and share resources when you program in teams. Our primary compiler/editor will be Eclipse, the integrated development environment, often called an IDE, developed originally by IBM. You can also use Oracle NetBeans IDE instead. Toward the end of the semester we will move to using another very similar IDE, IntelliJ with Android Studio. More on this later. We will also take a look at using Git, a standard versioning system used in many production environments allowing collaboration among many developers.

For a more detailed description of this course, you can find the syllabus here.

Students will be working on group and individual projects throughout the term. Most projects will be to design and develop Java programs assumed to run on typical desktop/laptop systems. Some will have Java GUI components while others will be more basic command line programs.

The final project(s) of the semester will be to develop a Java Android app for mobile phones and tablets. I will provide Android tablets your team can use to code and test your app or you can use your own Android phone or tablet for testing, if you have one. Details on projects will appear below in the listing of assignments as the term progresses.

Course Resources/Materials/Documentation

I will be adding links to a number of resources here thoughout the semester. Some are central to our continuing study of Java and others are more items of interest, unusual sidenotes, etc. Stay tuned.

David Eck's Java textbook (PDF)

Android 6 for Programmers (Amazon)

Iterator for loops in Java

Generics in Java

Design Patterns (Java example code)

Linux Command Line Cheat Sheet (PDF)

Java Menu tutorial (PDF)

The Java Files API

Java MouseListener vs. MouseAdapter
This is a real C program. Guess what it does when compiled and executed. Check out the International Obfuscated C Code Contest.

So, how are your math + coding skills? This is what the major leagues look like.

Insert ad here...cue the rockstars of tomorrow
Regular Expression Tutorial in Java

A regular expression crossword puzzle.

Uses of factorials by Byron Schmuland

Secure Hash Algorithm

Java Serializable Secrets

Course Information

Below is a listing of all the assignments, links, and various resources needed throughout the term. You can always consult this area for the latest homework, schedules, and assignments.

I have posted the current grades in the class here. Let me know of any discrepancies in the grades listed.

11-13-2017: This week we plunge into Android programming in a serious way. You can find Lab 7 here. I suggest making some browser links to Android tutorials for the various GUI widgets so you can avoid wasting time when adding qualifiers, parameter spellings, remembering how specific tools work, etc. I added some links below that might be helpful. There are many online tutorials on Android development but try and check the date of their posting. As our book demonstrates, we need to avoid older code that will not play well with Android 3.0 and beyond. Note that Android 8 Oreo is already being baked.

Android Studio 3.0 Tutorial
Making an Android app
Android Developer Home

10-31-2017: This week we are finishing up our final Java individual and group projects before moving to Android mobile app programming. You should be ready to present your projects on Friday in class.

10-20-2017: Soon we will be starting on coding some Android apps using Java which is still the main codebase for Android. However, nothing stays the same in this business and the future of Android coding seems to be tilted toward the Kotlin programming language.

You can find out more here.

10-1-2017: After some design feedback, your team should begin fully implementing your improved GUI for the SpellCheckGUI project. You can find an enhanced zip file containing starter source code for your SpellCheckGUI Project here. This version has simple menu support as well as basic file reading, and popup menu, but does not have a spell checker as part of the code to allow you flexibility to add your own now completed spell checker.

Notice there are some links above to various Java tutorials and resources that are helpful in handling GUI events from menus, key press events, reading/writing simple files, etc.

Lab 5 is available here and is due next Friday 10/6 in class.

09-25-2017: You should have been reading Chapter 7 in David Eck's textbook. Be sure you understand code for Linear and Binary search so you can implement those if needed in your lexicon.

We are about to finish up our SpellChecking project by adding a GUI panel so we get some more experience in how to handle GUI events and displays.

Lab 4 is available here and is due next Monday 10/2 in class. You can find a zip file containing starter source code and data files for our upcoming SpellCheckGUI Project here.

09-4-2017: You should begin reading Chapter 7 in David Eck's Java textbook. In particular, sections 7.1 and 7.2 are quite useful in our future projects.

This week in lab we are first going to stop and take a closer look at the LargeInteger.java class file to evaluate some alternative ways to design the underlying data structure. You can use these following links to download the source files LargeInteger.java and LargeIntegerStarter.java.

Lab 2 is available here and is due next Monday 9/11 in class. You can find a zip file containing starter source code and data files for our upcoming SpellCheck Project here.

08-28-2017: Your first task is to acquire the two texts required for this course. The text Introduction to Programming using Java, by David Eck is available as a free PDF download (link above) so you need not print it if you wish to read the PDF. You can also order a printed copy online through LULU.

Android 6 for Programmers: An App-Driven Approach, (ISBN10-0-13-428936-6, Pearson Education, 2016) by Deitel, et al is available in the Colleges bookstore or can be ordered online through your favorite book seller.

Having David Eck's book in hand, skim through Chapter 7 on Arrays and ArrayLists as a warmup/review of previous material in Java. Take the Quiz on page 381 and ask in class about things that are unfamiliar or unclear.

Lab 1 is available here and is due next Monday in class. You can find the source code for ScannerStarter.java here.
You can find the source code for BigIntegerTest.java here.

The only submission for this lab is a nicely printed copy of the source code for the LargeInteger program. This will probably be two files: LargeInteger.java and LargeIntegerStarter.java. If your files are named otherwise, that is fine.