11 回答

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

TA貢獻2條經驗 獲得超6個贊
Java中,基本類型(int,float,char等)是按值傳遞,在?fun(int a, int b, int c)?中,可以理解為fun中的c是main中的c的一個復制,產生復制后對其中一個c操作,不會影響到另一個c。(可以試著在fun內部打印c,結果應當是期望的6)
可以說沒有什么科學的原因,Java(以及Java的祖先C++和C)就是這么設計的,設計者希望你用“傳進去的是參數,不是結果”的思考方式來想問題,這樣的設計防止在方法內部的操作,在不經意間影響到方法外部程序運行結果的可能。在做更復雜的程序時,這種方式更易于思考,不易出錯。
在Java中,“某個方法產生的結果”,用方法返回值的方式傳遞,例如
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);
}
如果要返回多個結果,可以返回數組,容器,或者自定義類。

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

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

TA貢獻377條經驗 獲得超508個贊
你好:
可以這樣得到你想要的結果:
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); }
通過調用這個方法將 c 改變后再返回,然后這邊接收就可以了。
望采納!

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

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

TA貢獻89條經驗 獲得超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); ????}
添加回答
舉報