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