Discussion:
[問題] 希望有人可以幫助我...
(时间太久无法回复)
加油啊...
2006-09-01 18:21:08 UTC
Permalink
我在主程式呼叫一個方法

方法是放在迴圈裡面執行

就是

for (int a = z1.length ; a > 0 ; a--){
level(z1 , sfinal , z1[a] , pa , 1 , LBTOTALX[0] , LBTOTALX[1] , a);
}

level是方法,裡面都是我的參數...

然後在這個方法裡面,他經過判斷有可能會繼續在執行一次level,

而這一次的呼叫方法同樣也會是放在迴圈裡面

好像是叫遞迴吧!!

現在我的問題是,當我的判斷是不需要再一次迴圈去執行方法的時候

也就是回到他所在的迴圈的時候,再執行下一次的方法

但是我不要他繼續執行下一次的迴圈

就是要讓他a < 0,我有直接在我判斷後讓a = -1,並且顯示出a值

確實變成-1了,但是他回到原本執行的迴圈的時候

卻又變成正數了,也就是他原本下一次應該a是多少,他就變成多少了

並沒有被我改變到

不曉得是甚麼問題.....已經想了一天了!!

希望有人可以瞭解我的意思!!謝謝各位高手!!

--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 140.118.101.52
Believing is seeing! ^^
2006-09-01 21:51:21 UTC
Permalink
※ 引述《Kenny042183 (加油啊...)》之銘言:
: 我在主程式呼叫一個方法
: 方法是放在迴圈裡面執行
: 就是
: for (int a = z1.length ; a > 0 ; a--){
: level(z1 , sfinal , z1[a] , pa , 1 , LBTOTALX[0] , LBTOTALX[1] , a);
: }
: level是方法,裡面都是我的參數...
: 然後在這個方法裡面,他經過判斷有可能會繼續在執行一次level,
: 而這一次的呼叫方法同樣也會是放在迴圈裡面
: 好像是叫遞迴吧!!
: 現在我的問題是,當我的判斷是不需要再一次迴圈去執行方法的時候
: 也就是回到他所在的迴圈的時候,再執行下一次的方法
: 就比方說現在a = 5,他經過判斷然後-1變成a = 4,繼續執行回圈內的方法
: 但是我不要他繼續執行下一次的迴圈
: 就是要讓他a < 0,我有直接在我判斷後讓a = -1,並且顯示出a值
: 確實變成-1了,但是他回到原本執行的迴圈的時候
: 卻又變成正數了,也就是他原本下一次應該a是多少,他就變成多少了
: 並沒有被我改變到
: 不曉得是甚麼問題.....已經想了一天了!!
: 希望有人可以瞭解我的意思!!謝謝各位高手!!

  聽起來似乎是傳值呼叫的問題,
  你的 a 是 int 型態,
  所以傳進 level 中的只是 a 的一份 copy,
  不管你在 level 裡對 a 怎麼修改,
  改到的都是那一份 copy,
  而不是 a 本身,
  因此離開 level 回到迴圈後 a 的值還是沒變。

--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 218.175.161.103
亂入的可憐蟲
2006-09-01 22:13:27 UTC
Permalink
※ 引述《Kenny042183 (加油啊...)》之銘言:
: 我在主程式呼叫一個方法
: 方法是放在迴圈裡面執行
: 就是
: for (int a = z1.length ; a > 0 ; a--){
: level(z1 , sfinal , z1[a] , pa , 1 , LBTOTALX[0] , LBTOTALX[1] , a);
: }
: level是方法,裡面都是我的參數...
: 然後在這個方法裡面,他經過判斷有可能會繼續在執行一次level,
: 而這一次的呼叫方法同樣也會是放在迴圈裡面
: 好像是叫遞迴吧!!
: 現在我的問題是,當我的判斷是不需要再一次迴圈去執行方法的時候
: 也就是回到他所在的迴圈的時候,再執行下一次的方法
: 就比方說現在a = 5,他經過判斷然後-1變成a = 4,繼續執行回圈內的方法
: 但是我不要他繼續執行下一次的迴圈
: 就是要讓他a < 0,我有直接在我判斷後讓a = -1,並且顯示出a值
: 確實變成-1了,但是他回到原本執行的迴圈的時候
: 卻又變成正數了,也就是他原本下一次應該a是多少,他就變成多少了
: 並沒有被我改變到
: 不曉得是甚麼問題.....已經想了一天了!!
: 希望有人可以瞭解我的意思!!謝謝各位高手!!
在for迴圈的a,和level這個方法裡面所運作的a是不同的...
你只是將for迴圈裡面a的"值",傳到了level這個方法中...
所以當level對a做處理,並不會改變到for迴圈中的a...
比較簡單的改法就是讓level去回傳運算完的a回來..
並讓for迴圈的a去等於level所回傳的值!!!
也就是a=level(XXXXXXXX);

--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 220.132.203.111
加油啊...
2006-09-01 23:21:35 UTC
Permalink
※ 引述《TonyQ (骨頭)》之銘言:
: ※ 引述《Kenny042183 (加油啊...)》之銘言:
: : 並沒有被我改變到
: : 不曉得是甚麼問題.....已經想了一天了!!
: : 希望有人可以瞭解我的意思!!謝謝各位高手!!
: keyword:"區域變數"、"變數生命週期"、"call by value"

對啦~~~~~

謝謝各位提醒......

好在我想出方法了!!

不然一直被這個問題困住!!

謝謝各位高手!!

--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 140.118.101.52

Loading...