CSCI 1933 Spring 2026
Documents
Module 00
The goal of this module is to provide an overview of the course.
For this module we will focus first-and-foremost on getting the class started. We’ll be seeing the basic class design, learning what are the parts of the class, and how they will help us learn.
By the end of the week you should be able to:
- Decide whether CSCI 1933 is a course for you (if you fit the audience)
- Prepare for what we will do to learn, and why
Slides
Lecture Recording
Module 01
Introduction to Java, Java data, Java Program Structure
By the end of this module, you will be able to:
- Write, compile, and execute simple Java programs, demonstrating understanding of basic Java syntax and the program development workflow
- Identify and explain the essential components of a basic Java program structure, including the class declaration, main method signature, and statement syntax.
- Recognize and correct common syntax errors in simple Java programs using compiler error messages as guidance.
Slides
Lecture Recording
Module 02
Java primitive vs. Object types, object instantiation and methods, classes
By the end of this module, you will be able to:
- Distinguish between primitive and object types in Java by identifying their key characteristics, including how they store data, their default values, and how they are store in memory
- Create and initialize objects using constructors, including the use of multiple constructor overloads and explain the role of the
newkeyword in object instantiation. - Compare value equality versus reference equality by appropriately using
==for primitives and.equals()for objects, and explain why this distinction matters. - Identify and write the different types of methods including setters, helpers, and operators
- Identify when to use
privateandpublicfor attributes and methods
Slides
Attendance
Lecture Recording
Module 03
By the end of this module, you will be able to:
- Differentiate between
staticand non-static attributes, identify the appropriate uses of thestatickeyword - Apply principles of inheritance (every class in Java inherits from
Objectclass) by writing.equals()and.toString()methods (overriding) - Import and instantiate the
Scannerclass to enable user input functionality in Java programs, and use appropriate Scanner methods (nextInt(), nextDouble(), nextLine(), next(), etc.) to read different data types from the console. - Implement input validation techniques to ensure user-provided data meets program requirements before processing.
Slides
Video Recordings
Gradescope exercises
Module 04
By the end of this module you will be able to:
- Explain the difference between recursive and iterative approaches to problem-solving
- Describe how the call stack operates during recursive function execution
- Identify the base case and recursive case in a recursive algorithm
- Recognize problems that are naturally suited to recursive solutions versus iterative solutions
- Solve problems involving mathematical sequences, string manipulation, and array processing
- Implement helper methods to facilitate recursive solutions when additional parameters are needed
Slides
Gradescope exercises
Lecture Recordings
Module 05
By the end of this module you will be able to:
- Declare and initialize arrays in Java using the syntax
type[] arrayName = new type[size];andtype[] arrayName = new type[]{1, 2, 3, 2}; - Explain how arrays in Java differ from Python list creation in terms of type specification and fixed size requirements.
- Compare and contrast Java arrays with Python lists, identifying key differences including fixed length, homogeneous typing, and memory allocation, as well as similarities in zero-based indexing notation (square brackets –
arrayName[0]). - Pass arrays as parameters to methods and predict the behavior of array modifications within methods, demonstrating understanding of reference semantics (that arrays are objects passed by reference).
- Analyze the limitations of fixed-length arrays by explaining what happens when an array reaches capacity and why additional elements cannot simply be added as they can be in Python lists.
- Implement array resizing techniques by creating a new, larger array and copying elements from the old array, recognizing this as a manual process unlike Python’s automatic list growth.
- Choose appropriate array sizes based on problem requirements while understanding the trade-offs between allocating too much memory (wasted space) and allocating too little (requiring expensive resizing operations).
- Access and modify elements in arrays of arrays using correct row-column indexing notation, demonstrating understanding that Java implements arrays of arrays as arrays of references.
- Distinguish between shallow and deep copying of arrays of arrays, explaining why shallow copying only duplicates references to inner arrays rather than creating new array objects.
- Write nested loops to traverse arrays of arrays in both row-major and column-major order, selecting appropriate iteration patterns for different algorithmic tasks.
Slides
Gradescope exercises
Lecture Recordings
Module 06
By the end of this module you will be able to:
- Implement selection sort, insertion sort, and bubble sort correctly in code and trace their execution on small datasets.
- Analyze and compare the time complexity of selection sort, insertion sort, and bubble sort in their best, average, and worst cases.
- Explain the underlying mechanism of each sorting algorithm including how elements are compared, swapped, and positioned during execution.