Consider the countPositive method and answer the questions.
You may make a copy of a worksheet and complete this activity, or write your answer on paper(s) or your computer.
/**
* Count positive elements
*
* @param x array to search
* @return count of positive elements in x
* @throws NullPointerException if x is null
*/
line 1 public int countPositive (int[] x)
line 2 {
line 3 int count = 0;
line 4 for (int i=0; i < x.length; i++)
line 5 {
line 6 if (x[i] >= 0)
line 7 count++;
line 8 }
line 9 return count;
line 10 }
// Given test case
// test input: x = [-4, 2, 0, 2]
// expected = 2
if (x[i] > 0)
Reachability: (x != null) && (x != []) Infection: There exists at least one 0 in x Propagation: True
Input: x = [] Expected Output: 0 Actual Output: 0
Input: x = [1, 2, 3] Expected Output: 3 Actual Output: 3Let's look at the state
< x={1, 2, 3}, PC=[int count=0, (line 3)] >
< x={1, 2, 3}, count=0, PC=[int i=0, (line 4)] >
< x={1, 2, 3}, count=0, i=0, PC=[i<x.length, (line 4)] >
< x={1, 2, 3}, count=0, i=0, PC=[if (x[i]>=0), (line 6)] >
< x={1, 2, 3}, count=0, i=0, PC=[count++, (line 7)] >
< x={1, 2, 3}, count=1, i=0, PC=[i++, (line 4)] >
< x={1, 2, 3}, count=1, i=1, PC=[i<x.length, (line 4)] >
< x={1, 2, 3}, count=1, i=1, PC=[if (x[i]>=0), (line 6)] >
< x={1, 2, 3}, count=1, i=1, PC=[count++, (line 7)] >
< x={1, 2, 3}, count=2, i=1, PC=[i++, (line 4)] >
< x={1, 2, 3}, count=2, i=2, PC=[i<x.length, (line 4)] >
< x={1, 2, 3}, count=2, i=2, PC=[if (x[i]>=0), (line 6)] >
< x={1, 2, 3}, count=2, i=2, PC=[count++, (line 7)] >
< x={1, 2, 3}, count=3, i=2, PC=[i++, (line 4)] >
< x={1, 2, 3}, count=3, i=3, PC=[i<x.length, (line 4)] >
< x={1, 2, 3}, count=3, i=3, PC=[return count, (line 9)] >
A correct program
< x={1, 2, 3}, PC=[int count=0, (line 3)] >
< x={1, 2, 3}, count=0, PC=[int i=0, (line 4)] >
< x={1, 2, 3}, count=0, i=0, PC=[i<x.length, (line 4)] >
< x={1, 2, 3}, count=0, i=0, PC=[if (x[i]>0), (line 6)] >
< x={1, 2, 3}, count=0, i=0, PC=[count++, (line 7)] >
< x={1, 2, 3}, count=1, i=0, PC=[i++, (line 4)] >
< x={1, 2, 3}, count=1, i=1, PC=[i<x.length, (line 4)] >
< x={1, 2, 3}, count=1, i=1, PC=[if (x[i]>0), (line 6)] >
< x={1, 2, 3}, count=1, i=1, PC=[count++, (line 7)] >
< x={1, 2, 3}, count=2, i=1, PC=[i++, (line 4)] >
< x={1, 2, 3}, count=2, i=2, PC=[i<x.length, (line 4)] >
< x={1, 2, 3}, count=2, i=2, PC=[if (x[i]>0), (line 6)] >
< x={1, 2, 3}, count=2, i=2, PC=[count++, (line 7)] >
< x={1, 2, 3}, count=3, i=2, PC=[i++, (line 4)] >
< x={1, 2, 3}, count=3, i=3, PC=[i<x.length, (line 4)] >
< x={1, 2, 3}, count=3, i=3, PC=[return count, (line 9)] >
Input: x = [-1, 0, 2] Expected Output: 1 Actual Output: 2
Input: x = [-4, 2, 0, 2]
Expected Output: 2
Actual Output: 3
First Error State: i = 2; count = 1;
PC = immediately before the count++ statement.
(taking the branch to the count++ statement could be considered erroneous)
Let's look at the state< x={-4, 2, 0, 2}, PC=[int count=0, (line 3)] >
< x={-4, 2, 0, 2}, count=0, PC=[int i=0, (line 4)] >
< x={-4, 2, 0, 2}, count=0, i=0, PC=[i<x.length, (line 4)] >
< x={-4, 2, 0, 2}, count=0, i=0, PC=[if (x[i]>=0), (line 6)] >
< x={-4, 2, 0, 2}, count=0, i=0, PC=[i++, (line 4)] >
< x={-4, 2, 0, 2}, count=0, i=1, PC=[i<x.length, (line 4)] >
< x={-4, 2, 0, 2}, count=0, i=1, PC=[if (x[i]>=0), (line 6)] >
< x={-4, 2, 0, 2}, count=0, i=1, PC=[count++, (line 7)] >
< x={-4, 2, 0, 2}, count=1, i=1, PC=[i++, (line 4)] >
< x={-4, 2, 0, 2}, count=1, i=2, PC=[i<x.length, (line 4)] >
< x={-4, 2, 0, 2}, count=1, i=2, PC=[if (x[i]>=0), (line 6)] >
< x={-4, 2, 0, 2}, count=1, i=2, PC=[count++, (line 7)] >
< x={-4, 2, 0, 2}, count=2, i=2, PC=[i++, (line 4)] >
< x={-4, 2, 0, 2}, count=2, i=3, PC=[i<x.length, (line 4)] >
< x={-4, 2, 0, 2}, count=2, i=3, PC=[if (x[i]>=0), (line 6)] >
< x={-4, 2, 0, 2}, count=2, i=3, PC=[count++, (line 7)] >
< x={-4, 2, 0, 2}, count=3, i=3, PC=[i++, (line 4)] >
< x={-4, 2, 0, 2}, count=3, i=4, PC=[i<x.length, (line 4)] >
< x={-4, 2, 0, 2}, count=3, i=4, PC=[return count, (line 9)] >
A correct program
< x={-4, 2, 0, 2}, PC=[int count=0, (line 3)] >
< x={-4, 2, 0, 2}, count=0, PC=[int i=0, (line 4)] >
< x={-4, 2, 0, 2}, count=0, i=0, PC=[i<x.length, (line 4)] >
< x={-4, 2, 0, 2}, count=0, i=0, PC=[if (x[i]>0), (line 6)] >
< x={-4, 2, 0, 2}, count=0, i=0, PC=[i++, (line 4)] >
< x={-4, 2, 0, 2}, count=0, i=1, PC=[i<x.length, (line 4)] >
< x={-4, 2, 0, 2}, count=0, i=1, PC=[if (x[i]>0), (line 6)] >
< x={-4, 2, 0, 2}, count=0, i=1, PC=[count++, (line 7)] >
< x={-4, 2, 0, 2}, count=1, i=1, PC=[i++, (line 4)] >
< x={-4, 2, 0, 2}, count=1, i=2, PC=[i<x.length, (line 4)] >
< x={-4, 2, 0, 2}, count=1, i=2, PC=[if (x[i]>0), (line 6)] >
< x={-4, 2, 0, 2}, count=1, i=2, PC=[i++, (line 4)] >
< x={-4, 2, 0, 2}, count=1, i=3, PC=[i<x.length, (line 4)] >
< x={-4, 2, 0, 2}, count=1, i=3, PC=[if (x[i]>=0), (line 6)] >
< x={-4, 2, 0, 2}, count=1, i=3, PC=[count++, (line 7)] >
< x={-4, 2, 0, 2}, count=2, i=3, PC=[i++, (line 4)] >
< x={-4, 2, 0, 2}, count=2, i=4, PC=[i<x.length, (line 4)] >
< x={-4, 2, 0, 2}, count=2, i=4, PC=[return count, (line 9)] >
CC-BY-NC-SA 4.0 license.