有这样一个问题,输入一个任意整数,判断它是否为质数java
例如:若是是质数就输出“7是质数”,不然输出‘8不是质数’。code
-
质数:除了1和它自己以外,不能被其余数整除的正整数称质数。input
首先我进行了步骤分析。for循环
步骤分析:class
-
a)经过Scanner获取一个正整数(假设正整数从3开始),假设使用num变量保存import
-
b)经过for循环获的[2, num)之间全部的正整数,假设循环变量为i。变量
-
c)判断num是否为质数。循环
须要num和[2, num)全部的整数相除,若是num和[2, num)全部的整数都不能整除,则证实是质数im
方案一:假设法。next
-
1)在判断某一个数是否为质数以前,先假设这个整数是一个质数。
boolean flag = true;
-
2)在循环体中,若是num能被[2, num)之间其中一个数整除,证实num就不是质数
推翻假设,修改flag的标记值。--> flag = false;
由于此处已经证实num不是一个质数,那么应该跳出循环。 --> break;
-
3)在循环以外,判断flag标记的值。
若是flag标记值依旧为true,则证实假设成立,num就是一个质数。
若是flag标记值为false,那么证实假设不成立,num不是一个质数。
import java.util.Scanner; public class BreakTest { public static void main(String[] args) { // 1.经过Scanner获取一个正整数(假设正整数从3开始) Scanner input = new Scanner(System.in); System.out.print("请输入一个正整数:"); int num = input.nextInt(); // 2.经过for循环获的[2, num)之间全部的正整数 // a)假设num是一个质数 boolean flag = true; for(int i = 2; i < num; i++) { // 3.判断num是否为质数 // b)在循环体中,若是num能被[2, num)之间其中一个数整除,证实num就不是质数 if(num % i == 0) { // 推翻假设,修改flag的标记值 flag = false; // 既然此处已经证实num不是一个质数,那么应该跳出循环 break; } } // c)判断flag标记的值,从而肯定num是否为质数 if(flag) { // 证实num是一个质数 System.out.println(num + "是一个质数"); } else { // 证实num不是一个质数 System.out.println(num + "不是一个质数"); } } }
方案二:经过for循环的执行顺序,从而解决问题。
- 核心:若是循环正常执行完毕,那么i的取值恰好为num,也就证实在循环体中num%i==0这个条件永远没成立过,从而证实num是一个质数
import java.util.Scanner; public class BreakTest { public static void main(String[] args) { // 1.经过Scanner获取一个正整数(假设正整数从3开始) Scanner input = new Scanner(System.in); System.out.print("请输入一个正整数:"); int num = input.nextInt(); // 2.经过for循环获的[2, num)之间全部的正整数 int i = 2; for (; i < num; i++) { // 3.判断num是否为质数 if(num % i == 0) { // 证实num不是一个质数 break; } } if(i == num) { System.out.println(num + "是一个质数"); } else { // 证实num不是一个质数 System.out.println(num + "不是一个质数"); }