iT邦幫忙

0

Java新手,找質數問題。

  • 分享至 

  • xImage

剛學Java第3天,碰到書上練習題 「找2~100中所有的質數」。
以下是我寫的Code:
int a=0;
while(a<=100)
a+=1;

for (int i=1; i<=a; i++) {            //以下為質數判定
    if ((a%i)==0) {
	    Prime+= i;
        if (Prime==a+1){
		    System.out.print(Prime-1);
        }    
    }
}    

我遇到的問題是,當變數a由我鍵盤手動輸入的時候,在console欄位能正確的印出為質數的數字,然而當我將變數a改成迴圈的時候,卻始終只能印出一個數字101,我感到不解。

以下是我更之前寫的code,加了點修改:
Scanner MyInput = new Scanner(System.in);
int a;
System.out.print("請輸入變數a:");
a=Integer.parseInt(MyInput.nextLine());
//以下為質數判定
for (int i=1, Prime=0; i<=a; i++) {
if ((a%i)==0) {
Prime+= i;
if (Prime==a+1){
System.out.print(Prime-1+ "\t");
}
}
}
當我用鍵盤輸入變數a,假設為5(if敘述判定為質數),在console欄位會印出來,而如果輸入6則不會。
只是現在我想把它改為自動印出2~100中所有質數,卻卡住了。
此外,據我在書中學的,在for迴圈中宣告的變數在出了迴圈就會消失,所以我把變數Prime改寫成這種寫法,在進入下一次迴圈的時候,Prime應該會重設?

另外新帳號好像不能回應?
針對gundam1999的問題,如果我while先寫,那應該會和下方for形成巢狀迴圈,即使我沒{}?

謝謝各位幫忙原來是我while沒{}!!

看更多先前的討論...收起先前的討論...
GHH iT邦新手 1 級 ‧ 2022-08-08 10:26:59 檢舉
while 跑完, a 就是101阿
你的問題應該是這行吧=> for (int i=1, Prime=0; i<=a; i++)
for的第一段是初始式,如其名只會在第一次跑for迴圈時宣告int = 1,Prime=0
所以你的Prime是一直被加上去,沒有重置導致你判斷if(Prime==a+1)時會錯
你的擴號沒加 while就是幫你做完a+=1就收工了
謝謝各位幫忙原來是我while沒{}!!
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

2 個回答

2
海綿寶寶
iT邦大神 1 級 ‧ 2022-08-08 10:36:24
最佳解答

當變數a由我鍵盤手動輸入的時候,在console欄位能正確的印出為質數的數字

這點我試不出來,我放棄

將變數a改成迴圈的時候,卻始終只能印出一個數字101

由執行「一次」改成迴圈(多次)時
要注意初始值的設定/歸零
以你的程式為例
可能是 Prime 的值沒有重設(第一個 a 跑完迴圈之後 Prime 值已經變了)

https://ithelp.ithome.com.tw/upload/images/20220808/20001787vUdmFXPKmf.png

0
gundam1999
iT邦新手 5 級 ‧ 2022-08-08 10:43:49

我是只有稍微摸過Java的生手, 好奇問下..

while 有使用 {} 把下面的 for迴圈包起來嗎?

我要發表回答

立即登入回答