for語句的作用范圍
正如你所說的,這個就是由于for語句的作用范圍導致的
比較這兩個:
for(j=2;j<i;j++)
if(i%j==0)break;
if(j>=i)printf("%d ",i);
和
for(j=2;j<i;j++)
{
if(i%j==0)break;
if(j>=i)printf("%d ",i);
}
前一個(正確的那個)for的作用范圍只是到if(i%j==0)break;這一句,
for語句的執行只會有兩種情況:
1.在j<i的所有j中,找不到能夠滿足i%j==0的數,當j==i時,退出for循環,
隨后判斷if(j>=i),當j==i時,說明該數是質數,輸出
2.在j<i的j中,有能夠滿足i%j==0的數,直接進行break處理,隨后判斷if(j>=i),這時候j>=i不成立,不進行輸出
后一個(錯誤的那個)for的作用范圍是到if(j>=i)printf("%d ",i); 這一句,
for語句的執行只會有兩種情況:
1.在j<i的所有j中,找不到能夠滿足i%j==0的數,當j==i時,退出for循環,
if(j>=i)的判斷不會被執行
2.在j<i的j中,有能夠滿足i%j==0的數,直接進行break處理,繼續進行最外層的for循環處理
其實,在后一種情況中,for循環中以及限定j<i,所以其內部的if(j>=i)printf("%d ",i); 這一句永遠不會被執行的,也就不會輸出任何信息
for語句的作用范圍
正如你所說的,這個就是由于for語句的作用范圍導致的比較這兩個:for(j=2;j=i)printf("%d ",i); 和for(j=2;j=i)printf("%d ",i); } 前一個(正確的那個)for的作用范圍只是到if(i%j==0)break;這一句,for語句的執行只會有兩種情況:1.在j=i),當j==i時,說明該數是質數,輸出2.在j=i),這時候j>=i不成立,不進行輸出后一個(錯誤的那個)for的作用范圍是到if(j>=i)printf("%d ",i); 這一句,for語句的執行只會有兩種情況:1.在j=i)的判斷不會被執行2.在j=i)printf("%d ",i); 這一句永遠不會被執行的,也就不會輸出任何信息。
把其中所有使用for語句實現的功能修改為使用while語句實現
package *_6;
public class PrintString {
public static void main(String[] args){}
public void printStar(){
int i = 1;
int j = 1;
while(i<11){
while(j<=i){
*("*");
j++;
}
i++;
}
}
public void printStarLabel(int N){
if(N<=1){
*n(N+"為非法數值,重新輸入");
*(0);
}
int i = 1;
int j = 1;
while(i<N+1){
*("第"+i+"行:");
while(j<=i){
*("*");
*n();
j++;
}
i++;
}
}
}