0

スコープに問題があり、解決方法がわかりません。私の問題を説明するための簡単なプログラムを次に示します。

public class testing {

    public static void main(String args[]) {
        test(1,2);
        System.out.println(answer);
    }

    public static int test(int x, int y) {
        int answer = x + y;
        return answer;
    }
}

だから私はいくつかのパラメータをテストメソッドに渡し、答えを返すので、私のメインメソッドで答えの結果にアクセスすることはできませんか? しかし、できません。エラーが発生します。私は何を間違っていますか?Java は、return ステートメントをテスト メソッドに入れても、スコープがメイン メソッドに拡張されないという答えにアクセスできないと言っています。その場合、他にどのように回答を返すことができますか (パラメーターとして渡さずに)?

4

8 に答える 8

6

return valueを変数に保存しませんでした。また、変数はメソッドでローカルanswer定義され、メソッドでは表示されません。したがって、コードでコンパイラ エラーが発生します。testmain

メインメソッドに次のコードが必要です: -

int result = test(1,2);
System.out.println(result);

さて、ここで何が起こるかというと、メソッドで定義された変数とは何の関係もないローカル変数return valueにoftest(1, 2)が格納されます。あとは裏面を印刷するだけです。 resultanswertestresult

testさらに、メソッドを次のように変更できます。

public static int test(int x, int y) {
    // int answer = x + y; // No need to define a local variable.
    return x + y;
}

メインメソッドは次のように変更できます: -

public static void main(String[] args) {
    System.out.println(test(1, 2));
}

これにより、ローカル変数 (inmainまたはtestmethod) を宣言する必要がなくなることに注意してください。

于 2013-01-29T15:28:08.027 に答える
3

だから私はいくつかのパラメータをテストメソッドに渡し、答えを返すので、私のメインメソッドで答えの結果にアクセスすることはできませんか?

いいえ、mainメソッドで宣言していないためです。メソッドに対して完全にローカルtestです。さまざまなメソッドで多数のさまざまな変数を作成できanswer、それらはすべて完全に分離されます。

代わりに、メソッドを呼び出すときにメソッドからの戻り値を使用する必要があります。例えば:

int result = test(1, 2);
System.out.println(result);

これは、 の変数と の変数の独立性を強調するために意図的に異なる変数名を使用していますmaintest同じ名前を使用してもまったく同じ結果になります。

または、ローカル変数mainをまったく使用しない場合:

System.out.println(test(1, 2));
于 2013-01-29T15:28:42.343 に答える
2

これを試して

public static void main(String args[]) {
    int answer = test(1,2);
    System.out.println(answer);
}
于 2013-01-29T15:31:48.447 に答える
1

回答の範囲は、test()記述する必要がある回答の値を出力する場合にのみメソッド内にあります。

public static void main(String args[]) {
System.out.println(test(1,2));

}

于 2013-01-29T15:29:35.933 に答える
0

2 番目の質問 (引数を返さずにアクセス可能な結果を​​作成する方法) に答えるには、プライベート インスタンス フィールド ( ) としてtest宣言できます。次に、メイン メソッドを介してアクセスできますが、クラス外ではアクセスできません。これが戻り値として返すよりも便利かどうかは、アプリケーションによって異なります。メソッド、クラス、変数のさまざまな組み合わせを確認するために、キーワード 、 などに慣れることをお勧めします。answerprivate static int answer;staticprivatepublic

于 2013-01-29T15:48:41.430 に答える
0

戻り値をキャプチャする必要があります。

public static void main(String args[]) {
    int answer = test(1,2);
    System.out.println(answer);
}

answerメソッドで宣言されたローカル変数は、メソッドtestの外では見えません。もう 1 つの方法は、宣言answerをクラス スコープに移動することです (この場合test、値を返す必要はまったくありません)。

public class testing {
    static int answer;

    public static void main(String args[]) {
        test(1,2);
        System.out.println(answer);
    }

    public static void test(int x, int y) {
        answer = x + y;
    }
}
于 2013-01-29T15:28:25.227 に答える
0

メソッドを呼び出して結果を無視しています:

public static void main(String args[]) {
   test(1,2);
   System.out.println(answer);

}

次のように変更します。

public static void main(String args[]) {
  int answer = test(1,2);
  System.out.println(answer);
}
于 2013-01-29T15:28:57.130 に答える
0

answer変数は静的testメソッドのローカル変数です。外部からは見えず、メソッドを呼び出したときに結果として返されましたが、どこにも保存されていません。

あなたがすべきだったのは、結果を格納する別の変数を宣言することです

int answer = test(1, 2)

于 2013-01-29T15:29:33.530 に答える