Asserting Java, Ch 7: Repetition - PowerPoint PPT Presentation

About This Presentation
Title:

Asserting Java, Ch 7: Repetition

Description:

2nd part of Chapter 6: Repetition Algorithmic Pattern: The Determinate loop We often need to perform some action a specific number of times: Produce 89 paychecks ... – PowerPoint PPT presentation

Number of Views:51
Avg rating:3.0/5.0
Slides: 17
Provided by: RickM85
Category:

less

Transcript and Presenter's Notes

Title: Asserting Java, Ch 7: Repetition


1
Determinate Loop Pattern, Java's for Statement,
and Scanner objects 2nd part of Chapter 6
Repetition
2
Algorithmic Pattern The Determinate loop
  • We often need to perform some action a specific
    number of times
  • Produce 89 paychecks
  • Count down to 0 (take 1 second of the clock).
  • Simulate playing a game of "Let's Make a Deal"
    10,000 times
  • The determinate loop pattern repeats some action
    a specific number of times

3
(No Transcript)
4
Determinate Loops
  • This template repeats a process n times
  • replace comments with appropriate statements
  • int n / how often we must repeat the
    process /
  • for( int j 1 j lt n j j 1 )
  • // the process to be repeated
  • determinate loops must know the number of
    repetitions before they begin
  • know exactly how many employees, or students, or
    whatever that must be processed, for example

5
General FormThe Java for loop
  • for ( initial statement loop-test
    update-step)
  • repeated-part
  • When a for loop is encountered, the
    initial-statement is executed (used here quite
    often as int j 1). The loop-test evaluates. If
    loop-test is false, the for loop terminates. If
    loop-test is true, the repeated-part executes
    followed by the update-step.

6
Flow chart view of a for loop
Initial statement
True
False
Loop test
Iterative part
update-step
7
Example for loop that produces an average
  • Scanner keyboard new Scanner(System.in)
  • double sum 0.0
  • System.out.print("How many do you want to
    average? ")
  • int n keyboard.nextInt()
  • // Do something n times
  • for (int j 1 j lt n j j 1)
  • System.out.print("Enter number ") // lt-
    Repeat 3
  • int number keyboard.nextInt() // lt-
    statements
  • sum sum number // lt- n times
  • double average sum / n
  • System.out.print("Average " average)

8
Code Demo Use the debugger to trace this code
  • int n 5
  • for (int j 1 j lt n j j 1)
  • System.out.println(j)
  • for (int k 10 k gt 0 k k - 2)
  • System.out.println(k)

9
Other Incrementing Operators
  • It is common to see determinate loops of this
    form where n is the number of repetitions
  • for( int j 1 j lt n j )
  • // ...
  • The unary and -- operators add 1 and subtract
    1 from their operands, respectively.
  • int n 0
  • n // n is now 1 equivalent to nn1 or
    n1
  • n // n is now 2
  • n-- // n is now 1 again
  • The expression count is equivalent to the more
    verbose count count 1

10
Other Assignment Operators
  • Java has several assignment operators in addition
    to (- and )
  • j - 2 is the equivalent of j j - 2
  • sum x is the equivalent of sum sum x
  • What is sum when a user enters 7 and 8?
  • int sum 0
  • int x 0
  • System.out.print("Enter a number ")
  • x keyboard.nextInt() // user enters 7
  • sum x
  • System.out.print("Enter a number ")
  • x keyboard.nextInt() // user enters 8
  • sum x

11
Indeterminate loop with a Scanner
  • Sometimes a stream of input from the keyboard or
    a file needs to be read until there is no more
    data in the input stream
  • Consider a Scanner object constructed with a
    String argument
  • The string represents an input stream
  • You will need Scanner in project 2, methods 9 and
    10 sumInScanner and maximumInScanner

12
These assertions pass
_at_Test public void showScanner() Scanner
scannerWithInts new Scanner("1 2 3")
assertEquals(1, scannerWithInts.nextInt())
assertEquals(2, scannerWithInts.nextInt())
assertEquals(3, scannerWithInts.nextInt())
Scanner scanner new
Scanner("There are five words here.")
assertEquals("There", scanner.next())
assertEquals("are", scanner.next())
assertEquals("five", scanner.next())
assertEquals("words", scanner.next())
assertEquals("here.", scanner.next())
13
A test method to test num100s
_at_Test public void testNum100s()
ControlFun cf new ControlFun() Scanner
scanner0 new Scanner("1 2 3") Scanner
scanner1 new Scanner("4 100 2 5") Scanner
scanner3 new Scanner("100 100 2 -3
5 3 2 -100 100") assertEquals(0,
cf.num100s(scanner0)) assertEquals(1,
cf.num100s(scanner1)) assertEquals(3,
cf.num100s(scanner3))
14
Answer
public int num100s (Scanner scanner) int
result 0 while (scanner.hasNextInt())
int next scanner.nextInt() if (next
100) result return
result
15
Careful using next too often!
  • These assertions should pass with the code that
    follows on the next slide

_at_Test public void testSumOfNegs()
ControlFun cf new ControlFun() Scanner
scanner0 new Scanner("1 2 3") Scanner
scannerA new Scanner("1 -2 3") Scanner
scannerB new Scanner("-4 1 -2 3")
assertEquals(0, cf.sumOfNegatives(scanner0))
assertEquals(-2, cf.sumOfNegatives(scannerA))
assertEquals(-6, cf.sumOfNegatives(scannerB))

16
What's wrong with this method?
public int sumOfNegatives(Scanner scanner)
int result 0 while
(scanner.hasNextInt()) if
(scanner.nextInt() lt 0) result
scanner.nextInt() return
result
Write a Comment
User Comments (0)
About PowerShow.com