11 回答

TA貢獻109條經(jīng)驗 獲得超149個贊
這是變量作用域的問題,方法中的變量屬于局部變量,當(dāng)方法調(diào)用開始,方法中的局部變量會在棧內(nèi)存中被創(chuàng)建,當(dāng)方法調(diào)用結(jié)束后,該方法在棧內(nèi)存中的局部變量就會被回收銷毀!這些變量的作用范圍僅限于方法中,那么對main方法里面的變量沒有任何影響,修改方法是在main方法中,用一個變量來接收調(diào)用方法所產(chǎn)生的結(jié)果!

TA貢獻2條經(jīng)驗 獲得超6個贊
Java中,基本類型(int,float,char等)是按值傳遞,在?fun(int a, int b, int c)?中,可以理解為fun中的c是main中的c的一個復(fù)制,產(chǎn)生復(fù)制后對其中一個c操作,不會影響到另一個c。(可以試著在fun內(nèi)部打印c,結(jié)果應(yīng)當(dāng)是期望的6)
可以說沒有什么科學(xué)的原因,Java(以及Java的祖先C++和C)就是這么設(shè)計的,設(shè)計者希望你用“傳進去的是參數(shù),不是結(jié)果”的思考方式來想問題,這樣的設(shè)計防止在方法內(nèi)部的操作,在不經(jīng)意間影響到方法外部程序運行結(jié)果的可能。在做更復(fù)雜的程序時,這種方式更易于思考,不易出錯。
在Java中,“某個方法產(chǎn)生的結(jié)果”,用方法返回值的方式傳遞,例如
public static int fun (int a, int b) {
????c = a * b;
????return c;
}
public static void main (String[] args[]) {
????int c = fun(2, 3);
????System.out.println(c);
}
如果要返回多個結(jié)果,可以返回數(shù)組,容器,或者自定義類。

TA貢獻1條經(jīng)驗 獲得超1個贊
我覺得 都只說對了一半,那個 悟00 同學(xué)說對了 一大半。
你的fun方法是static。靜態(tài)的。
你去做個很簡單的實驗就知道了,int c 變成 static ?int c;
你再試試。
然后去看靜態(tài)方法和靜態(tài)變量在內(nèi)存中的存放和使用,就知道了。

TA貢獻15條經(jīng)驗 獲得超3個贊
因為fun函數(shù)的參數(shù)C的作用域就是在函數(shù)fun內(nèi),而main函數(shù)中的變量c的作用域也是在main內(nèi),將c變量的值傳給fun的形參c后,就沒有關(guān)系了。所以打印的c變量的值還是0,除非你返回函數(shù)的計算結(jié)果。
return c=a*b;

TA貢獻377條經(jīng)驗 獲得超508個贊
你好:
可以這樣得到你想要的結(jié)果:
public?static?int?fun(int?a,int?b,int?c)?{ ????c?=?a?*?b; ????return?c; } public?static?void?main(String[]?args)?{ ????int?c?=?0; ????c?=?fun(2,3,c); ????System.out.println(c); }
通過調(diào)用這個方法將 c 改變后再返回,然后這邊接收就可以了。
望采納!

TA貢獻1123條經(jīng)驗 獲得超629個贊
基本數(shù)據(jù)類型作為方法參數(shù)的時候是復(fù)制到方法里執(zhí)行的,所以不會改變方法外的值
fun方法里的c只是復(fù)制了main方法里的變量c,所以不會改變main方法里的變量c

TA貢獻188條經(jīng)驗 獲得超91個贊
很簡單的問題,你稍微調(diào)試一下就會知道,?System.out.println(c)打印的是C的值,C=0,而不是fun(),就算執(zhí)行了fun(),?這里int c = 0;? ?fun(2,3,c),傳過去的C也是等于0;

TA貢獻89條經(jīng)驗 獲得超59個贊
c其實是不需要傳的 public?static?int?fun(int?a,int?b)?{ ????????int?c?=?a?*?b; ????????return?c; ????} ????public?static?void?main(String[]?args)?{ ????????int?c?=?0; ????????c?=?fun(2,3); ????????System.out.println(c); ????}
添加回答
舉報