Unit 3 - The while Loop - Extending the Vic class - Examples
This lesson covers the while loop in Java, a fundamental construct that allows for repetition while a condition is true. We explore its syntax and provide practical examples, including modifications to the Vic class to demonstrate its usage effectively in under ten lines of code. Learn how to set up initialization, testing, and change conditions in loops, along with loop invariants. We also extend the Vic class to create DualDirectionVic, enhancing its functionality with new methods for navigating slots.
Unit 3 - The while Loop - Extending the Vic class - Examples
E N D
Presentation Transcript
Loops in Java A structure that allows the programmer to repeat something while a condition is true. (also called “iteration”) Three kinds of loops in Java 1. The “while” loop // we will see today 2. The “for” loop // we will see next lesson 3. The “do-while” loop // not on AP exam…in your book
Loops in Java • The “while” loop – used when we want to repeat • something while a condition remains true. Syntax: while(condition) { statement; statement; … } The program will execute these statements while the condition remains true. When the condition becomes false, the program will resume after the curly brace.
Example Rewrite Program 2 from Unit 7 using less than 10 lines of program code.
public class Program2 { public static void main (String[ ] args) { Vic one = new Vic(); Vic two = new Vic(); if(one.seesSlot() && two.seesSlot()) { if (!two.seesCD() && one.seesCD()) { one.takeCD(); two.putCD(); } one.moveOn(); two.moveOn(); } … // Repeat this code 8 times public class Program2 { public static void main (String[ ] args) { Vic one = new Vic(); Vic two = new Vic(); while(one.seesSlot() && two.seesSlot()) { if (!two.seesCD() && one.seesCD()) { one.takeCD(); two.putCD(); } one.moveOn(); two.moveOn(); } } … // Repetition done in the loop!!
Example: Explain what this application program does. public class Mystery { public static void main (String [] args) { Vic.reset(args); Vic v = new Vic(); while(Vic.stackHasCD()) { v.putCD(); v = new Vic(); } } }
The while Loop (cont’d) • Example: // Returns the smallest n // such that 2^n >= x public static int intLog2 (int x) { int n = 0, p = 1; while ( p < x ) { p *= 2; n++; } return n; } Initialization Testing Change
The while Loop (cont’d) • Initialization: The variables tested in the condition must be initialized to some values. If the condition is false at the outset, the loop is never entered. • Testing: The condition is tested before each iteration. If false, the program continues with the first statement after the loop. • Change: At least one of the variables tested in the condition must change within the body of the loop.
Loop Invariants • A loop invariant is an assertion that is true before the loop and at the end of each iteration. • Invariants help us reason about the code. int n = 0, p = 1; while (p < x) { p *= 2; n++; } ... Loop invariant: p = 2n
Extending the Vic Shortcoming: Vic does not have a method to go back to the front of the sequence (the first slot). Extension: called inheritance in OOP. Allows us to keep all of the qualities of a class, plus add any new ones. Introducing the DualDirectionVic Allows us to keep all of the qualities of a Vic, plus add any new ones. The new ones: 1. A method to back up to the first slot. 2. A method to go to the last slot. 3. A boolean method to check for first slot.
class DualDirectionVic extends Vic { private String itsFirstPosition; public DualDirectionVic() { super(); itsFirstPosition = getPosition(); } publicvoid goToFirst() { while(!seesFirstSlot()) backUp(); } public void goToLast() { while(seesSlot()) moveOn(); backUp(); } public boolean seesFirstSlot() { if(itsFirstPosition.equals(getPosition())) return true; else return false; } }