需求:键盘录入一个正整数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 + "不是一个质数");
}
}
}
思考:这种方法相比之下结构更清晰,代码也更容易理解