0

このコードの何が問題なのかわかりません

class Test {
    int a;
    Test() {
        a=10;
    }

    void new() {
        Test obj1=new Test();
        Test obj2=new Test();
        obj1.a=20;
        obj2.a=30;
    }

    void test(Test obj3,Test obj4) {
        new();
        obj3=obj1;
        obj4=obj2;
    }
}

誰かがこのコードの何が問題なのか説明してください。

4

3 に答える 3

2

コードを次のように変更します

class Test
{
int a;
Test obj1;
Test obj2;
Test()
{
a=10;
}
void tester()
{
    obj1=new Test();
    obj2=new Test();
    obj1.a=20;
    obj2.a=30;
}
void test(Test obj3,Test obj4)
{
tester();
obj3=obj1;
obj4=obj2;
}
}

そして、Java の Scope について学習してみてください。 andnewは予約済みのキーワードです。

于 2013-06-14T07:03:33.303 に答える
2

多くのことが間違っています。

1 つnewは予約済みのキーワードであり、メソッド名には使用できません。

次に、この関数で:

void test(Test obj3,Test obj4)
{
    new();
    obj3=obj1;
    obj4=obj2;
}

obj1obj2定義されていません。「new()メソッド」から抜け出すと、参照obj1obj2参照が範囲外になり、到達できなくなります。

最後に、obj3Javaは参照ではなく値でパラメーターを渡すため、obj4このメソッドの影響を受けません。test()

// doesn't work; when the caller returns, victim is still the same
public void changeInt(int victim)
{
    victim = 0;
}
于 2013-06-14T07:00:32.447 に答える
1

obj1メソッド内でobj2は見えません。はキーワードとして不正なメソッド宣言です。test()void new()new

  1. obj1andをインスタンスメソッドとして宣言するobj2か、何らかの方法でパラメーターとしてメソッドに渡す必要がありtest()ます。

  2. メソッドの名前を別の名前に変更しvoid new()ます。

私の提案は、コンパイル エラーを解決することだけです。コードに論理エラーがあったとしても、それは考慮されません。

于 2013-06-14T06:59:02.017 に答える