CMSC 131
Sections 010X/020X/030X

05/04/17   Regarding Project #7: If your submission produces extraneous text outputs (e.g. you are using System.out.print to trace program flow) you will probably fail lots of the tests. You should never submit a project that produces unexpected output.

05/03/17   Regarding Project #7: Somewhere in the code distribution it mentions public tests, but there aren't any public tests -- this was an artifact from a previous version of the project. Sorry for the confusion. To help you see how to create a fish pond for testing, click this link for an example of a JUnit test that creates a pond and does a simple test.

04/27/17   Project #7 has been posted. This is the last project so start early to ensure that you max out your score on it!

04/19/17   Our final exam will be on Monday May 15th from 4:00PM to 6:00PM. Please plan to arrive at 3:50PM. There are two different rooms, depending on section numbers. IF YOU COME TO THE WRONG LOCATION, YOU WILL BE TURNED AWAY. Check your class schedule carefully to ensure you are going to the right location, as indicated below. Note that section 0201 is not with the other 020X sections.
Sections Room Assignment
0101, 0102, 0103, 0104, 0201 CHM 1407
0202, 0203, 0204, 0301, 0302, 0303, 0304 BRB 1101

04/18/17   Some students didn't get Quiz #5 back yet, so solutions have been posted here .

04/13/17   Project #6 has been posted.

04/03/17   The final exam will be on Monday 5/15 from 4:00PM to 6:00PM. The location will be announced later (it will NOT be in our usual classroom).

04/03/17   Project #5 has been posted.

03/15/17   Project #4 has been posted.

03/08/17   There is a way to draw a line at the 80th column in the Eclipse editor, despite the bug which has prevented us from doing it in the past! This should help you to comply with the course requirement of keeping your lines shorter than 80 characters. Click here for instructions.

03/07/17   To see the grader's comments about style in your projects (including an explanation for why points were deducted), go to the submit server. Find the submission that should have been graded and click it. Find the link that says "Code Review" and click that. You should see comments from the grader scattered throughout your source code.

03/07/17   As I mentioned in class, I made a mistake with the due date for project #3 (it should have been due on Wednesday of next week.) I'm going to leave it as it is (due on the 21st), but I will be posting project #4 on Wednesday 03/15. Project #4 will be due on Sunday 04/02, so plan accordingly.

03/03/17   Project #3 has been posted!

02/27/17   Don't forget that the first exam is on Wednesday 3/1 in your discussion section. I posted a new set of study questions that you might want to take a look at before then.

02/18/17   Project #2 has been posted! This project will probably take you significantly more time than the previous one, so get started right away!

02/10/17   Project #1 has been posted! Click the "Projects" tab to see a link to the project description.

02/10/17   The Maryland Center for Women in Computing (MCWIC) is offering free tutoring for students who are enrolled in CMSC131. This service is available to all students. They are located in room AVW 3258. The drop-in hours are:
  • Monday: 12:30PM to 2:30PM
  • Tuesday: 4:30PM to 6:30PM
  • Wednesday: 5:00PM to 7:00PM
To request one-on-one tutoring, click this link.

02/06/17   Discussions session reminders:
  • If you have a laptop, please bring it to the discussion each time.
  • There will be frequent quizzes and lab exercises (sometimes for a grade). These will not be announced -- you are expected to attend every class session.

02/02/17   Some slides on converting between different number bases are available here. You will need to authenticate using the same credentials you use to access the study questions. [Thanks to Eric Reasoner for preparing these slides.]

01/31/17   Fawzi's office has moved! I am now in room 3265 A. V. Williams building.

01/24/17   All students must attend the class sessions for which they are registered! This applies to both the lecture and discussion. The course is overbooked and so we will be enforcing this policy strictly. (Quizzes or in-class assignments handed in during the wrong class session will not be graded.)

01/24/17   Welcome to CMSC 131 for Spring 2017. Note that this website is for sections 010X/020X/030X only. Important announcements will appear here as the course moves along. Be sure to look every day.


This is a first programming course for Computer Science majors with a focus on object-oriented programming. The goal of the course is to develop skills such as program design and testing as well as the implementation of programs using a graphical IDE. All programming will be done in Java.

Course Coordinator: Fawzi Emad

Recommended Text:
There is no required book for this course. There are many excellent introductory books on programming in Java. One that I can recommend is Java Foundations Older editions of this book are nearly identical to the latest edition, and you can find them sold cheaply online.

Major Topics
  • Intro to Computer Systems
  • Programming Basics:  Variables, Operators, Expressions, Statements, Methods
  • Java Text Input/Output
  • Conditionals
  • Loops
  • Principles of Object Oriented Programming
  • Basics of Program Design
  • Testing and Debugging
  • Java Memory Map
  • Arrays and Java ArrayLists
  • Java interfaces
  • Polymorphism
  • Recursion


There will be eight programming projects and other assignments to be completed during the lab sessions.  Some are considered "closed" assignments which you must complete by yourself and others are considered "open" assignments where collaboration is permitted. (More information about the open policy will be provided in class and can be found in the Policy Regarding Open/Closed Projects.) There will also be two midterms, a final exam, and occasional quizzes.


All assignments can be done on the machines of your choice. You are welcome to do the work on a home computer if you have one. There should not be any machine-specific dependencies in your code. If we are not able to run your program because there is a difference between your and our computer environments, you must work with us to get your program to work in our environment.  You are expected to use the Eclipse IDE for all programming assignments.


All projects must be submitted before 11pm on the day they are due. They are to be submitted electronically according to instructions given with the assignments. Late assignments will be strictly penalized. Exceptional circumstances will be considered only if discussed with the instructor before the assignment is due. Late assignments will have points deducted as follows:

  • 20 points are subtracted from your total if submitted within 24 hours.
  • No late assignments will be accepted after 24 hours.

Final grades will be computed according the following weights. (These weights are tentative and subject to future adjustment.)

25% Projects (8)       [The weights of the individual projects will vary. Longer/harder projects will be worth more points!]
15% Lab assignments (quizzes & exercises to be completed during your discussion sessions)
15% Midterm #1
15% Midterm #2
30% Final Exam

TA Room/Office Hours

Office hours get extremely busy the day before a project deadline. Therefore do not wait to start your projects. Regarding office hours and the TA Room:

  • Once you have been helped by a TA, please leave the TA room. We have a large number of students in all of our classes, and the TA room is really crowded. Thank you for help on this matter.
  • If there is a line of students waiting, a TA should spent at most 5 minutes with a student. Please remind TAs about this rule.

Online Posting of Project Implementations Not Allowed
  • Do not post your assignments' implementation online (e.g., GitHub, PasteBin) where they can be seen by others. Making your code accessible to others can lead to academic integrity violations.
  • Even if the course is over, do not make your code available to others.
  • Notice we constantly monitor online sources.


You need to keep backups of your projects as you develop them. No extensions will be granted because you accidentally erased your project. Feel free to use the submit server as a backup tool by submitting often. You can also use tools like git, etc. Do not post code in any online system that is accessible to others (e.g., GitHub).

Academic Honesty

Note that academic dishonesty includes not only cheating, fabrication, and plagiarism, but also includes helping other students commit acts of academic dishonesty by allowing them to obtain copies of your work. You are allowed to use the Web for reference purposes, but you may not copy code from any website or any other source. In short, all submitted work must be your own.

Cases of academic dishonesty will be pursued to the fullest extent possible as stipulated by the Office of Student Conduct. Without exception every case of suspec\ ted academic dishonesty will be referred to the Office. If the student is found to be responsible of academic dishonesty, the typical sanction results in a special grade "XF", indicating that the course was failed due to academic dishonesty. More serious instances can result in expulsion from the university. If you have any doubt as to whether an act of yours might constitute academic dishonesty, please contact your TA or the course coordinator.

The University of Maryland, College Park has a nationally recognized Code of Academic Integrity, administered by the Student Honor Council.B This code sets standards for academic integrity at Maryland for all undergraduate and graduate students. As a student you are responsible for upholding these standards for this course. It is very important for you to be aware of the consequences of cheating, fabrication, facilitation, and plagiarism. For more information on the Code of Academic Integrity or the Student Honor Council, please visit

To further exhibit your commitment to academic integrity, remember to sign the Honor Pledge on all examinations and assignments: "I pledge on my honor that I have not given or received any unauthorized assistance on this examination (assignment)."

Examples of Academic Integrity Violations

The following are examples of academic integrity violations:

  • Hardcoding of results in a project assignment. Hardcoding refers to attempting to make a program appear as if it works correctly (e.g., printing expected results for a test).
  • Using any code available on the internet/web or any other source. For example, using code from Sourceforge.
  • Hiring any online service to complete an assignment for you.
  • You may not post the implementation of your assignments, materials related to the class (e.g., project description), or any other material associated with this course. Even if the class is over and you have graduated, you may NOT post any material.
  • Sharing your code or your "test code" with any student.
  • Providing ideas/suggestions on how to solve/implement a programming assignment.
  • Looking at or debugging another student's code.
  • Using online forums to ask for help regarding our assignments.

Excused Absence and Academic Accommodations
  1. Any student who needs to be excused for an absence from a single class session , due to a medically necessitated absence shall:
    • Make a reasonable attempt to inform the instructor of his/her illness prior to the class. If you are going to miss an in-class assignment then we expect to hear from you (either email or telephone message) before the class session begins.
    • Upon returning to the class, present their instructor with a self-signed note attesting to the date of their illness. The note must contain an acknowledgment by the student that the information provided is true and correct. Providing false information to University officials is prohibited under Part 9(h) of the Code of Student Conduct (V-1.00(B) University of Maryland Code of Student Conduct) and may result in disciplinary action.
    • This self-documentation may not be used for the Major Scheduled Grading Events as defined below and it may only be used for one class meeting during the semester.

  2. Any student who needs to be excused for more than one absence, or for a "Major Scheduled Grading Event", must provide written documentation of the illness from the Health Center or from an outside health care provider. This documentation must verify dates of treatment and indicate the timeframe that the student was unable to meet academic responsibilities. The documentation should be given to the instructor, not the TA. We will not accept a "self-signed" note for "major scheduled grading events", as defined below. The note must be signed by a health care professional.

    The Major Scheduled Grading Events for this course include:
    • Midterm #1
    • Midterm #2
    • Final Exam
    • Programming projects

It is also the student's responsibility to inform the instructor of any intended absences from exams for religious observances in advance. Notice should be provided as soon as possible but no later than one week prior to the exam.

Disability Support Services
Any student eligible for and requesting reasonable academic accommodations due to a disability is requested to provide, to the instructor in office hours, a letter of accommodation from the Office of Disability Support Services (DSS) within the first two weeks of the semester.

Course Evaluations

The Department of Computer Science takes the student course evaluations very seriously. Evaluations will usually be open during the last few weeks of the course. Students can go to to complete their evaluations. 

All course materials are copyright UMCP, Department of Computer Science © 2017. All rights reserved. Students are permitted to use course materials for their own personal use only. Course materials may not be distributed publicly or provided to others (excepting other students in the course), in any way or format.
Exam Dates:
  • Midterm #1: Wednesday 03/01 (in discussion section)
  • Midterm #2: Wednesday 04/19 (in discussion section)
  • Final Exam: Monday 05/15 from 4:00PM to 6:00PM (location to be announced later)

Lecture Schedule (Approximate):
Week 1
Introduction to course; Course tools Demo of Eclipse IDE; Computer systems overview; Hardware; Memory
Week 2
Operating systems; Software languages; What is Object Oriented Programming? Why Java? Simple coding examples; Text output; Variables and assignment Primitive types; Strings; Arithmetic operators; Comparison operators
Week 3
Input via the Scanner; If and if/else statements; Logical operators More details on if and if/else statements; Rules for Java identifiers Camel case convention; Symbolic constants; while loops; do-while loops
Week 4
For-loops; Blocks; Nesting of loops Writing static methods; Increment/decrement; Other assignment operators Rules of precedence; Short-circuiting; Widening/narrowing conversions; Intro to design
Week 5
Intro to objects and classes; Instance members Java memory model (call stack and heap); Garbage collection; equals method; Begin example of detailed Java class ("Student") Continue "Student" example; Constructors; toString; equals
Week 6
Review for Midterm Midterm #1 in Lab
More about static members vs. instance members
Variable initialization; JUnit testing
Week 7
Commenting; Call stack (frames, etc.); Java keyword "this" Visibility; Encapsulation; "API" Round-off errors; Intro to Java packages; Java libraries
Week 8
Details of String class; Math class; break; continue Exception handling (throw, try/catch) TBA
Week 9
Spring Break
Week 10
More exception handling (finally); Begin review example: "Password" class Continue "Password" example; Mutability; StringBuffer Eclipse debugger
Week 11
Arrays More details on arrays; Arrays of references Privacy leaks; Copying arrays (reference/shallow/deep copies); Two-dimensional arrays (ragged)
Week 12
Review for Midtern Rectangular two-dimensional arrays; Java interfaces; Polymorphism Wrappers; Examples using Java interfaces
Week 13
Complexity (Big-O) Midterm #2 in Lab
Project design; Method overloading
Continue method overloading; Ternary conditional operator
Week 14
Switch statements; Command-line Java; Javadoc Data structures; Syntax for using Java generic collections; Stack; ArrayList For-each loops; Java packages; package visibility
Week 15
Recursion Recursion Recursion
Week 16
Review for final exam Review for final exam

Fawzi Emad
Office: 3265 A.V. Williams Building
Office Hours: Monday 12-1, Wednesday 11-12, Friday 1-2

Teaching Assistants
 EmailResponsibilitiesOffice Hours
Carolin Arnold Discussions 0103, 0202 (See table below)
Janani Gururam Discussions 0302, 0304 (See table below)
Shravan Srinivasan Discussions 0203, 0204 (See table below)
Avery Katko Discussions 0301, 0303 (See table below)
Cameron Moy Discussion 0101 (See table below)
Sam Gollob Discussion 0201 (See table below)
Avital Ron Discussion 0102 (See table below)
Eric Reasoner Discussion 0104 (See table below)
Hadi Yami Grader
Dantong Ji Grader
Wilson Lin Grader (See table below)
Xioameng Jiang Grader
Kevin Wittmer Office Hours Specialist (See table below)
Michael Strauch Office Hours Specialist (See table below)
Rohan Chandra Office Hours Specialist (See table below)
Neal Gupta Office Hours Specialist (See table below)

TA Office Hours Schedule

Students in sections 010X/020X/030X may visit any TA on this list.

If you are in sections 040X then you must see a TA who has been assigned to your sections -- see your class webpage or talk with your instructor.

All TA office hours take place in room 1112 A.V. Williams. Please note that a TA may need to leave 5 minutes before the end of the hour in order to go to his/her class. Please be understanding of their schedules.

9:00 Shravan Janani Shravan Janani  
10:00 Rohan Janani Kevin Janani Eric
11:00 Sam Carolin Rohan Carolin Eric
12:00 Michael Carolin Michael Carolin Rohan
1:00 Neal Avery & Sam Neal Avery Michael
2:00 Avery & Neal Kevin Avery & Neal Kevin Kevin
3:00 Neal Rohan Neal Kevin Michael
4:00 Kevin Avital Rohan Avital Michael & Neal
5:00 Shravan Cameron Shravan Cameron Neal
Online Course Tools
  • Grades Server. This is where you go to see grades on assignments and to get your class account informtion.
  • Submission Server. This is where you go to view your project submissions and to get limited feedback about how your project is performing on our automated tests.
  • Eclipse Tutorial. Eclipse is an Integrated Development Environment (IDE) that helps us to write software efficiently. You will use Eclipse to implement the class projects this semester. See the section at the bottom of this page for specific information about setting up Eclipse.

About Java

The following web pages provide detailed references to information about Java.

  • Oracle's Java Homepage. This is the place to come when you really need the latest technical specs and downloads.
  • Oracle's Java Tutorial. This page has a number of links to books and web pages about Java, which you may find of interest.
  • Java 8.0 API Specs. This page contains (javadoc) documentation for the Java libraries. It is an excellent reference and you should bookmark it on your browser.

Setting up Eclipse

In order to complete the projects for this course you must install Eclipse following the instructions in the Eclipse Tutorial. Note that if you install Eclipse from some other source then you will not be able to submit your projects easily!

After you get Eclipse installed, you will need to connect Eclipse to your class account. To the right is a screenshot of the information you will need to enter into the CVS connection dialog box during this process.

You can cut and paste the following lines into the dialog box:

  • Host:

  • Repository Path:
    (Replace "*****" with your login ID.)

Be sure to change the connection type to "extssh", as shown.

CVS dialog

Below are collections of questions and practice problems that are designed to help you to learn the course material. These exercises are not being collected or graded. Answers are provided, but please try your best to solve each problem before looking at the solution! The list will be updated as the semester progresses.

Disclaimer: Your primary resource for studying should be the notes that you have taken during lectures! There will be questions on quizzes and exams that are not in any way represented in this study list. There will be questions on this study list that are not in any way represented on quizzes or exams. Please be aware that exam questions tend to combine more elements into a single question and many of the questions on the list are simpler than questions you will see on your exams. You may discuss these questions openly with anyone, including your classmates. If you are unsure about how the answer to any particular question is obtained, please drop by office hours for help. That's why we're here!

Part 1:  Questions Answers
Part 2:  Questions Answers
Part 3:  QuestionsAnswers
Part 4:  Questions Answers
Part 5:  Questions Answers
Part 6:  Questions Answers
Part 7:  Questions Answers
Part 8:  Questions Answers
Part 9:  Questions Answers
Part 10:  Questions Answers
Part 11:  Questions Answers
Part 12:  Questions Answers
Part 13: Questions Answers
Part 14: Questions Answers

To submit a project, go to the "Java" perspective in Eclipse. Right click on the project folder (e.g., p1) and select "Submit Project" from the pull-down menu. If you do not see the "Submit Project" option then your copy of Eclipse does not contain the class plug-ins. In this case, please see the Eclipse installations instructions on the Resources page, or drop by TA office hours for help.

You may submit many times (we grade only the last submission). You can check the status of your submissions by visiting the Submit Server Home Page and entering your University Directory ID and password.

Important: Your grade for each project will be based on the greater value of two scores: (1) The score on the very last submission prior to the deadline; (2) The score minus 20% on the very last submission prior to the late deadline (up to 24 hours late).

Click the name of a project below to see the project specification.

Project Name Due Date
Hello World! Tuesday 02/07, 11:00PM
Orioles Baseball Sunday 02/19, 11:00PM
Flags of the World Monday 02/27, 11:00PM
Medieval Soldiers Tuesday 3/21, 11:00PM
Mandelbrot Set Sunday 04/02, 11:00PM
Poker Simulator Thursday 4/13, 11:00PM
Cafe 131 Thursday 4/27, 11:00PM
Fish Club Monday 5/08, 11:00PM

Web Accessibility