思路分析: 素数,是指在一个大于1的自然数中,除了1和此整数自身外,不能被其他自然数整除的数. 所以考虑使用循环的方法,查找有没有其他数字可以整除,可以整除不是素数,不能整除才是素数
参考代码
import java.util.Scanner;
public class NumberDemo {
public static void main(String[] args) {
System.out.println("退出程序请输入exit");
Scanner sc = new Scanner(System.in);// 用于读取输入
while (true) {
System.out.print("请输入一个整数:");
String str = sc.nextLine().trim();//读取一行文本,并用trim方法 去掉两端的空格
if (str.toLowerCase().equals("exit")) {//读取的文本如果转换成小写和exit一样,就退出程序
System.out.println("结束程序并退出");
sc.close();//sc 是一种IO流,用完最好要关闭
break;//退出循环
}
try {
int num = Integer.parseInt(str);// 试图把文本转换数字,如果不能转换成数字就会出异常,我们已经用try catch来捕捉异常了.所以不怕异常
if (isPrime(num)) {// 调用isPrime()方法,判断是不是素数
System.out.println(num + "是素数!");
} else {
System.out.println(num + "不是素数!");
}
} catch (Exception e) {
System.out.println("错误提示:输入错误,请输入整数或exit");// 捕捉异常,若输入的不是整数,输出异常
}
}
}
//判断素数的方法
public static boolean isPrime(int num) {
boolean flag = true; // 1. 首先假设是素数.
if (num < 2) { // 2. 负数,0,1,2都不是素数, 所以假设不成立,修改flag为false
flag = false;
} else {
for (int i = 2; i <= Math.sqrt(num); i++) {// i// 所以可以缩小范围到开方数
if (num % i == 0) {// 3. 若能被整除,则说明不是素数,所以假设不成立,修改flag为false
flag = false;
break;// 跳出循环,已经能被整数,不是素数了,后面的循环就不用进行了
}
}
}
return flag;// 返回flag .如果没有被if else 中的任何一种情况修改,那么flag是true,是素数. 否则就不是素数
}
}
测试运行
退出程序请输入exit
请输入一个整数:abc
错误提示:输入错误,请输入整数或exit
请输入一个整数:9
9不是素数!
请输入一个整数:8
8不是素数!
请输入一个整数:7
7是素数!
请输入一个整数:exit
结束程序并退出