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

Practice with Interfaces

import java.util.Iterator;
public class Countdown implements Iterable, Iterator {
private int start;
public Countdown(int setStart) {
start = setStart;
}
public Iterator iterator() {
return this;
}
public Integer next() {
return start--;
}
public boolean hasNext() {
return start >= 0;
}
}
Countdown countdown = new Countdown(8);
for (Object value : countdown) {
System.out.println(value);
}

Next we’ll get more practice working with interfaces. We’ll move past our friend Comparable and look at two new Java interfaces that allow us to integrate with a built-in language feature—the enhanced for loop. Super cool! Let’s go…

Iterable and Iterator
Iterable and Iterator

Now let’s have more fun with interfaces. Remember the enhanced Java for loop:

// Note that Java won't both convert the int literal to a long and box it
// No clue why
Long[] longs = new Long[] {1L, 2L, 5L};
for (long value : longs) {
System.out.println(value);
}

So it turns out that we can implement our own classes that can be used in the enhanced for loop. Pretty cool! Let’s look at the interfaces that are required and consider how they work. We’ll examine them both at once, since they are really designed to work together:

Random Number Iterator
Random Number Iterator

Now let’s put what we know to use to build a simple random number generator. We’ll create a class that can be used on the right side of a for loop and generates a certain number of random int values.

// Random int Iterable

A Few Improvements
A Few Improvements

Next, let’s look at a few improvements to our iterable random number generator based on what we’ve already done.

// Random int Iterable

Practice: String Length Comparable Parameterized

Created By: Geoffrey Challen
/ Version: 2021.10.0

Create a public class named MyString. MyString should provide a public constructor that accepts a single String argument. You should reject null Strings in your constructor using assert.

MyString should also implement the Java Comparable<MyString> interface, returning 1 for a positive result and -1 for a negative result. Normally Strings are compared lexicographically: "aaa" comes before "z". MyString should compare instances based on the length of its stored String. So MyString("aaa") should come after MyString("z"), since "aaa" is longer than "z".

You will probably need to review the documentation for Comparable. Because we are using the type parameter MyString to the Comparable interface, compareTo accepts an MyString as an argument. The MyString passed to compareTo will not be null.

Practice: Both Greater Comparable

Created By: Geoffrey Challen
/ Version: 2021.10.0

Create a class named BothGreater that stores two int values set by the constructor. Neither should be publicly visible. BothGreater should also implement the Java Comparable<BothGreater> interface, returning 1 for a positive result and -1 for a negative result. An instance of BothGreater is greater than a second instance if both int values are larger, and is lesser than if both int values are smaller. Otherwise compareTo should return 0. The instance passed to compareTo will not be null.

You will probably need to review the documentation for Comparable. Because we are using the type parameter BothGreater to the Comparable interface, compareTo accepts an BothGreater as an argument.

Homework: Closer To A Pole

Created By: Geoffrey Challen
/ Version: 2022.10.0

Create a public class named Position. Position should define a single public constructor that accepts two fields: a latitude and longitude value, as double values, in that order. Your constructor should reject invalid latitude and longitude values. Valid longitude values are between -180.0 and 180.0, inclusive, while valid latitude values are between -90.0 and 90.0, inclusive.

Position should also implement the Java Comparable<Position> interface, returning 1 for a positive result and -1 for a negative result. An instance of Position is greater than a second instance if it is closer to either the North or South Pole, is lesser than the second instance if it is farther from the North or South Pole, and equal if it is at the same distance. The instance passed to compareTo will not be null.

You will probably need to review the documentation for Comparable. Because we are using the type parameter Position to the Comparable interface, compareTo accepts an Position as an argument.

More Practice

Need more practice? Head over to the practice page.