460 likes | 477 Views
Last Time. Unary operators: Casting Boolean “NOT” Arithmetic operators Other Assignment operators Screen I/O (Console and simple GUI) Variable Scope if statements. Today. Reminder: Lab 1 and Assignment 1 are posted. Assn 1 is due one week from today at 7pm.
E N D
Last Time • Unary operators: • Casting • Boolean “NOT” • Arithmetic operators • Other Assignment operators • Screen I/O (Console and simple GUI) • Variable Scope • if statements CISC101 - Prof. McLeod
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! CISC101 - Prof. McLeod
Exercise – An Easy One • Prompt the user for an integer. • Tell the user if the number is odd or even. CISC101 - Prof. McLeod
Exercise – From Tuesday • Obtain an outdoor temperature (in degrees Centigrade) from the user. • If the temperature is less than -40, or greater than +40 tell him that the temperature is not legal and exit the program. • If the temperature is >= -40, but less than 0, display “It is cold! Wear a parka.”. • If the temperature is >= 0, but less than 15, display “It is cool. Wear a jacket.”. • If the temperature is >= 15 and less than 25, display “It is nice! Wear shorts.”. • If the temperatuer is >=25 and less than 40, display “It is hot! Seek the beach!”. CISC101 - Prof. McLeod
The Math Class • Java’s standard mathematical methods are found in the Mathclass. 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). CISC101 - Prof. McLeod
The Math Class – Cont. • To get more information on all the methods, look in the API documentation. CISC101 - Prof. McLeod
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; CISC101 - Prof. McLeod
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. CISC101 - Prof. McLeod
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. CISC101 - Prof. McLeod
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. CISC101 - Prof. McLeod
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!) CISC101 - Prof. McLeod
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 “;”. CISC101 - Prof. McLeod
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. CISC101 - Prof. McLeod
Programming Style & Documentation – Cont. • Be descriptive, but not excessive! • Examples: • numStudents • setPassingGrade ( parameter_list ) • Somewhat too long…: • flagThatIsSetToTrueIfAProblemArisesWhenThereIsAFullMoonOverMyHouseInTheWinterWhileMyProgramIsRunning • It is OK to use single letter variable names such as i, j, k for counters in loops. CISC101 - Prof. McLeod
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. CISC101 - Prof. McLeod
Do public class StyleDemo { public static int someSum (int num1, int num2) { int sum = num1 + num2; return sum; } // end someSum method } // end StyleDemo class CISC101 - Prof. McLeod
Don’t! public class StyleDemo{ public static int s(int l,int l1){ int S=l+l1; return S; }} CISC101 - Prof. McLeod
Repetition or Using “Loops” • We will discuss: • while • do/while • for • The “for each” loop in Java 5.0 • Use of “break” and “continue” CISC101 - Prof. McLeod
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. CISC101 - Prof. McLeod
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? CISC101 - Prof. McLeod
Repetition - Cont. • A simple example - suppose we wanted a loop to execute only 20 times: i = 1 if true i < 21 if false i = i+1 etc. CISC101 - Prof. McLeod
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”. CISC101 - Prof. McLeod
Repetition - Cont. • Suppose, in the previous example, i was decremented by one instead. What would happen? i = 1 if true i < 21 if false i = i - 1 etc. CISC101 - Prof. McLeod
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. CISC101 - Prof. McLeod
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. CISC101 - Prof. McLeod
“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 “{}”.) CISC101 - Prof. McLeod
“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. CISC101 - Prof. McLeod
“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 } CISC101 - Prof. McLeod
“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: CISC101 - Prof. McLeod
“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. CISC101 - Prof. McLeod
“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. CISC101 - Prof. McLeod
“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 } CISC101 - Prof. McLeod
“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. CISC101 - Prof. McLeod
“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. CISC101 - Prof. McLeod
“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. CISC101 - Prof. McLeod
“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; } CISC101 - Prof. McLeod
“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. CISC101 - Prof. McLeod
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. CISC101 - Prof. McLeod
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. CISC101 - Prof. McLeod
Other Java Keywords Used With Loops • break and continue • The continuestatement interrupts the execution of a loop, and returns control to the top of the loop. • The breakstatement interrupts the execution of a loop, and transfers control to the first statement after the loop. CISC101 - Prof. McLeod
Use of “continue” • For example, • Would print: CISC101 - Prof. McLeod
Use of “break” • For example, • Would print: Fall 2002 CISC121 - Prof. McLeod
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! CISC101 - Prof. McLeod
Loop Exercise 1 • Obtain from the user a positive upper limit. • Also obtain an increment value. • 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: • Supply an error message if the input values are not legal. 0 20 40 CISC101 - Prof. McLeod
Loop Exercise 2 • Obtain a positive integer number, > 1 from the user. If the number supplied is illegal, continue to prompt him until it is. • 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 CISC101 - Prof. McLeod
Loop Exercise 3 • Prompt the user for a positive number of numbers. • 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 CISC101 - Prof. McLeod