background image

33

  -test\

34
35

  -java\

36
37

  -com\

38
39

  -javaworld\

40
41

  -primefinder\

42
43

  PrimeFinderTest.java

 

   PrimeFinderTest.java 是一个 JUnit 4 测试包;为了测试验证该示例程序,你需要使用
JUnit 工具。为了遵循 Maven 2 命名约定,该应用程序的源文件在 src/main/java 下,而验证
该解决方案的 JUnit 4 测试包则在 src/test/java 下。下面我们将对这些文件夹的关键内容进
行介绍。
发现素数
  接口 com.javaworld.primefinder.PrimeNumberSearcher 定义了组件必须遵循的契约。该
契约的功能有方法 findPrimeNumbers()来指定,如列表 1 所示。
  列表 1.搜索契约

1

PrimeNumberSource findPrimeNumbers(BigInteger lowerBound,

2

BigInteger upperBound);

 

   com.javaworld.primefinder.PrimeNumberSource 是结果句柄必须遵循的接口。它定义了

 

一个方法 BigInteger nextPrime(),当被调用时,它应该返回搜索结果缓冲器中的下一个元
素。如果结果缓冲器已经被用完,必须返回 null

 

值来表示没有结果可用。正如 此前所提到

的,该方法的执行必须是线

安全

§的。

 

   需要指出的是,该示例应用程序任务的重点是找出指定搜索范围内的素数;因此我们
可 以 使 用 来 自 java.math.BigInteger

 

类 的 nextProbablePrime() 方 法 。 你 可 以 在 效 用 类

com.javaworld.primefinder.PrimeUtil

 

的一个静态方法中 封装调用该方法,示例程序如列表

2 所示。
  列表 2.在指定范围内发现首个素数的效用方法

1

public

 

static

 BigInteger findFirstPrime(

long

 lowerBound, 

long

 upperBound)

2
3

  {

4
5

  BigInteger result;

6
7

  BigInteger startPos = BigInteger.valueOf(lowerBound);

8
9

  BigInteger nextProbablePrime;

10
11

  

if

 (startPos.isProbablePrime(.....)) 

//

 

some reasonable accuracy

12