需求:键盘录入一个正整数x,判断该整数是否为一个质数。

 本人思路:循环2到x-1,如果有数能将x除尽,则说明x不是质数,反之则是。

初始代码:

public class LoopTest3 {
    public static void main(String[] args) {        
         //1.键盘录入
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入一个正整数:");
        int x = sc.nextInt();

        //2.循环判断除了1和本身还能否被除尽
        for (int i = 2; i < x; i++) {
                if (x % i == 0){
                    System.out.println(x + "不是质数");
                    break;}else{
                System.out.println(x + "是质数");
                }
        }
    }
}

运行后发现判断非质数部分判断无问题,但如果是质数则会多次打印 

改进代码:

public class LoopTest3 {
    public static void main(String[] args) {        
         //1.键盘录入
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入一个正整数:");
        int x = sc.nextInt();

        //2.循环判断除了1和本身还能否被除尽
        for (int i = 2; i < x; i++) {
                if (x % i == 0){
                    System.out.println(x + "不是质数");
                    break;}
                if (i == x - 1){
                System.out.println(x + "是质数");
                }
        }
    }
}

 改进后直至循环到最后一位数,即x-1时才会输出判断为质数语句。

标记法

定义一个初始标记flag,默认为真,如果判断出能被1和本身以外的其他数字整除,则flag赋值为假,在循环外用flag的值输出判断质数语句

public class LoopTest3 {
    public static void main(String[] args) {        
         //1.键盘录入
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入一个正整数:");
        int x = sc.nextInt();

        //2.循环判断除了1和本身还能否被除尽
        //循环结束,表示范围内数字都判断完毕
        //此时才能断定x为质数

        //标记思想
        //表示最初认为number是一个质数
        boolean flag = true;

        for (int i = 2; i < x; i++) {
            if (x % i == 0){
                flag = false;
                break;
            }
        }

        if (flag){
            System.out.println(x + "是一个质数");
        }else{
            System.out.println(x + "不是一个质数");
        }
    }
}

思考:这种方法相比之下结构更清晰,代码也更容易理解