验证哥德巴赫猜想
要求:
- 将大于6的偶数进行拆分
- 分别验证拆分后的两个值是否为质数
传统程序调用思路:先有函数的实现者,再有函数的调用者。
必须先有函数,再调用(串行)
接口程序调用思路:先有接口的使用者,后有接口的实现者。
定义接口之后 功能实现和功能调用可以(并行)
图解:
原版验证哥德巴赫猜想
public class TestGoldBach {
public static void main(String[] args) {
//哥德巴赫猜想
//传统程序调用思路:先有函数的实现者,再有函数的调用者
//必须先由函数,再调用(串行)
int num=8;
//1.将大于6的偶数进行拆分
for (int i = 2; i <=num/2; i++) {
if(isPrime(i) && isPrime(num-i)) {//2
System.out.println(i+"\t"+(num-i));
}
}
}
//2.分别验证拆分后的两个值是否为质数
public static boolean isPrime(int n) {
for(int i=2;i<n;i++) {
if(n%i==0) {
return false;
}
}
return true;
}
}
接口版哥德巴赫猜想
public class TestGoldBach2 {
public static void main(String[] args) {
//接口程序调用思路,先有接口的使用者,后有接口的实现者
//(4)程序员A,调用工具方法
checkGoldBach(8,new EngineerAsIsPrime());
}
//(2)验证哥德巴赫猜想(工具)
public static void checkGoldBach(int num,MathTool tool) {
//接口回调:需要传递实例对象,背后实质传递得失实现类对象中的实例方法,实例方法背后实质上是方法的逻辑代码
//1.将大于6的偶数进行拆分
for (int i = 2; i <= num/2; i++) {
if(tool.isPrime(i)&&tool.isPrime(num-i)) {
System.out.println(i+"\t"+(num-i));
}
}
}
}
//定义接口之后 功能实现和功能调用可以 并行
//(1)约定:指定标准(隔离)
interface MathTool{
public abstract boolean isPrime(int n);
}
//2.分别验证拆分后的两个值是否为质数
//(3)程序员A,写个实现类
class EngineerAsIsPrime implements MathTool{
@Override
public boolean isPrime(int n) {
for(int i=2;i<n;i++) {
if(n%i==0) {
return false;
}
}
return true;
}
}
接口回调例子二