Java算法题2——使用面向对象的思想求素数

这题我采用的是面向对象的思想,将各个模块分开,便于编写,也更符合使用OOP的思想解决问题

老规矩:先来看题目

题目:

判断101-200之间有多少个素数,并输出所有素数。(和素数的个数)PS:这是我自己加的需求。

程序分析:

判断素数的方法:用一个数分别去除 [2到sqrt(这个数)] ,如果能被整除, 则表明此数不是素数,反之是素数。
这里我先解释一下黄色部分的意思,一个数,我们看成 a*a(a²)[接近值] ,我们用这个数除以{ a 之前的整数 【2—a】 }如果不能被整除,我们则把这个数看成素数(质数)

实现过程:

  1. 第一步

我们首先到的是,使用for循环,去遍历每一个需要判断的值

for (int i = 101; i <= 200; i++) {		//使用for循环,遍历每一个需要判断的数		
	
		}

这就是最外面的框架,我们接下来需要做的就是往里面填充方法,

  1. 第二部
    创建一个用于计算的方法calculate(),这个方法需要的参数是第一步里面的 i 一个需要判断的参数值
	public void calculate(int i) {		//我们自己写的方法
	
	}

接着我们就可以在这个方法中去编写逻辑程序,去做判断了

boolean flag = true;    				//布尔值的变量,为true则是素数
for (int j = 2; j <= Math.sqrt(i); j++) {
			if (i % j == 0) {			//当区域为0时,****不是素数****
				flag = false;			//false不是素数
				break;					//结束当前i这层的判断,准备进入到下一个i
			}
		}

先定义一个布尔值得变量,用于判断是否为素数,当值为true时,是素数
前文说到一个数可以看成 a*a 的形式,所以使用Math类中的sqrt( )方法,可以得到算术平方根,这个方法的参数是 i ,我们用这个数除以 j ==> { a 之前的整数 【2—a】 }如果不能被整除,我们则把这个数看成素数(质数)。

if (i % j == 0) {						//当区域为0时,****不是素数****  j就是2——算术平方根之前的int值
				flag = false;			//false不是素数
				break;					//结束当前i这层的判断,准备进入到下一个i
			}

当能被整除时,flag = false,就不会执行下面的输出素数的程序

if (flag == true) {						//当不满足【if (i % j == 0)】这个判断时,flag仍然为true,即是素数,
			System.out.print(i + " ");	//输出当前i
			}
  1. 第三部
    前文中提到,我自己还给他添加可一个需求:输出素数的个数
    首先定义一个属性count赋值0;
    我们只需要给方法在添加一个引用参数test,这样就能调用属性计算素数个数了
int count = 0;		//定义一个变量count用于记录素数的个数
test.calculate(i, test);		//调用我们自己写的方法(判断是否为素数),将需要判断的i和引用参数test传递给方法calculate
test.count++;//计次+1

这三句是关键语句。
下面附上完整程序代码:

public class Test {
	/**
	 * 判断101-200之间有多少个素数,并输出所有素数。 程序分析:判断素数的方法:用一个数分别去除2到sqrt(这个数),如果能被整除,
	 * 则表明此数不是素数,反之是素数。
	 */
	// 创建一个用于计算的方法
	// 一个数=a×a(最接近)=a²,我们只要用a以下的质数去除这个数,如果都除不开,
	// 那么确定是质数,如果除得开,那么就是合数。
	int count = 0;//定义一个变量count用于记录素数的个数

	public static void main(String[] args) {
		// TODO 自动生成的方法存根

		Test test = new Test();//实例化test对象
		for (int i = 101; i <= 200; i++) {//使用for循环,遍历每一个需要判断的数
			test.calculate(i, test);//调用我们自己写的方法(判断是否为素数),将需要判断的i和引用参数test传递给方法calculate
		}
		System.out.println(test.count);//输出共有几个素数

	}

	public void calculate(int i, Test test) {//我们自己写的方法
		boolean flag = true;    //布尔值的变量,为true则是素数
		for (int j = 2; j <= Math.sqrt(i); j++) {
			//一个数=a×a(最接近)=a²,我们只要用a以下的质数去除这个数,
			//如果都除不开(有余数), 那么确定是质数,如果除得开(取余为0),那么就是合数。
			if (i % j == 0) {//当区域为0时,****不是素数****
				flag = false;//false不是素数
				break;//结束当前i这层的判断,准备进入到下一个i
			}
		}
		if (flag == true) {//当不满足【if (i % j == 0)】这个判断时,flag仍然为true,即是素数,
			System.out.print(i + " ");//输出当前i
			test.count++;//计次+1
		}
	}

}

你可能感兴趣的:(Java每日练)