每天一练_(2)面向对象思维判断一个数是否是质数和打印范围内的所有质数

质数(prime number)又称素数,有无限个。一个大于1的自然数,除了1和它本身外,不能被其他自然数整除,换句话说就是该数除了1和它本身以外不再有其他的因数;否则称为合数

根据算术基本定理,每一个比1大的整数,要么本身是一个质数,要么可以写成一系列质数的乘积;而且如果不考虑这些质数在乘积中的顺序,那么写出来的形式是唯一的。最小的质数是2。

刚学习编程时,拿到这个题目时我都是直接写一个带参数的方法,然后调用这个方法,经老师指导告知这是一种面向过程式的思维方式,我们应该用面向对象的思维方式考虑到全局性,假如我有很多地方都要用到这个方法来判断一个数是否是质数,我们可不可以把这个方法看出一个类对象,参数看成这个对象的属性。再到类中定义一个判断质数的方法。在需要用到的地方直接调用这个类中的方法就可以了;这样减少代码的冗余性。

首先定义一个类对象

//封装一个类,计算一个数是否是质数(素数)
public class Calc {
    
    private int value;//一个属性(其实就是参数)

    public int getValue() {
        return value;
    }

    public void setValue(int value) {
        this.value = value;
    }
    
    //封装一个方法,判断这个数是否是质数
    public boolean isPirme(){
         boolean flag=true;//标识,默认为真
        if(value<=1){    // 1既不是质数也不是合数
            flag=false;
        }else{ 
        for(int i=2;i<value;i++){ 
            System.out.println(value+"%"+i+"的余数是:"+(value%i));
            if(value%i==0){   //没有余数,说明可以整除
                flag=false;   //标识这个数不是一个质数
                //break;      //跳出循环,没有必要再循环下去了
            }
        }    
    }
        return flag;
    }
    


}

再定义一个测试类:

public class MainCalc {

    public static void main(String[] args) {
        // TODO Auto-generated method stub

        Calc calc=new Calc();//实例化方法类
        int num=72;
        calc.setValue(num);//写入属性
        if(calc.isPirme()){ //调用方法,if()条件判断默认为真
            System.out.print(num+"是质数");//如果为真
        }else{
            System.out.print(num+"不是质数");//如果为假
        }
        
    }

}

测试结果:

那加入我现在要输出1000以内所有的质数呢?其实也很简单,你只需要定义一个参数,给定范围,让后循环调用上面已经写好的方法去判断。

注意,这里得把前面对象类用来测试的几行代码给注释掉:

源码:

public class MainCalc {

    public static void main(String[] args) {
        // TODO Auto-generated method stub


        
        //求 1000以内所有的质数
        Calc calc=new Calc();//实例化方法类
        int row=0;//计入个数
        for(int i=1;i<=1000;i++){  //遍历1000以内所有的数
            calc.setValue(i);     //写入 i
            if(calc.isPirme()){  //调用方法判断 ,默认为真
                System.out.print(i+" ");
                row++;          //如果为真那么就 +1;
            }
            if(row%20==0){    //每20个一行
                System.out.print("\n");
            }
            
        }
        System.out.println("1000以内质数的个数:"+row);
        
    }

}

 结果:

勤于思考,多元思维。

猜你喜欢

转载自www.cnblogs.com/bingxuewangjue/p/9163697.html