When a button is connected in that configuration, the input is what's called floating, meaning it's not a 0 or a 1. When the button is pressed, it is connected to ground, so that's definitely a 0, but when it's not pressed down, we don't know the value of the pin.
Pull Up Resistor
We need to include what's called a "pull-up" resistor to pull the signal up to a logic 1 when the button is not pressed.
Image from Sparkfun
What this means is when the button is not pressed, the Arduino reads a logic 1. When the button is pressed, the current flows through the resistor to ground and the Arduino reads a logic 0.
Internal Pull Up Resistor
The Arduino also has internal pull up resistors so you don't necessarily have to add an extra component to your circuit. There are a couple of ways to use this.
You used to have to do it like this:
pinMode(pin, INPUT); // set pin to input
digitalWrite(pin, HIGH); // turn on pullup resistors
Now we can do it simply in one line:
This enables the 20k pull up resistor on that pin. The input will no longer be floating when the button is not pressed.
Note: This only works when the other end is connected to ground.