KotlinCS 124 LogoJava


String test = null;

This lesson is all about nothing! It turns out, that in Java, nothing causes all kinds of problems. We have to be very careful with nothing. In fact, nothing may be the biggest flaw with the Java programming language! Let’s find out why, and also continue to practice writing String algorithms.

Java’s Nothing That Is (A Big Problem)
Java’s Nothing That Is (A Big Problem)

Java has a special value that is used to indicate that an object is uninitialized: null. Here’s an example using Strings, the one object that we have been working with:

String s = null;

null is a literal that can be used to initialize any object. Note that variables of primitive types cannot be set to null:

int i = null;

However, arrays of primitive types are objects and so can be null:

int[] values = null;

The Billion Dollar Mistake
The Billion Dollar Mistake

null seems harmless and maybe even kind of cute! But it has left a trail of damage and tears in its wake. In fact, famous computer scientist Tony Hoare, who is credited for inventing null as part of the programming language ALGOL, refers to it as his “billion dollar mistake”. Let’s look at why:

String s = null;

null has caused so many problems over the years, that newer variants of Java have made avoiding these problems a core design goal.

Safely Working with null
Safely Working with null

From this point forward we’re going to try and keep null in the back of our minds. Always. Whenever we have a variable that could be null, we need to make sure that it isn’t null before we do anything with it!

Fortunately there is a fairly straightforward pattern to this. Let’s check it out:

int countCharacters(String input, char toCount) {

Practice: Array Max (1D)

Created By: Geoffrey Challen
/ Version: 2020.9.0

Let's bring together our understanding of functions and our understanding of arrays. Previously you determined the maximum of three values. Some of you solved this problem using an array. Now we'll write a function that can determine the maximum of any number of double values stored in an array.

Declare and implement a function called arrayMax. It should accept an array of doubles as its single argument, and return the maximum value stored in the array. If the array is empty or null, you should return 0.0.

More Practice With Strings
More Practice With Strings

Now let’s continue developing our algorithmic and String manipulation capabilities. Let’s apply our skills to determining whether two Strings are anagrams. An anagram is created by rearrange the letters from one word to form another:

For our implementation we will not ignore whitespace and capitalization. Some anagrams do: for example, “New York Times” and “monkeys write” are anagrams, but the first string has two spaces while the second has only one. To us those would not be anagrams. When we are done, we can discuss how to make our approach more flexible.

// Design and implement an anagram method

Note that there are better ways to implement this algorithm. Perhaps we’ll return to it later and experiment with one or even two alternate approaches. That’s part of what makes computer science so exciting! There is always more than one way to solve any problem…

Practice: Array Count Greater Than 1D

Created By: Geoffrey Challen
/ Version: 2021.8.0

Write a method named arrayCountGreaterThan. It should accept an int array as its first argument and an int as its second, and return a count of how many values in the array are strictly greater than the second parameter. assert that the passed array is not null.

Homework: Array All Multiples

Created By: Geoffrey Challen
/ Version: 2022.8.0

Write a method named arrayAllMultiples that, given an array of int values greater than 0, returns whether the values are all integer multiples of one of the values in the array, which we'll call the base. For example, given the array {4, 2, 8} you would return true, since 4 and 8 are integer multiples of the base 2. Given the array {2, 2, 5} you would return false, since there is no value that all others are integer multiples of. (If the array contains 1, you should always return true, but there's no need to handle this case specifically.)

You should approach this problem in two steps. First, identify the base—the value in the array that you are going to check whether others are multiples of. This may sound complicated, but it's straightforward. You do not need to and should not check whether every value is base! Your solution should not contain a nested loop.

Next, check all the values in the array and look for a counterexample—a value that is not a multiple of the base.

The passed array may be null or empty. In those cases you should return false. Valid arrays will contain only integers strictly greater than 0.

ACM Student Chapter
ACM Student Chapter

Hello! We are ACM@UIUC, the largest CS RSO on campus! We represent 16+ special interest groups that focus on all areas of computing—from security, to AI, to policy. Each special interest group hosts weekly meetings on their topics of choice. Some are educational, others are experimental, and most are just plain fun. We also have 7 committees that maintain our internal state and host activities; among them are HackIllinois and R|P, the largest student-run hackathon and student-led tech conference in the Midwest, respectively.

You can learn more about our ACM chapter here.

More Practice

Need more practice? Head over to the practice page.