0

ポインターがCのように存在しないことは知っていますが、このようなことが可能かどうか疑問に思っていました。

5つのグローバル変数がありr1 r2 r3 r4 r5、それぞれが最初に次のように初期化されます。null

(1)まだ使用されていない変数を見つけ、(2)それに何かを割り当て、(3)プログラムの後半でその変数を操作したいと思います。ただし、コードを実行するまで変数のステータスはわかりません。これを補うために、私は今、たくさんのif-elseステートメントを持っています:

if(r1==null)
    r1 = [something]    
else if(r2==null)
    r2 = [something]
else if(r3==null)
    r3 = [something]
else if(r4==null)
    r4 = [something]
else if(r5==null)
    r5 = [something]

ここまでは順調ですね。しかし、問題は、上記のコードで変更された変数を取得し、プログラムの後半でその変数を使用/変更したいということです。

したがって、とr1がnullでなく、nullであった場合は、と言います。プログラムの後半で変更したい。C / C ++では、if-elseステートメントにポインタを設定できたと思います。次に、プログラムの後半でそのポインタを使用して変更することができます。r2r3r3 = [something]r3r3r3

これはJavaで可能ですか?ありがとう!

編集:言及するのを忘れた、r1-r5文字列です。

4

6 に答える 6

4

Java はオブジェクト指向言語であり、オブジェクトは参照によって渡されます。したがって、変数 r1 ~ r5 が特定のクラスのインスタンスである場合、それらを渡すことは、オブジェクトを渡すことと同じになります。

そのため、別の関数またはメソッドでオブジェクトを変更すると、元のオブジェクトも更新されます。

良い Java の本を枕元に置いておきましょう。初心者向けの Dietel と Dietel、卒業生向けの Java LRM。

于 2012-12-05T04:00:50.707 に答える
2

配列を使用したいようです。まだ使用されていない要素を特定したら、インデックスを保存してそれを操作します。

于 2012-12-05T04:00:53.467 に答える
1

この単純なものには、配列を使用できます。配列インデックスを、必要な変数へのポインターとして保持できます。

String[] r = new String[5]; // all nulls

など:

private int findFirstNull(String[] array) {
  for(int i=0; i<r.length; i++)
    if(r[i] == null)
      return i;
  return -1;
}
于 2012-12-05T04:00:53.957 に答える
0

Java のリフレクション API では、Fieldtypeを介してメンバー変数を参照できます。

簡単に言えば、目的のグローバル変数への参照をFieldオブジェクトに保存し、必要に応じてクエリ/更新することができます。たとえば、グローバル変数の型が String であるとします。

// static String MyClass r1 = null;
Field theGlobal = MyClass.class.getField("r1");
String s = (String) theGlobal.get(MyClass.class);
if (s == null) {
  theGlobal.set(MyClass.class, "Hello, Reflection!");
  // MyClass.r1 == "Hello, Reflection!"
}

ただし、そうする必要があることは間違いなく貧弱な設計のようです。グローバル変数は、他のメンバー変数タイプでより適切に表現できる可能性があります。

于 2012-12-05T04:06:41.747 に答える
0

Java はそのオブジェクトを値渡しします。メソッドに渡されたオブジェクトの状態を変更でき、それらの変更はメソッドの外部で保持されますが、オブジェクトを別のインスタンスに割り当てることはできません。

たとえば、次のような操作は保持されます。

point.setX(10);
point.setY(100);

このようなものはしません:

point = new Point(10,100);

また、文字列を使用していると述べたように、Java の文字列は不変であるため、その状態を変更することはできません。

提案された他の回答のいくつかと同様に、この状況で Array of String を使用することは優れた代替手段です。これはグローバル変数であるため、次のようなものを使用できます。

public static final String[] r = new String[5];

それで、その要素の1つを次のように変更します

r[0] = "Some String";

グローバルに保存されます。

于 2012-12-05T06:57:03.763 に答える
-1

どのグローバル変数が変更されたかを知るために別のグローバル変数を持つことができると思います(その文字列の参照が必要なだけだと思います)。

if(r1==null)
    globalR = r1 = [something]    
else if(r2==null)
    globalR = r2 = [something]
else if(r3==null)
    globalR = r3 = [something]
else if(r4==null)
    globalR = r4 = [something]
else if(r5==null)
    globalR = r5 = [something]

次に、globalR を使用してその文字列を処理できます

于 2012-12-05T04:59:17.440 に答える