能解決題目的代碼並不是一次就可以寫好的
我們需要根據我們的思路寫出后通過debug模式找到不足再進行更改
多次測試后才可得到能解決題目的代碼!
通過學習,練習【Java基礎經典練習題】,讓我們一起來培養這種解決問題思路。
第一題:判斷2-100之間有多少個素數,並輸出所有素數。
1.視頻講解:
2.思路分析:
Q1:什么是素數?
A1: 素數(質數)指的是在大於1的自然數中除了1和該數本身外,無法被其它自然數整除的數。(也就是說一個數只有1和它本身兩個因數)
Q2:如何判斷一個數有除了1和該數本身之外的因數?
A2:讓我們以4為例來分析:
-
判斷4能否整除一個數,無非只有以下4種情況:
情況1:4/1
情況2:4/2
情況3:4/3
情況4:4/4 -
那么我們又知道:每個數都有1 和 它本身這兩個因數(即每個數都可以被1和它本身整除)
所以呢我們在【判斷4能否整除一個數】就只需要考慮以下這兩種情況:
情況2:4/2
情況3:4/3 -
由此我們可以總結出來規律:
判斷一個數是否有其它因數,就讓這個數去除[2-(需判斷的數-1)]這個范圍內的數。
如判斷4就只需看:4/2、4/3 -
看這兩種情況中是否有整除情況發生:
若有則說明此數不為素數,就進行下一次判斷
若沒有說明此數為素數,需輸出此數,並讓保存【素數個數的變量】加1后再進行下一次判斷。
3.代碼+詳解+答案:
package Exercise;
public class SuShu1 {
public static void main(String[] args) {
int i = 0;
int j = 0;
int count = 0;//儲存2-100之間的素數個數
boolean flag = true;
//用處:在當一個數有【除1和它本身之外的因數】時,使其值變為false,以便進入下一次循環
for (i = 2; i <= 100; i++) {//從2-100開始進行循環
flag = true;
//每完成一次for循環需要把flag值重新置為true,否則將會影響下次的循環
for (j = 2; j < i; j++) {
//用此for循環的數字來判斷i是否有【除1和它本身之外的因數】
if (i % j == 0) {//如果i%j==0,說明i有【除1和它本身之外的因數】
flag = false;//這時讓flag = false;
break;//並退出這個雙重for循環
}
}
if (flag == true) {
//從雙重for循環退出后,判斷flag的值是否是true,若為true則說明此數為素數
count++;//存儲素數的總和加1
System.out.println("從2-100之間的素數有:" + i);//輸出素數結果
}
}
System.out.println("從2-100之間的素數個數有:" +count);//輸出素數總個數
}
}
代碼講解:以i=4為例
- i=4 4<100
- flag = true
- j=2 ,2<4
- 因為i%j == 0(即4%2 == 0)所以flag = false。並執行break語句。
- 執行break語句后就退出第二個for循環。(執行break語句后,break語句后面的代碼不會執行並且會終止本層循環)
- 因為現在的flag ==false不滿足if(flag == true)條件
- 所以i++ i=5,進入下一次的判斷
結果: