2017-12-22 17 views
0

同じループを使用して複数のメソッドを実行したいのですが、問題が発生しています。1つのループ内に複数のメソッドがありますJava

のは、私は次のような方法があるとしましょう:

void xy1() { 
int y1 = 0; 
    for (int x = 0; x < 10; x++){ 
    y1 += x; 
    } 
} 
罰金作品

を、私がしなければならないすべては、コンストラクタでそれを呼び出しています。

void xy2() { 
int y2 = 1; 
    for (int x = 0; x < 10; x++){ 
    y2 += x; 
    } 
} 

も正常に動作します:

さて、私はまた、別の方法を使用したいが、Yの異なる初期値としましょう。

しかし、私は両方のメソッドを同じループで同時に実行させることをお勧めします。明白な解決策は、一つの方法にそれらをマージすることになります。より多くの変数が導入されたときにこれは、しかし厄介速いを取得

void xy(){ 
int y1 = 0; 
int y2 = 1; 

for (int x = 0; x < 10; x++){ 
y1 += x; 
y2 += x; 
    } 
} 

。それでは、私は、コンストラクタでループを入れていたやってみました、それは法に毎サイクル呼び出しがあります。このように見ている方法では

Constructor(){ 
int y1 = 0; 
int y2 = 1; 

for (int x = 0; x < 10; x++){ 
xy1(y1, x); 
xy2(y2, x); 
    } 
} 

void xy1(int y1, int x) { 
y1 += x; 
} 

void xy2(int y2, int x) { 
y2 += x; 
} 

これで問題がであるがもちろん、コンストラクタがメソッドを呼び出すたびに、現在持っている値ではなく、y1とy2の初期値を渡します。メソッド内の初期値を定義すると、サイクルごとに同じ方法でリセットされます。

私が必要とするのは、新しい計算のためにyの最後の値を何らかの方法で記憶しておくことです。私は欠けている明らかな解決策があるように感じる... 私はgoogleを使ってみましたが、私は本当にどのような検索用語を使用するか分かりません。

私たちはそれに取り組んでいるが、メソッドによって実行される計算は同じなので、単純に1つのメソッドxyを定義し、コンストラクターに異なる初期y値同じループ)。この問題は、yのインスタンスが別々になければならないため、メソッドの2つのインスタンスによって1つのyが操作されないようにする必要があります(これは意味がありますか?これは私が問題になるので、私はいつも新しい質問を作成することができます。)

ありがとうございました!

+4

この作業に欠けているものは、 'y1 = xy1(y1、x); y2 = xy2(y2、x); 'を変数に更新された値を記録するように' Constructor'に入れます。 –

+1

おそらく 'return y1 + x;'?あなたは実際に何を解決しようとしていますか?それらのメソッドは有用な何もしないようです。なぜあなたは、それらを元の方法の両方を次々に呼び出すのではなく、同じループ内で動作させたいのですか? –

+2

あなたの質問には、少なくともコンストラクタがメソッドを呼び出すたびに、 "メソッド内の初期値を定義すると、サイクルごとに同じ方法でリセットされます"、 "何とか新しい計算のためのyの最後の値を覚えておく方法」などがあります。これは学習目的に過ぎないのですか、実際に達成しようとしていることを記述することができますか([xy-problem](https://meta.stackexchange.com/questions/66377/what-is-the-xy-problem ))。 – Thomas

答えて

1

メソッドのシグネチャを変更して、計算値を次のように戻す必要があります。

int Calc(int InitialValue, int Increment){ 
    int Result = InitialValue + Increment; 
    return Result; 
} 

このようにした後、計算値を次のようにローカル変数に割り当てるようにコンストラクタを変更する必要があります。別のメソッドに単一+=を委任まず

Constructor(){ 
    int y1 = 0; 
    int y2 = 1; 

    for (int x = 0; x < 10; x++){ 
     y1 = Calc(y1, x); 
     y2 = Calc(y2, x); 
    } 
} 
0

は、控えめに言っても不要ですが、私はちょうどそれがメソッド内で行わより多くの意味操作だように行動するつもりです。

コード:

Constructor(){ 
    int y1 = 0; 
    int y2 = 1; 

    for (int x = 0; x < 10; x++){ 
     y1 = xy(y1, x); 
     y2 = xy(y2, x); 
    } 
} 

int xy(int y, int x) { 
    return y + x; 
} 

ローカルコピーに+=操作を実行しますあなたの第二の方法ではこのように、xy方法の両方のコピーを作成しますxy(y1,x)のような値を渡すと、実際の値は、あなたに増加したい。

0

forループを入力する前に、y1およびy2変数をメソッドの先頭に宣言してインスタンス化します。したがって、forループを入力すると、y1とy2の値は0になりますが、後でそれを宣言していないため、y1とy2の更新された値が使用されます。

メソッドxy1とxy2の中で変数を宣言しているため、forループ内のメソッドxy1とxy2を呼び出すと、変数が繰り返し宣言されているため、y1とy2の値が初期変数になりますループが実行されるたびに再度実行します。

可能な解決策は次のようになります。この1:

public void calculate() { 

    int y1 = 0; 
    int y2 = 1; 

    for(int i = 0; i < 10; i++) { 
     y1 += i; 
     y2 += i; 
     System.out.printf("y1: %d, y2: %d \n", y1, y2); 
    } 

} 
+0

私の更新された回答を確認してください – programmer44

0

私はプログラミングで初心者ですが、私はそれはあなたのコードが短くなり、これを行うことによって、オブジェクトごとにイベントをオブジェクトを使用して記述することをお勧めだと感じます明確にする。

関連する問題