int i = 0;

System.out.println(i);

i++;

System.out.println(i);

int j = 10;

i = i + j;

j = i - j;

System.out.println(i + " " + j);

Next we’ll continue introducing the basic building blocks of our computer programs.
We’ll show how you can *manipulate* the data stored by your variables through simple mathematical operations.

Reminder: Variables

In the last lesson we introduced variables, which allow us to store changing values as our program runs.
We looked at how to *declare* and *initialize* those variables.
The declaration tells Java the name and type of the variable we are going to use, and the initialization sets the variable’s first value:

// Dear Java: I'm going to use a variable named catsAge to store integer values

// And I'd like it's initial value to be 6

int catsAge = 6;

If you’re having any trouble understanding variables, please review the previous lesson, or attend one of our concept review sessions.

Comments

Before we continue, we need to introduce one new piece of Java syntax: *comments*.
Comments allow us to include descriptive text in our programs.
Comments are *completely* ignored by the computer!
They are entirely for the humans who write, read, and maintain the code.

Java supports two types of comment:

// This is a single line comment. It starts with //

/*

This is a multi-line comment. It starts with the two-character symbol on the line above.

And it ends with the two-character symbol on the line below.

*/

Single-line comments are good when you have something short to say about something in your code.
Multi-line comments that start with `/*`

and end with `*/`

are better when you have more to say and need to write one or more paragraphs.

**Even though comments are ignored by the computer, they are essential to writing good computer code.**
We’ll use comments frequently in our examples, and show you how you can use them to outline a plan for completing more complex programming tasks.

Modifying Variables

Now that we can store data in our programs we can harness the next fundamental computer superpower: *math*.
Computers can do math, quickly and with (near) perfect accuracy.
Many of the operations that we can perform on variables are mathematical in nature:

int i = 10 * 20;

Variables can also be set based on the value of *other* variables:

int i = 10;

int j = 20;

int k = i + j;

Understanding Variable Assignment

Some of you, particularly those with a mathematical bent, may be alarmed by certain lines of Java code. Like this one:

int i = 10;

i = i + 1;

System.out.println(i);

In math, the statement on the second line is non-sensical.
Regardless of the value of `i`

, it can never *equal* itself plus one—nonsense!

The source of the confusion here is the `=`

symbol.
In Java, a *single* `=`

does *not* indicate or test equality.
It indicates **assignment**.
We use it when we want to *assign* a value to a variable.

To further the confusion, assignments in Java are evaluated from *right* to *left*.
So they aren’t math nor English!
That’s why the example above works.

Let’s examine this assignment carefully together:

int i = 1;

i = i + 1;

System.out.println(i);

Self-Modification Shortcuts

It’s fairly common in our programs to want to modify the value of a variable but start with its current value. For example:

int dollars = 0;

// Call parents

dollars = dollars + 100;

// Phew...

System.out.println(dollars);

These types of operations are common enough that there are a few shortcuts that you can use:

int dollars = 0;

// Call parents

dollars += 100;

// Phew...

System.out.println(dollars);

Similarly you can use `-=`

, `*=`

, and `/=`

.

Finally, adding and subtracting *by one* are so common that they even have an additional set of shortcuts:

int dollars = 0;

// Call parents

dollars += 1;

// WTF?

System.out.println(dollars);

// Call parents again

dollars++;

System.out.println(dollars);

// ...

Similarly you can use `++`

and `--`

.

Binary Negation

What we’ve been covering in this lesson are known as *operators*.
(We’ve covered the first half of the linked table. We’ll get to the rest soon!)
Almost all of them are for working with numbers.
Since, to a computer, everything *is* a number.

But there is one operator that we use to work with `boolean`

values:

boolean isCS124Awesome = false;

System.out.println(isCS124Awesome);

// Extra credit?

isCS124Awesome = !isCS124Awesome;

System.out.println(isCS124Awesome);

Homework Problem

As a reminder, CS 124 now allows students to collaborate freely on the homework problems. Please see the syllabus for more details.

CS People: Alan Turing

As we teach you the basics of computer science and programming, we’re also going introduce you to computer science *people*—the humans behind technology’s remarkable achievements.
Note that we include a few questions on each quiz on these short videos, so don’t skip them!

The name Turing comes up a lot in computer science.
There’s the *Turing machine*, an abstract model of a machine that, despite its simplicity, can compute any algorithm^{(1)}
There’s the *Turing test* to determine whether a machine can be distinguished from a human.
And there’s the Turing Award—computer science’s highest honor, and its equivalent of the Nobel Prize.

But who was Alan Turing, and why did his life end tragically at the age of only 41? Watch the video below to find out more.

Note that the British Government formally apologized to Alan Turing—but not until 2009, 55 years after his death.

Need more practice? Head over to the practice page.