2011-12-15 11 views
4

私のメソッドに変数を渡すと、メインコードでは更新されず、メソッドに渡されます。一度変数を渡すと、メインコードで更新されますか?ありがとう!変数を更新してメソッドに渡す方法は?

//////////// here is main code: 
public static class MyCoding extends MainScreen{ static int mee=1; 
     public static void myCode(){ 

     Status.show("mee="+mee, 2000); // shows me=1 

     Moo.moo(mee); 

     Status.show("mee="+mee, 2000);// should be mee=76547545 but still shows mee=1 ! 

    } 
} 


//////////// here is my method: 

public static class Moo extends MainScreen{ 
    public static void moo(int bee){ 
     mee=76547545; 

     return; 
    } 
} 

対処方法ありがとう!例えばintまたはdoubleとして

+0

値渡しと参照渡し - http://stackoverflow.com/questions/40480/is-java-pass-by-referenceに付随する解説は、物事を明確にするのに役立ちます。 – Christopher

+0

そのリンクは答えでなければなりません! –

+0

あなたはここで間違っています。 mee = 76547545; 私の記事を参照してください。 – alishaik786

答えて

8

渡すプリミティブデータ型引数

プリミティブ引数は、値によって メソッドに渡されます。これは、 パラメータの値の変更がメソッドのスコープ内にのみ存在することを意味します。メソッド が返ってくると、パラメータはなくなり、変更は失われます。このようなオブジェクトとして

参照データ型引数を渡す

参照データ型のパラメータは、また値によって メソッドに渡されます。つまり、メソッドが返ってくると、渡された参照の は以前と同じオブジェクトを参照しています。 ただし、オブジェクトのフィールドの値は、適切なアクセスレベルを持つ場合は メソッドで変更できます。

期待する動作を得るには、値を返して元の変数に割り当てる必要があります。

mee = Moo.moo(mee); 

そして、あなたの方法で

public static int moo(int mee) 
{ 
    // some processing 
    mee += 76547545; 

    return mee; 
} 

Passing Information to a Method or a Constructor

+0

あなたは代入と突然変異を混同しています。 – SLaks

0

答えは簡単です、あなたが戻って値を代入していないが、この

mee = Moo.moo(bee); 
+1

を除いて 'moo()'はvoid型の返り値を返します.... –

4
を試してみてください

MEEします

Javaメソッドのパラメータはpass-by-valueなので、更新された値を取得することはできません。 intフィールドを持つクラスを作成し、オブジェクト参照を引数として渡す必要があります。 MyCodingと武clasesにおいて

public class IntData 
{ 
    public int bee; 
} 

public static class MyCoding extends MainScreen{ 
    static IntData mee=new IntData(); 

    public static void myCode(){ 
    mee.bee=1; 
    Status.show("mee="+mee.bee, 2000); 
    Moo.moo(mee); //object reference will be copied 
    Status.show("mee="+mee.bee, 2000); 
    } 
} 

public static class Moo extends MainScreen{ 
    public static void moo(IntData ref){ 
     ref.bee=76547545; 
    } 
} 
+1

私の誤植はGryb.moo(mee)の代わりにMoo.moo(mee)でなければなりません、ごめんなさい – ShoulO

3

Javaは、それらの値をコピーすることによって方法プリミティブ(int型/フロート/文字列)を通過します。一方、他のOBJECTSはメソッドに渡されたときにコピーされません(つまり、他のオブジェクトは状態を維持し、外部メソッドによって変更できます)。

JavaではCスタイルポインタの概念がないため、Javaメソッドでは通常は整数値を上書きしません。むしろメソッドで発生する計算の結果に整数を設定します。あるいは、より一般的には、オブジェクトを定義し、それらのオブジェクトにゲッターとセッターを使用して値を取得/設定します。

あなたの場合...(1)メソッド内で計算している整数をグローバル変数として宣言するか、または(2)計算された値を呼び出し側のクラスに戻し、元々宣言された変数/設定値にアクセスする必要があります。

1)あなたは「ミー」変数、静的、グローバル変数を作成し、それを編集することができますいずれかのどこ

または )あなたは、整数を返すために、「MOO」メソッドを編集することができますし、 meeメソッドをその戻り値に設定します。

1

第1のすべての変数を見つけることはありませんbee、私はあなたがmeeを意味すると思います。 はちょうどthis

//////////// here is main code: 
public static class MyCoding extends MainScreen{ 
     private int mee=1; 
     private int beee=1; 
     private int cee=1; 

     public void myCode(){ 

     Status.show("mee="+this.mee, 2000); // shows me=1 

     Moo.moo(this);   // small change here 

     Status.show("mee="+this.mee, 2000);// should be mee=76547545 but still shows mee=1 ! 

    } 
} 


//////////// here is my method: 

public static class Moo extends MainScreen{ 
    public static void moo(MyCoding obj){ 
     obj.bee=76547545; 
     obj.mee = 67798879; 
     obj.cee =89789; 
    } 
} 
+0

はい私の間違いは私の質問を再編集しました、そのmee – ShoulO

+0

はい、私は1つだけの変数を持っている場合、これは良いですね、私はそれらのいくつかを持っている場合 - Moo.moo(mee、zee、vee)のように – ShoulO

+0

...を更新しました..それを確認してください.. –

1
あなたのコード内で

static int mee=1; 

mee=76547545; 

の両方が異なっているを変更しようとして、現在のオブジェクトを渡します。 という静的変数を宣言すると、他のクラスではクラス名が呼び出されます。あなたはここに正しく従った。

Moo.moo(mee); 

mee = 76547545を変更してください。行を

MyCoding.mee=76547545; 

として実行してください。コードを実行してください。

関連する問題