There are many cases where a mechanical switch such as a button or a limit switch literally bounces when you change its position. The process of ignoring the bouncing so you don't repeatedly act on the switch unintentionally is called de-bouncing. There are several ways to do this; one is to start a timer when the switch change is detected and then ignore any subsequent switch changes until the timer expires. The code looks like this:
package frc.robot;
import edu.wpi.first.wpilibj.TimedRobot;
import edu.wpi.first.wpilibj.XboxController;
import edu.wpi.first.wpilibj.Timer;
public class Robot extends TimedRobot {
XboxController xbox;
Timer debounce;
@Override
public void robotInit() {
xbox = new XboxController(0);
debounce = new Timer();
debounce.start();
}
@Override
public void robotPeriodic() {
if (xbox.getAButton()) {
// A button pressed
if (debounce.hasPeriodPassed(0.5)) {
// more than half-second since last press
System.out.println("A button pressed!");
// restart debounce timer so we ignore presses in next half second
debounce.reset();
}
}
}
}
Try commenting out the if statement (and its closing brace) and see what happens when you press the A button