09 Ch Scanner Ifelse
09 Ch Scanner Ifelse
with Scanner
Interactive programs
We have written programs that print console output.
2
Interactive programs
Interactive programs can be challenging.
Computers and users think in very different ways.
Users tend to “misbehave”.
3
Scanner
Scanner: An object that can read input from many sources.
Communicates with System.in
Can also read from files (Ch. 6), web sites, databases, etc…
Example:
Scanner console = new Scanner(System.in);
4
Scanner methods
Method Description
nextInt() reads an int from the user and returns it
nextDouble() reads a double from the user
next() reads a one-word String from the user
nextLine() reads a one-line String from the user
years 53
int years = 65 - age;
System.out.println(years + " years until retirement!");
}
}
6
Scanner example 2
import java.util.*; // so that I can use Scanner
public class ScannerMultiply {
public static void main(String[] args) {
Scanner console = new Scanner(System.in);
System.out.print("Please type two numbers: ");
int num1 = console.nextInt();
int num2 = console.nextInt();
int product = num1 * num2;
System.out.println("The product is " + product);
}
}
7
Input tokens
token: A unit of user input, as read by the Scanner.
Tokens are separated by whitespace (spaces, tabs, new lines).
How many tokens appear on the following line of input?
23 John Smith 42.0 "Hello world" $2.50 " 19"
Output:
What is your age? Timmy
java.util.InputMismatchException
at java.util.Scanner.next(Unknown Source)
at java.util.Scanner.nextInt(Unknown Source)
...
8
Scanners as parameters
If many methods need to read input, declare a Scanner in
main and pass it to the other methods as a parameter.
public static void main(String[] args) {
Scanner console = new Scanner(System.in);
int sum = readSum3(console);
System.out.println("The sum is " + sum);
}
// Prompts for 3 numbers and returns their sum.
public static int readSum3(Scanner console) {
System.out.print("Type 3 numbers: ");
int num1 = console.nextInt();
int num2 = console.nextInt();
int num3 = console.nextInt();
return num1 + num2 + num3;
}
9
Program puzzle
Consider changing the output to include the minimum value:
Type 3 numbers: 8 6 13
The average is 9.0
The minimum value is 6
11
Misuse of if
What's wrong with the following code?
Scanner console = new Scanner(System.in);
System.out.print("What percentage did you earn? ");
int percent = console.nextInt();
if (percent >= 90) {
System.out.println("You got an A!");
}
if (percent >= 80) {
System.out.println("You got a B!");
}
if (percent >= 70) {
System.out.println("You got a C!");
}
if (percent >= 60) {
System.out.println("You got a D!");
}
if (percent < 60) {
System.out.println("You got an F!");
}
...
12
Nested if/else
Chooses between outcomes using many tests
if (test) {
statement(s);
} else if (test) {
statement(s);
} else {
statement(s);
}
Example:
if (x > 0) {
System.out.println("Positive");
} else if (x < 0) {
System.out.println("Negative");
} else {
System.out.println("Zero");
}
13
Nested if/else/if
If it ends with else, exactly one path must be taken.
If it ends with if, the code might not execute any path.
if (test) {
statement(s);
} else if (test) {
statement(s);
} else if (test) {
statement(s);
}
Example:
if (place == 1) {
System.out.println("Gold medal!");
} else if (place == 2) {
System.out.println("If you're not first, you're last!");
} else if (place == 3) {
System.out.println("What comes after last place?");
}
14
Which nested if/else?
(1) if/if/if (2) nested if/else (3) nested if/else/if
Whether a user is lower, middle, or upper-class based on income.
(2) nested if / else if / else
Whether you made the dean's list (GPA ≥ 3.8) or honor roll (3.5-3.8).
(3) nested if / else if
15
Nested if/else question
BMI Weight class
Formula for body mass index (BMI): below 18.5 underweight
weight 18.5 - 24.9 normal
BMI 2
703 25.0 - 29.9 overweight
height
30.0 and up obese
17
Nested if/else, cont'd.
// reads information for one person, computes their BMI, and returns it
public static double person(Scanner console) {
System.out.println("Enter next person's information:");
System.out.print("height (in inches)? ");
double height = console.nextDouble();
System.out.print("weight (in pounds)? ");
double weight = console.nextDouble();
System.out.println();
double bodyMass = bmi(height, weight);
return bodyMass;
}
// Computes/returns a person's BMI based on their height and weight.
public static double bmi(double height, double weight) {
return (weight * 703 / height / height);
}
// Outputs information about a person's BMI and weight status.
public static void report(int number, double bmi) {
System.out.println("Person " + number + " BMI = " + bmi);
if (bmi < 18.5) {
System.out.println("underweight");
} else if (bmi < 25) {
System.out.println("normal");
} else if (bmi < 30) {
System.out.println("overweight");
} else {
System.out.println("obese");
}
}
} 18