The if-else statement

advertisement
The if-else statement
Introducing the if-else statement
• Programming problem:
• Re-write the a,b,c-formula program to solve for complex
number solutions when b2 - 4ac < 0
Introducing the if-else statement (cont.)
• Algorithm:
input a, b, c;
Det = b*b - 4*a*c;
// Compute the determinant
if ( Det >= 0 )
{
print -b/(2a) + sqrt(Det)/(2a); // Real number solutions
print -b/(2a) - sqrt(Det)/(2a);
}
if ( Det < 0 )
{
print -b/(2a) "+" (sqrt(-Det)/(2a) + "i"); // Complex number solutions
print -b/(2a) "-" (sqrt(-Det)/(2a) + "i");
}
Introducing the if-else statement (cont.)
• Java program:
import java.util.Scanner;
public class Abc3
{
public static void main(String[] args)
{
double a, b, c, Det, re, im;
Scanner in = new Scanner(System.in); // Construct Scanner object
a = in.nextDouble(); // Read in next number into a
b = in.nextDouble(); // Read in next number into b
c = in.nextDouble(); // Read in next number into c
Introducing the if-else statement (cont.)
Det = b*b - 4*a*c;
if ( Det >= 0 )
{
System.out.println( (-b + Math.sqrt( Det ) ) / (2*a) );
System.out.println( (-b - Math.sqrt( Det ) ) / (2*a) );
}
if ( Det < 0 )
{
re = -b/(2*a);
// Compute real part
im = Math.sqrt( -Det )/(2*a); // Compute imaginary part
System.out.println( re + "+" + im + "i" );
System.out.println( re + "-" + im + "i" );
}
}
}
Introducing the if-else statement (cont.)
• Example Program: (Demo above code)
– Prog file:
http://mathcs.emory.edu/~cheung/Courses/170/Syllabus/06/Progs/
Abc3.java
• How to run the program:
• Right click on link and save in a scratch directory
• To compile: javac Abc3.java
• To run:
java Abc3
Introducing the if-else statement (cont.)
• Example:
Enter a:1
Enter b:2
Enter c:5
-1.0+2.0i
-1.0-2.0i
Introducing the if-else statement (cont.)
• Shortcoming:
• We have to negate the if-condition
ourselves...
• This can introduce unnecessary errors
Introducing the if-else statement (cont.)
• Solution:
• Extend the if-statement with an alternative
statement
• The alternative statement is only executed when
the if-condition is false
The if-else statement in Java
• The if-else statement:
• The if-else statement is the second conditional
statement in Java
• The if-else statement selects one of two statements
to be executed based on a given condition
Syntax and meaning of the if-else-statement
• Syntax of the if-else-statement:
if ( CONDITION ) ONEstatement
else
ONE-statement
Syntax and meaning of the if-else-statement
(cont.)
• Explanation:
• The keyword if announces (to the Java compiler) that
we started an if-else-statement
• A conditional clause ( CONDITION ) follows the
keyword if
• This is the condition of the if-else-statement
Syntax and meaning of the if-else-statement
(cont.)
• Following the condition clause, you can write (only) one
statement
• This statement will only be executed if the
condition is true
• Following the then-part, you must specify the keyword
else followed
bythe
(only)
one statement
• This is
condition
of the if-else-statement
• This statement will only be executed if the
condition is false
Syntax and meaning of the if-else-statement
(cont.)
• Note:
The way that the Java compiler decide whether a
conditional statement is:
•An if-statement
•An if-else-statement
is by the presence/absence of the keyword else.
Computer Jargon: else-part
• The statement following the keyword else in an if-elsestatement is called
• The else-part of the if-else-statement (Or
else-part for short)
Computer Jargon: else-part (cont.)
• Schematically:
The a,b,c-formula using an if-else-statement
• Programming problem:
• Re-write the a,b,c-formula program to solve for
complex number solutions when b2 - 4ac < 0
• Algorithm:
The a,b,c-formula using an if-else-statement
(cont.)
• Java program:
import java.util.Scanner;
public class Abc4
{
public static void main(String[] args)
{
double a, b, c, Det, re, im;
Scanner in = new Scanner(System.in); // Construct Scanner object
a = in.nextDouble(); // Read in next number into a
b = in.nextDouble(); // Read in next number into b
c = in.nextDouble(); // Read in next number into c
Det = b*b - 4*a*c;
The a,b,c-formula using an if-else-statement
(cont.)
if ( Det >= 0 )
{
System.out.println( (-b + Math.sqrt( Det ) ) / (2*a) );
System.out.println( (-b - Math.sqrt( Det ) ) / (2*a) );
}
else
{
re = -b/(2*a);
// Compute real part
im = Math.sqrt( -Det )/(2*a); // Compute imaginary part
System.out.println( re + "+" + im + "i" );
System.out.println( re + "-" + im + "i" );
}
}
}
The a,b,c-formula using an if-else-statement
(cont.)
• Example Program: (Demo above code)
– Prog file:
http://mathcs.emory.edu/~cheung/Courses/170/Syllabus/06/Progs/
Abc4.java
• How to run the program:
• Right click on link and save in a scratch directory
• To compile: javac Abc4.java
• To run:
java Abc4
Programming example: find maximum of 2
numbers
• Programming problem:
• Read in 2 number a and b
• Assign to the variable max the largest value of a
and b
Programming example: find maximum of 2
numbers (cont.)
• Algorithm:
Programming example: find maximum of 2
numbers (cont.)
• Java program:
import java.util.Scanner;
public class Max01
{
public static void main(String[] args)
{
double a, b, max;
Scanner in = new Scanner(System.in); // Construct Scanner object
a = in.nextDouble(); // Read in next number into a
b = in.nextDouble(); // Read in next number into b
if ( a >= b )
max = a;
else
max = b;
System.out.println( "max value = " + max );
}
}
Programming example: find maximum of 2
numbers (cont.)
• Example Program: (Demo above code)
– Prog file:
http://mathcs.emory.edu/~cheung/Courses/170/Syllabus/06/Progs/
Max01.java
• How to run the program:
• Right click on link and save in a scratch directory
• To compile: javac Max01.java
• To run:
java Max01
Program example: find maximum of 3
numbers
• Programming problem:
• Read in 3 number a, b and c
• Assign to the variable max the largest value of a, b
and c
Program example: find maximum of 3
numbers (cont.)
• Algorithm:
Program example: find maximum of 3
numbers (cont.)
• Java program:
import java.util.Scanner;
public class Max01
{
public static void main(String[] args)
{
double a, b, max;
Scanner in = new Scanner(System.in); // Construct Scanner object
a = in.nextDouble(); // Read in next number into a
b = in.nextDouble(); // Read in next number into b
c = in.nextDouble(); // Read in next number into c
Program example: find maximum of 3
numbers (cont.)
if ( a >= b )
max = a;
else
max = b;
if ( c > max )
max = c;
// Find max(a,b)
// Check c > max ?
System.out.println( "max value = " + max );
}
}
Program example: find maximum of 3
numbers (cont.)
• Example Program: (Demo above code)
– Prog file:
http://mathcs.emory.edu/~cheung/Courses/170/Syllabus/06/Progs/
Max02.java
• How to run the program:
• Right click on link and save in a scratch directory
• To compile: javac Max02.java
• To run:
java Max02
Programming example: leap year
• Leap year description (Wikipedia):
• In the Gregorian calendar, the current standard
calendar in most of the world, most years that are
evenly divisible by 4 are leap years.
• Years that are evenly divisible by 100 are not leap
years, unless they are also evenly divisible by 400, in
which case they are leap years
Programming example: leap year (cont.)
• Algorithm:
Programming example: leap year (cont.)
• Program in Java:
import java.util.Scanner;
public class LeapYear01
{
public static void main(String[] args)
{
int year;
boolean leap;
Programming example: leap year (cont.)
Scanner in = new Scanner(System.in); // Construct Scanner object
year = in.nextInt();
// Read in year
if ( year % 4 == 0 )
leap = true;
else
leap = false;
if ( year % 100 == 0 )
leap = false;
if ( year % 400 == 0 )
leap = true;
System.out.println("Year is leap year ? " + leap);
}
}
Programming example: leap year (cont.)
• Example Program: (Demo above code)
– Prog file:
http://mathcs.emory.edu/~cheung/Courses/170/Syllabus/06/Progs/
LeapYear01.java
• How to run the program:
• Right click on link and save in a scratch directory
• To compile: javac LeapYear01.java
• To run:
java LeapYear01
Common errors in if-else-statements
• Common error 1: bogus semicolon after the if-condition
Example:
if ( a >= b ) ;
max = a;
else
max = b;
// Bogus ;
Common errors in if-else-statements (cont.)
• Compiler message:
Error01.java:18: 'else' without 'if'
else
^
Common errors in if-else-statements (cont.)
• because the compiler "reads" the program as follows:
if ( a >= b )
;
max = a;
else
max = b;
// A correct if-statement
// Note: the if-statement ended here !
// A correct assignment statement
// else ? Where is the if ???
Common errors in if-else-statements (cont.)
• Common error 2: forgetting to use statement block in the
then-part
Example:
if ( Det >= 0 )
System.out.println( (-b + Math.sqrt( Det ) ) / (2*a) );
System.out.println( (-b - Math.sqrt( Det ) ) / (2*a) );
else
re = -b/(2*a);
// Compute real part
im = Math.sqrt( -Det )/(2*a); // Compute imaginary part
System.out.println( re + "+" + im + "i" );
System.out.println( re + "-" + im + "i" );
Common errors in if-else-statements (cont.)
• The Java compiler will report the error 'else' without 'if'
because syntactically, the program is read as follows:
if ( Det >= 0 )
System.out.println( (-b + Math.sqrt( Det ) ) / (2*a) ); // If-statement
System.out.println( (-b - Math.sqrt( Det ) ) / (2*a) );
// Print
else
// Else without if
re = -b/(2*a);
// Compute real part
im = Math.sqrt( -Det )/(2*a); // Compute imaginary part
System.out.println( re + "+" + im + "i" );
System.out.println( re + "-" + im + "i" );
Common errors in if-else-statements (cont.)
• Common error 3: missing semicolon after the then-part
Example:
if ( a >= b )
max = a
else
max = b;
// Missing semicolon !!!
Common errors in if-else-statements (cont.)
• Compiler message:
Error03.java:17: ';' expected
max = a
^
Common errors in if-else-statements (cont.)
• Reason:
• The then-part is ONE statement
• A statement must be ended with a semicolon
Common errors in if-else-statements (cont.)
• Common error 4: bogus semicolon after the block in the
then-part
• Example:
if ( a >= b )
{
max = a;
};
// bogus semicolon !!!
else
{
max = b;
}
Common errors in if-else-statements (cont.)
• Compiler message:
Error04.java:20: 'else' without 'if'
else
^
Common errors in if-else-statements (cont.)
• Reason:
• The then-part is ONE statement
• A statement must be ended with a semicolon
Common errors in if-else-statements (cont.)
• Common error 4: bogus semicolon after the block in the
then-part
Example:
if ( a >= b )
{
max = a;
};
// bogus semicolon !!!
else
{
max = b;
}
Common errors in if-else-statements (cont.)
• Compiler message:
Error04.java:20: 'else' without 'if'
else
^
Common errors in if-else-statements (cont.)
• Because syntactically, the program is read as follows:
if ( a >= b )
{
max = a;
}
;
// An if-statement
// An empty statement !!!
else
// Else without if...
{
max = b;
}
Programming advice
• As you can see, forgetting a ";" and adding an extra ";" can
cause serious syntax errors
The best thing is to stick to one useful form: use block !!!
Programming advice (cont.)
• I always write if-statements and if-else-statements using
blocks first:
if ( ..... )
{
(leave empty first)
}
---------------------------------------------if ( ..... )
{
(leave empty first)
}
else
{
(leave empty first)
}
Programming advice (cont.)
I fill in the statements in the then-part and else-part later.
So even when the if-part and/or else-part consist of 1
statement, I write them as blocks.
Download