-1

私はJavaが初めてで、現在値渡しの仕組みを学ぼうとしています。Test というメイン クラスと、TestMax という 2 番目のクラスがあります。以下のコードで達成しようとしているのは、クラス TestMax の 2 つのパラメーター i と j の値をメイン クラスに設定し、max()先ほど渡したばかりのパラメーターの値を渡してメソッドを呼び出すことです。

コンソールへの出力は次のようになります。

The maximum between 2 and 10 is 10.

メソッドに値を渡す方法に問題があることはわかっていますが(int res = max(i,j)、最後の2時間かけて、これが機能しない理由を理解しましたが、それを理解できません。

package testproject;
public class Test {
    /** Main method */
    public static void main(String[] args) {
        TestMax pass = new TestMax();
        pass.setI(2);
        pass.setJ(10);
        int res = max(i,j);
        System.out.println("The maximum between " + pass.getI() +
                " and " + pass.getJ() + " is " + res);
    }
}

2 番目のクラスの TestMax:

package testproject;

public class TestMax {

    int i ;
    int j ;

public static int max(int num1, int num2) {

    int result;
    if (num1 > num2)
       result = num1;
    else
       result = num2;

    return result;

}

//Getters & Setters
public void setJ(int j) {
    this.j = j;
}

public int getJ() {
    return j;
}

public void setI(int i) {
    this.i = i;
}

public int getI() {
    return i;
}
4

4 に答える 4

4

これは、値渡しと参照渡しとは関係ありません。問題は次のコード行です。

int res = max(i,j);

ijはスコープ外でありmax()、現在のクラスにはありません。そのため、getter を使用して値にアクセスし、クラスを介してメソッドを参照する必要があります。次のようにします。

int res = TestMax.max(pass.getI(), pass.getJ());
于 2012-09-23T17:36:10.567 に答える
2

この行:

int res = max(i,j);

意味がありません: どちらmaxiももjそのスコープで宣言されていません。コンパイラはこれを拒否する必要があります。

あなたは次のように書くつもりだったに違いありません:

int res = TestMax.max(pass.getI(), pass.getJ());
于 2012-09-23T17:35:40.703 に答える
1

int res = max(i,j);

上記の行では、max()引数もそのスコープで宣言されi and jていません。したがって、コンパイルエラーです。

次のように記述します。

int res = TestMax.max(pass.getI(), pass.getJ());

于 2012-09-23T18:20:37.243 に答える
0

以下のコードのように、max メソッドを静的ではなく、変数 i と j を入力として使用するように変更することもできます。

 ...

    public int max() {
        int result;
        if (i > j)
           result = i;
        else
           result = j;

        return result;
    }

...

次に、メイン メソッドの次の行のパラメーターを省略する必要があります。

int res = max(i,j);

これは次のように変わります:

int res = max();

ただし、このように TestMax クラスを変更する場合は、誰かが i と j に値を割り当てる前に max() メソッドを呼び出した場合に例外をスローできるように、Exception を拡張するクラスを作成する必要があります。これを回避する別の方法は、コンストラクターを作成し、そこに i と j を取得することです。

于 2012-09-23T18:04:14.137 に答える