Download “while” loop

Survey
yes no Was this document useful for you?
   Thank you for your participation!

* Your assessment is very important for improving the workof artificial intelligence, which forms the content of this project

Document related concepts

Java (programming language) wikipedia , lookup

Falcon (programming language) wikipedia , lookup

Comment (computer programming) wikipedia , lookup

Object-oriented programming wikipedia , lookup

Java syntax wikipedia , lookup

Java performance wikipedia , lookup

Java ConcurrentMap wikipedia , lookup

Indentation style wikipedia , lookup

Name mangling wikipedia , lookup

Structured programming wikipedia , lookup

One-pass compiler wikipedia , lookup

C syntax wikipedia , lookup

C Sharp (programming language) wikipedia , lookup

C Sharp syntax wikipedia , lookup

For loop wikipedia , lookup

Transcript
Last Time
• Unary operators:
– Casting
– Boolean “NOT”
– Arithmetic operators
• Other Assignment operators
• Screen I/O (Console and simple GUI)
• Variable Scope
• if statements
Spring 2006
CISC101 - Prof. McLeod
1
Today
• Reminder: Lab 1 and Assignment 1 are posted.
• Assn 1 is due one week from today at 7pm.
• Start out with a “warm-up” exercise!
• Math class
• Style and Documentation
• Loops
• More exercises!
Spring 2006
CISC101 - Prof. McLeod
2
Exercise – An Easy One
1. Prompt the user for an integer.
2. Tell the user if the number is odd or even.
Spring 2006
CISC101 - Prof. McLeod
3
Exercise – From Tuesday
1. Obtain an outdoor temperature (in degrees Centigrade)
from the user.
2. If the temperature is less than -40, or greater than +40
tell him that the temperature is not legal and exit the
program.
3. If the temperature is >= -40, but less than 0, display “It is
cold! Wear a parka.”.
4. If the temperature is >= 0, but less than 15, display “It is
cool. Wear a jacket.”.
5. If the temperature is >= 15 and less than 25, display “It is
nice! Wear shorts.”.
6. If the temperatuer is >=25 and less than 40, display “It is
hot! Seek the beach!”.
Spring 2006
CISC101 - Prof. McLeod
4
The Math Class
• Java’s standard mathematical methods are found
in the Math class. They are invoked by naming
the class name followed by the method name,
separated by a period. For example, the sine of a
value can be calculated as:
double y = Math.sin(x);
• The Math class methods are static, (like the
methods in the System.out class).
• This means you can call them directly (without
instantiation).
Spring 2006
CISC101 - Prof. McLeod
5
The Math Class – Cont.
• To get more information on all the methods, look
in the API documentation.
Spring 2006
CISC101 - Prof. McLeod
6
Example: Math.random() Method
• Provides a “pseudorandom” double value
between 0 and 1.0
• How to calculate a random int value between 1
and 1,000, for example?
int randVal = (int)(1000 * Math.random()) + 1;
Spring 2006
CISC101 - Prof. McLeod
7
Programming Style & Documentation
• Purpose is to make your code readable (and
“debuggable”) by you or another programmer who
is familiar with the Java language.
• Internal style elements are documentation
(comments), spacing, and descriptive variable
names.
• Select the conventions you want to use and be
consistent.
Spring 2006
CISC101 - Prof. McLeod
8
Programming Style & Documentation –
Cont.
• Comments:
– Add a block comment to the top of the class and at the
beginning of each method. Describe overall purpose of
class/method, main algorithm used, author, date
created, and any assumptions made and/or bugs
found. Method comments should state what
parameters are expected by the method and what the
method returns.
– Comments for variable declarations, when the name of
variable is not self-explanatory.
– Comments at the beginnings of logical blocks of code.
– In-line comments to indicate the closing brackets of
blocks and what they close.
Spring 2006
CISC101 - Prof. McLeod
9
Programming Style & Documentation –
Cont.
• Spacing (alignment)
– Class definition header starts at column 1, and
closing bracket on column 1.
– Indent of about 3 or 4 spaces is adequate.
– Method headers and instance variable
declarations indented once.
– Code inside any block, including method code
indented once from alignment of method
header, or outer block.
Spring 2006
CISC101 - Prof. McLeod
10
Programming Style & Documentation –
Cont.
– Opening “{“ can be at the end of a statement line, or on
the line below.
– Closing “}” on same column as the column where the
method header is declared, or the statement containing
the opening “{“. “}” is usually by itself on a line.
– Add a comment after “}” to indicate what is being
closed.
– If you have an overlong line, it is OK to continue the line
on the line below, but indent the continued part of the
line. (Note – do not try to continue a line in the middle
of a String literal!)
Spring 2006
CISC101 - Prof. McLeod
11
Programming Style & Documentation –
Cont.
• Spacing (“white space”)
– Add blank lines before and after methods and larger
logical blocks.
– One statement per line. (Longer statements can be
broken onto multiple lines.)
– Use a space before “{“, “(“ and “[“. Use a space after “)”
and “]” (unless the next character is “;”).
– No code after “{“ or “}” on same line.
– No space after “(“ or before “)”.
– Use space after “,” or “;” in parameter lists or for loop
arguments, but not before.
– Put a space on both sides of an binary operator.
– No space before “;”.
Spring 2006
CISC101 - Prof. McLeod
12
Programming Style & Documentation –
Cont.
• Variable Names
– Also applies to method and class names.
– Follow java restrictions on names:
• Use only letters, numeric digits (0 to 9) and the “_” character.
• Cannot start name with a number.
• Java is case sensitive!
– Variables and method names usually start with a lower
case character. Class names start with an upper case
character. Constants are all in upper case.
– Variables are usually nouns.
– Methods are verbs or verbs and nouns.
Spring 2006
CISC101 - Prof. McLeod
13
Programming Style & Documentation –
Cont.
– Be descriptive, but not excessive!
– Examples:
• numStudents
• setPassingGrade ( parameter_list )
– Somewhat too long…:
• flagThatIsSetToTrueIfAProblemArisesWhen
ThereIsAFullMoonOverMyHouseInTheWinterW
hileMyProgramIsRunning
– It is OK to use single letter variable names such
as i, j, k for counters in loops.
Spring 2006
CISC101 - Prof. McLeod
14
Programming Style & Documentation –
Cont.
• The java compiler ignores all white space
including space characters, tabs and carriage
return/line feed characters.
• Note that most java keywords are in lower case.
• You will get an error message if you attempt to
use a keyword as a variable name.
Spring 2006
CISC101 - Prof. McLeod
15
Do
public class StyleDemo {
public static int someSum (int num1, int num2) {
int sum = num1 + num2;
return sum;
} // end someSum method
} // end StyleDemo class
Spring 2006
CISC101 - Prof. McLeod
16
Don’t!
public class StyleDemo{
public static int s(int l,int l1){
int S=l+l1; return S;
}}
Spring 2006
CISC101 - Prof. McLeod
17
Repetition or Using “Loops”
• We will discuss:
– while
– do/while
– for
– The “for each” loop in Java 5.0
– Use of “break” and “continue”
Spring 2006
CISC101 - Prof. McLeod
18
Repetition or “Loops”
• Suppose we combine a boolean test with some kind of
structure that allows us to branch back up to an earlier
piece of code:
if true
if false
etc.
Spring 2006
CISC101 - Prof. McLeod
19
Repetition - Cont.
• The boolean test determines when to stop the
repetition - as long as the condition is true, the
loop keeps going.
• Something inside the looping part must affect
what is tested in the condition - right? What if it
did not - what would happen?
Spring 2006
CISC101 - Prof. McLeod
20
Repetition - Cont.
• A simple example - suppose we wanted a loop to
execute only 20 times:
i=1
if true
if false
i < 21
i = i+1
etc.
Spring 2006
CISC101 - Prof. McLeod
21
Repetition - Cont.
• The number of repetitions is controlled by
changing the limit value for the loop counter - “i”
in the example on the previous slide.
• That example had i increasing by one each time.
The loop counter was being incremented by one.
• It could have been incremented by some other
value, 2, 3, or whatever.
• You could use something like “i = i * 2” to
increment the counter.
• If the counter is decreased in value each time, it is
being “decremented”.
Spring 2006
CISC101 - Prof. McLeod
22
Repetition - Cont.
• Suppose, in the previous example, i was
decremented by one instead. What would
happen?
i=1
if true
if false
i < 21
i=i-1
etc.
Spring 2006
CISC101 - Prof. McLeod
23
Repetition - Cont.
• The dreaded “infinite loop”!
• The java compiler will not prevent you from coding
a loop like the one shown - it will compile, and it
will run!
• And run, and run, and run, and run, and run, and run, and run,
and run, and run, and
run…
• As a programmer, you must be “on guard” for
such logic errors in your code.
Spring 2006
CISC101 - Prof. McLeod
24
Reminder - Increment and Decrement
Operators
• In loops, expressions like:
j = j + 1; and
k = k - 1;
are used so often, it is typical to see the
postincrement operator:
j++; is the same as j = j + 1;
k--; is the same as k = k - 1;
• You can use either notation.
Spring 2006
CISC101 - Prof. McLeod
25
“while” loop
• A java while loop can be used to code the structure
shown in the flowchart above (the “increment” one on slide
27):
int i = 1;
while (i < 21) {
// other statements
i = i + 1; // or you could use i++:
} // end while
• The “{ }” brackets enclose the statements that are
repeated.
• (A single statement to be repeated in the loop does not
require the “{}”.)
Spring 2006
CISC101 - Prof. McLeod
26
“while” loop - Cont.
• Note that java (thank goodness!!!) does not have
anything equivalent to a “goto” statement.
• (And if it did, I would not tell you about it,
anyways!!)
• So, you cannot construct a loop with an “if”
statement and a goto.
• An “if” statement cannot give you repetition, it
only allows you to decide on a single pass
through a branch of code.
Spring 2006
CISC101 - Prof. McLeod
27
“while” loop - Cont.
• while loop syntax:
while ( boolean_expression ) {
block_of_code
}
• As long as boolean_expression evaluates to true the
statements in the block_of_code continue to execute.
• By mistake, you might write the following - what would
happen?
while ( boolean_expression ); {
block_of_code
}
Spring 2006
CISC101 - Prof. McLeod
28
“while” loop - Cont.
• The boolean expression tested in a while loop could be
false to start with:
int i = 40;
while (i < 21) {
// other statements
i = i + 1;
}
• In this case, the loop would not execute at all.
• Use a “do/while” loop if you need a loop that will always
run at least once:
Spring 2006
CISC101 - Prof. McLeod
29
“do/while” loop
• Syntax:
do {
block_of_code
} while ( boolean_expression );
• Note the “;” at the end of the while statement.
• Since the conditional test is at the end of the loop,
it will always execute the loop at least once.
Spring 2006
CISC101 - Prof. McLeod
30
“do/while” loop - Cont.
• For example, suppose we must obtain a value between 1
and 100, inclusive, from the user:
int aVal = 0; // The compiler will force us to
// initialize aVal
do {
System.out.print(“Enter value between 1 and 100:”);
// code to obtain a value from the user
} while (aVal < 1 || aVal > 100);
• As long as the user does not do what he is told, the loop
will continue to re-prompt him for the correct value.
Spring 2006
CISC101 - Prof. McLeod
31
“for” loop
• The kind of while loop shown above:
int i = 1;
while (i < 21) {
// other statements
i = i + 1;
}
is used so often, that Java has provided another looping
structure that does all that is shown above, but needs
only one line:
for (int i = 1; i < 21; i = i + 1) {
// other statements
}
Spring 2006
CISC101 - Prof. McLeod
32
“for” loop - Cont.
• Or, as written with an increment operator:
for (int i = 1; i < 21; i++) {
// other statements
}
• Syntax:
for (initialization; boolean_expression; update) {
block_of_code
}
• for loops are used when you know, in advance, the
number of repetitions desired.
Spring 2006
CISC101 - Prof. McLeod
33
“for” loop - Cont.
• You don’t have to declare the counter inside the
for loop, if you have declared it earlier in your
program.
• But if you do declare it in the “for” statement then
the scope of that variable will only be inside the
loop block.
Spring 2006
CISC101 - Prof. McLeod
34
“for each” Loop in Java 5.0
• Often, you will want to “visit” every element in a
collection, not just a part.
• Syntax of the “for each” loop:
for (type_variable : collection) {
// statements
}
• These loops are only used with collections.
Spring 2006
CISC101 - Prof. McLeod
35
“for each” Loop in Java 5.0, Cont.
• (We don’t know what arrays are yet, but just for
now:)
• For example, suppose we have an array called
“data”, containing a collection of double type
numbers, and you want to add them all up:
double sum = 0;
for (double e : data) {
sum = sum + e;
// or sum += e;
}
Spring 2006
CISC101 - Prof. McLeod
36
“for each” Loop in Java 5.0, Cont.
• Equivalent normal “for” loop:
double sum = 0;
for (int i = 0; i < data.length; i++) {
sum = sum + data[i];
//or sum += data[i];
}
• The “for each” loop is a bit easier with arrays, but
is even better suited for other kinds of collections.
Spring 2006
CISC101 - Prof. McLeod
37
Loops - Misc.
• Don’t declare variables inside loops, as the repeated
declaration process uses up time and memory
unnecessarily.
• Loops are often nested - to usually not more than three
levels. For example:
int i, j;
int sum = 0;
for (i = 1; i <= 100; i++)
for (j = 1; j <= 10; j++)
sum++;
• sum would be 1000.
Spring 2006
CISC101 - Prof. McLeod
38
Loops - Misc. - Cont.
• There is no limit in Java to how many levels you
can nest loops.
• It is customary, but not necessary, to use the
variables i, j, k as loop counters.
• Loops really demonstrate the strength of
computers as they allow the machine to complete
mind-numbingly boring tasks with perfect
accuracy!
• Loops will always be used with any file I/O and
array operations.
Spring 2006
CISC101 - Prof. McLeod
39
Other Java Keywords Used With Loops
• break and continue
• The continue statement interrupts the execution
of a loop, and returns control to the top of the
loop.
• The break statement interrupts the execution of
a loop, and transfers control to the first statement
after the loop.
Spring 2006
CISC101 - Prof. McLeod
40
Use of “continue”
• For example,
Return to top of
loop when executed
for ( i = 1; i <= 5; i++) {
if ( i == 3 ) continue;
System.out.println("i = " + i);
}
System.out.println("End of loop!");
• Would print:
Spring 2006
i =
i =
i =
i =
End
1
2
4
5
of loop!
CISC101 - Prof. McLeod
41
Use of “break”
• For example,
Transfer to the first
statement after end of
loop when executed
for ( i = 1; i <= 5; i++) {
if ( i == 3 ) break;
System.out.println("i = " + i);
}
System.out.println("End of loop!");
• Would print:
16 September 2002
i = 1
i = 2
End of loop!
Fall 2002 CISC121 - Prof. McLeod
42
Use of “break” & “continue”
• Only use these keywords when it makes your
code easier to read.
• Avoid the use of more than one break or continue
inside a loop.
• If you use a condition to issue a break statement,
then why can’t you put that condition in the loop
test?
• Overuse of break statements can lead to
“spaghetti” code - just like the use of “goto”
statements!
Spring 2006
CISC101 - Prof. McLeod
43
Loop Exercise 1
1. Obtain from the user a positive upper limit.
2. Also obtain an increment value.
3. Print out all the numbers from 0 to the number before the
upper limit using the increment, one number per line.
For example, if the user supplies 50 and 20, the output
would be:
0
20
40
4. Supply an error message if the input values are not legal.
Spring 2006
CISC101 - Prof. McLeod
44
Loop Exercise 2
1. Obtain a positive integer number, > 1 from the
user. If the number supplied is illegal, continue
to prompt him until it is.
2. Print out all the numbers that divide this number
evenly, including the number itself, starting from
2. For example, if the user supplies 10, the
output would be:
2
5
10
Spring 2006
CISC101 - Prof. McLeod
45
Loop Exercise 3
1. Prompt the user for a positive number of
numbers.
2. If this number is > 0, display to the screen this
many prime numbers, starting from 2. For
example, if the user supplies 5, the output would
be:
2
3
5
7
11
Spring 2006
CISC101 - Prof. McLeod
46