这题我采用的是面向对象的思想,将各个模块分开,便于编写,也更符合使用OOP的思想解决问题
老规矩:先来看题目
题目:
判断101-200之间有多少个素数,并输出所有素数。(和素数的个数)PS:这是我自己加的需求。
程序分析:
判断素数的方法:用一个数分别去除 [2到sqrt(这个数)] ,如果能被整除, 则表明此数不是素数,反之是素数。
这里我先解释一下黄色部分的意思,一个数,我们看成 a*a(a²)[接近值] ,我们用这个数除以{ a 之前的整数 【2—a】 }如果不能被整除,我们则把这个数看成素数(质数)
实现过程:
- 第一步
我们首先到的是,使用for循环,去遍历每一个需要判断的值
for (int i = 101; i <= 200; i++) { //使用for循环,遍历每一个需要判断的数
}
这就是最外面的框架,我们接下来需要做的就是往里面填充方法,
- 第二部
创建一个用于计算的方法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
}
- 第三部
前文中提到,我自己还给他添加可一个需求:输出素数的个数
首先定义一个属性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
}
}
}