有這樣一個問題,輸入一個任意整數,判斷它是否爲質數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 + "不是一個質數"); }