用接口回调验证哥德巴赫猜想
在学习到接口这一章节的时,用接口回调验证哥德巴赫猜想,接下来我们就用接口回调完成任意输入一个大于6偶数拆成两个素数的和。首先第一步定义一个MathTool 的接口,里面定义一个public abstract boolean isPrime(int n) 方法,第二步验证哥德巴赫猜想(工具)定义一个抽象的checkGoldBach(int num , MathTool tool) 方法,两个形参一个为输入的偶数值,另一个为MathTool类型的对象。第三步定义一个实现类EngineerAsIsPrime 继承MathTool 接口并覆盖 isPrime(int n) 方法用于返回。第四步调用方法**checkGoldBach(m , new EngineerAsIsPrime());**进而完成程序。
import java.util.Scanner;
public class TestGoldBach {
public static void main(String[] args) {
Scanner input=new Scanner(System.in);
System.out.print("请输入一个大于6的偶数:");
int m=input.nextInt();
//(4)程序员A,調用工具方法
checkGoldBach(m , new EngineerAsIsPrime());//(isPrime()) ---> (for(int i = 2 ; i < n; i++) { if(n % i == 0) { return false; } } return true;)
}
//(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(num+"拆成的两个质数分别为:"+i +"\t"+ (num-i));
}
}
}
}
//(1)约定:指定标准(隔离)
interface MathTool{
public abstract boolean isPrime(int n);
}
//(3)程序员A,写个实现类
class EngineerAsIsPrime implements MathTool {
@Override
public boolean isPrime(int n) {
for(int i = 2 ; i < Math.sqrt(n); i++) {
if(n % i == 0) {
return false;
}
}
return true;
}
}
运行结果: