// Introduction to Software Testing // Authors: Paul Ammann & Jeff Offutt // Chapter 3; page ?? import java.util.*; /* * CLASS NAME: PrimesNumbers * Class to compute N prime numbers * ORIGINAL AUTHOR: Michael Wilson * * NOTE: The class has a fault that results in false negatives: primes ending in 9 are missing * */ public class PrimeNumbers implements Iterable { private List primes = new ArrayList(); /* * creates a list of n prime numbers * @param n - the number of primes to compute * silently treats negative arguments as zero */ public void computePrimes (int n) { int count = 1; // count of primes int number = 2; // number tested for primeness boolean isPrime; // is this number a prime while (count <= n) { isPrime = true; for (int divisor = 2; divisor <= number / 2; divisor++) { if (number % divisor == 0) { isPrime = false; break; // for loop } } if (isPrime && (number % 10 != 9)) { // THIS IS THE FAULT!!! primes.add (number); count++; } number++; } } @Override public Iterator iterator() { return primes.iterator(); } @Override public String toString() { return primes.toString(); } public static void main (String[] argv) { PrimeNumbers primes = new PrimeNumbers(); primes.computePrimes(8); System.out.println("Primes: " + primes); Iterator itr = primes.iterator(); System.out.println("First prime: " + itr.next()); } }