Survey
* Your assessment is very important for improving the workof artificial intelligence, which forms the content of this project
* Your assessment is very important for improving the workof artificial intelligence, which forms the content of this project
Lecture 05 Loops! Why Loops? • Allow for better user interaction • Make code much cleaner • Save time copying/pasting Types of loops • We’ll be using 3 different kinds of loops in this class: • While • Do…while • For While Loop • while loops execute statements repeatedly while a condition is true while (loop-continuation-condition) { statement(s); } While Loop Infinite Loop public class WhileLoopExample { public static void main(String[] args) { while (true){ System.out.println("Hello!"); } } } Counter-controlled Loop public class WhileLoopExample { public static void main(String[] args) { int count = 0; while (count < 10){ System.out.println("Hello " + (count+1) + " times!"); count++; } } } Increment counter Off by one errors Loop Design Strategies • Step 1: Figure out which parts need to repeat • Step 2: Put those statements inside a loop block • Step 3: Figure out the loop-continuation condition and statements for controlling the loop (increment, etc) Guess the Secret Word - with Loop import java.util.Scanner; public class GuessSecretWord_Loop { public static void main(String[] args) { Scanner input = new Scanner(System.in); String secretWord = "SECRET"; String userGuess; System.out.println("Try to guess my secret word"); userGuess = input.nextLine(); while (!userGuess.equals(secretWord)){ System.out.println("NOPE. Try again!"); userGuess = input.nextLine(); } System.out.println("Great job!"); } } example of sentinel-controlled loop Do-While Loop • Same as while loop - but checks loop-continuation condition at the end of the loop do { statement(s); } while (loop-continuation-condition); Do-While Loop Guess the Secret Word - with Do While Loop import java.util.Scanner; public class GuessSecretWord_DoWhileLoop { public static void main(String[] args) { Scanner input = new Scanner(System.in); String secretWord = "SECRET"; String userGuess; do { System.out.println("Try to guess my secret word"); userGuess = input.nextLine(); } while (!userGuess.equals(secretWord)); System.out.println("Great job!"); } } While vs. Do-while? • Use a Do-while if the statements in the loop should execute at least once • One might be more convenient (less code), or make a little better experience for your users. • I see and use while loops much more often than dowhile loops, though they definitely have their place For Loop • Simplify counter-controlled loops (helps prevent errors) • Very useful when the number of times to run is known beforehand for (initial-action; loop-continuation-condition; action-after-each-iteration) statement(s); } For Loops • Often looks something like this: for (int i = initialValue; i < endValue; i++) { statement(s); } Simple For Loop Example public class ForLoopExample { public static void main(String[] args) { for (int i = 0; i < 10; i++){ System.out.println(i); } } } Which Loop? • Guess a number until you’re right • Calculating the perimeter of a rectangle from user input • Adding all the digits from 0-9 • Game loop Which Loop? • The fact is, you can use any of them. But one might make more sense than the others, given your circumstances Nested Loops • Every time the outer loop is repeated, the inner loop starts over Nested Loops public class NestedLoopExample { public static void main(String[] args) { // Outer loop of "rows" for (int i = 0; i < 5; i++){ // Inner loop of "columns" for (int j = 0; j < 5; j++){ // Print * System.out.print("*"); } // Go to next "row" System.out.println(""); } } } When to use nested loops • Structured data (Arrays, tables, Maps, etc) • working with pixel array (graphics programming) • I use these all the time Break and Continue • Keywords to control flow in loops • break = immediately get out of entire loop • continue = get out of current iteration, keep looping Break and Continue public class BreakAndContinueExample { public static void main(String[] args) { String message = "Hey, this thing is a string"; for (int i = 0; i < message.length(); i++){ char currentChar = message.charAt(i); if (currentChar == ' '){ break; } else { System.out.print(currentChar); } } } } Loopify Fizz Buzz lite • Let’s go back to Fizz Buzz and have it run from 1 to 100 instead of asking for a number Loopify Fizz Buzz lite import java.util.Scanner; public class FizzBuzz { public static void main(String[] args) { for (int i = 1; i < 101; i++){ if (i % 3 == 0 && i % 5 != 0){ System.out.println("Fizz"); } else if (i % 5 == 0 && i % 3 != 0){ System.out.println("Buzz"); } else if (i % 3 == 0 && i % 5 == 0){ System.out.println("FizzBuzz"); } else { System.out.println(i); } } } } Find ✨perfect✨ numbers • a number is considered perfect if it is equal to the sum of all it’s positive divisors, except itself. • so 6 is a perfect number since 6 = 3 + 2 + 1 • These are very rare, only 4 exist below 10,000 • Let’s find them using loops! Find ✨perfect✨ numbers public class PerfectNumberFinder { public static void main(String[] args) { // Loop through all the numbers for (int i = 1; i < 10000; i++){ // for each number, start a new sum int sum = 0; // for each number, check all the numbers smaller than that to see if it's a divisor for (int j = 1; j < i; j++){ if (i % j == 0){ sum += j; } } // if the sum is equal to the number, you found a perfect one! if (sum == i){ System.out.println("Found a perfect number: " + i + "!"); } } } } Find the next leap years • Write a program that will ask the user for a year to start with and how many leap years they would like to find. • Using a loop, display the year if it’s a leap year for the amount of leap years requested. • Tip: A leap year happens every 4 years, but not every 100 years, then again every 400 years. Find the next leap years import java.util.*; public class FindNextLeapYear { public static void main(String[] args) { int numberOfLeapYearsToFind; int userYear; Scanner input = new Scanner(System.in); System.out.print("Enter the year you'd like to start from: "); userYear = input.nextInt(); System.out.print("Enter how many leap years you'd like to find: "); numberOfLeapYearsToFind = input.nextInt(); int foundLeapYears = 0; while (foundLeapYears < numberOfLeapYearsToFind){ if (((userYear % 4 == 0) && (userYear % 100 != 0)) || userYear % 400 == 0){ foundLeapYears++; System.out.println(userYear); } userYear++; } } }