KotlinCS 124 LogoJava
PrevIndexNext
Kotlin
Java
  • Implementing a Map : 04/26/2024

  • Streams : 04/25/2024

  • Generics : 04/24/2024

  • Hashing : 04/23/2024

  • Binary Search : 04/22/2024

  • MP3: Course Ratings : 04/19/2024

  • Quicksort : 04/18/2024

  • Merge Sort : 04/17/2024

  • Sorting Algorithms : 04/16/2024

  • MP Debugging Part 1 : 04/15/2024

  • MP2: Course Activity : 04/12/2024

  • Practice with Recursion : 04/11/2024

  • MP Debugging Part 0 : 04/10/2024

  • MP2: API Client : 04/09/2024

  • MP2: API Server : 04/08/2024

  • Trees and Recursion : 04/05/2024

  • Trees : 04/04/2024

  • Recursion : 04/03/2024

  • MP1: Filtering and Search : 04/02/2024

  • MP1: Loading and Sorting : 04/01/2024

  • Lists Review and Performance : 03/29/2024

  • Linked Lists : 03/28/2024

  • Algorithms and Lists : 03/27/2024

  • Continuing MP0 : 03/26/2024

  • Getting Started with MP0 : 03/25/2024

  • Lambda Expressions : 03/22/2024

  • Anonymous Classes : 03/21/2024

  • Practice with Interfaces : 03/20/2024

  • Implementing Interfaces : 03/19/2024

  • Using Interfaces : 03/18/2024

  • Working with Exceptions : 03/08/2024

  • Throwing Exceptions : 03/07/2024

  • Catching Exceptions : 03/06/2024

  • References and Polymorphism : 03/05/2024

  • References : 03/04/2024

  • Data Modeling 2 : 03/01/2024

  • Equality and Object Copying : 02/29/2024

  • Polymorphism : 02/28/2024

  • Inheritance : 02/27/2024

  • Data Modeling 1 : 02/26/2024

  • Static : 02/23/2024

  • Encapsulation : 02/22/2024

  • Constructors : 02/21/2024

  • Objects, Continued : 02/20/2024

  • Introduction to Objects : 02/19/2024

  • Compilation and Type Inference : 02/16/2024

  • Practice with Collections : 02/15/2024

  • Maps and Sets : 02/14/2024

  • Lists and Type Parameters : 02/13/2024

  • Imports and Libraries : 02/12/2024

  • Multidimensional Arrays : 02/09/2024

  • Practice with Strings : 02/08/2024

  • null : 02/07/2024

  • Algorithms and Strings : 02/06/2024

  • Strings : 02/05/2024

  • Functions and Algorithms : 02/02/2024

  • Practice with Functions : 02/01/2024

  • More About Functions : 01/31/2024

  • Errors and Debugging : 01/30/2024

  • Functions : 01/29/2024

  • Practice with Loops and Algorithms : 01/26/2024

  • Algorithms : 01/25/2024

  • Loops : 01/24/2024

  • Arrays : 01/23/2024

  • Compound Conditionals : 01/22/2024

  • Conditional Expressions and Statements : 01/19/2024

  • Operations on Variables : 01/18/2024

  • Variables and Types : 01/17/2024

  • Welcome to CS 124 : 01/16/2024

Data Modeling 2

public class Person { }
public class Room { }

In this lesson we stop and put all that we’ve learned into action. We’ll complete another object modeling exercise together. But this time, we’ll make use of inheritance, polymorphism, and other new ideas that we recently learned. Welcome back!

Warm Up Debugging Challenge
Warm Up Debugging Challenge

But, as we frequently do, let’s warm up with another graded debugging challenge!

Modeling Office Hours
Modeling Office Hours

Last time we did a game, and I said: I’m sorry we’re doing a game. This time we’re going to do something that may seem a bit like navel-gazing. And I’ll say: I’m sorry we’re doing something course-related. This is what I think about!

So let’s model office hours.

Classes and Relationship
Classes and Relationship

One way to begin object modeling is to think about what kind of entities we need to model and what kind of relationships they should have with each other. Let’s start there:

// Define our different classes

Class Properties and Methods
Class Properties and Methods

Next, let’s consider the kind of actions and methods that our objects need to support. That will help guide us as we add required instance variables.

// Outline the methods on our different classes
// These may require us adding certain instance variables as needed

Implementing Initial Methods
Implementing Initial Methods

Next, we’ll pick a pair of the methods on our Room class to implement.

// Implement some Room methods

Finishing Up
Finishing Up

Finally, we’ll finish at least a preliminary implementation of our office hours model. And then discuss how you could extend and improve it!

// Finish Room

Practice: Last 8

Created By: Geoffrey Challen
/ Version: 2020.9.0

Create a public class called Last8. You should expose two public methods:

  • add: adds a value, does not return a value
  • last: returns an array containing the last 8 values that were added, in any order.

You do not need a constructor, but you can add an empty one if you need. Until 8 values have been added you should return 0s in their place.

For example, here's how an instance of Last8 should work:

Do not create a huge array to save the values. Submissions that do will be marked incorrect.

Practice: Closest Point

Created By: Geoffrey Challen
/ Version: 2022.9.0

Create a public class named ClosestPoint, which we'll use to track the closest location to an initial location. ClosestPoint should provide a public constructor accepting a single Location as its only parameter, which sets the origin. assert that the initial Location is not null. The Location class stores latitude and longitude values as doubles, which you can retrieve using getLatitude and getLongitude.

ClosestPoint provides two public methods. add accepts a new Location and, if it is closer to the origin passed to the constructor than any other location previously passed to add, it updates the closest location accordingly. add should also assert that the passed Location is not null. getClosest returns the closest Location passed to add, or null if add has not yet been called.

A few notes on how to approach this problem. You should calculate distance between two locations in the usual way for points on a flat surface. (We're assuming, for the sake of this problem, that the Earth is, in fact, flat.) However, because floating point math is sensitive to ordering, you should take care in how you compare two distances. With doubles, it is usually safer to not say first > second and instead first - second > delta, where delta is a small value. For this problem, use a delta of 0.0001.

Homework: Last 4 In Order

Created By: Geoffrey Challen
/ Version: 2020.9.1

Create a public class called Last4Ordered. You should expose two public methods:

  • add: adds a value, does not return a value
  • last: returns an array containing the last 4 values that were added in the order they were added.

You do not need a constructor, but you can add an empty one if you need. Until 4 values have been added you should return 0s in their place.

For example, here's how an instance of Last4Ordered should work:

Do not create a huge array to save the values. Submissions that do will be marked incorrect.

This problem is harder than it looks! A suggestion is to handle the cases until the array is initially filled separately. Once four values have been added, you will need to shift values around before adding a new one.

Do not use a List to solve this problem.

More Practice

Need more practice? Head over to the practice page.