0

Javaでは、変数のリストを反復処理する方法はありますか?

(例: Avg1、Avg2、Avg3) 数値を変数に置き換えますか?

アレイは Tridium 環境では使用できないため、使用できません。

私はこのようなものが必要です:

for (i=1;i<10;i++) {
    getAvg(i).setValue(5);
}

値を設定するには、次の形式を使用する必要があります。

getVarName().setValue(value);

ここで、VarName = 大文字で始まる変数の名前、value = 変数に設定する値。

4

4 に答える 4

1

私は最終的に、必要なことを行う方法を見つけました。

for (int i=1; i <= incount; i++) {   

    String ord = getString("BqlOrd" + i);

    Bnum = (BStatusNumeric)get("Num"+i);
    Bavg = (BStatusNumeric)get("Avg"+i);
    Bmin = (BStatusNumeric)get("Min"+i);           
    Bmax = (BStatusNumeric)get("Max"+i); 
    Bdefault = (BStatusNumeric)get("Default"+i); 
}

これは、BStatusNumeric クラスの Tridium プログラムの「スロット」を効果的に反復します。

于 2012-08-24T20:17:11.047 に答える
0

Java は、実行時にローカル変数に関するいかなる種類のリフレクションも提供しないため、私があなたを正しく理解していれば、あなたが求めていることを行うことはできません。反復したいのがクラスのデータ メンバー (インスタンス フィールド) である場合、リフレクションを使用してそれを行うことができますが、コンパイラによって完全に最適化される可能性があるローカル変数は使用できません。

于 2012-07-10T21:42:15.957 に答える
0

ローカル変数の代わりに属性を使用できる場合は、リフレクションを使用できます。とはいえ、環境が配列をサポートしていない場合、それがリフレクションをサポートしているとは思えません。

于 2012-07-10T21:42:30.473 に答える
0

Tridium 環境についてはよくわかりませんが、Collections フレームワークも問題外だと思います...

enumを使用してを実装してみてくださいjava.util.Enumeration。それがない場合は、そこからインスピレーションを得てください。

public enum Foo implements java.util.Enumeration {
    AVG1, AVG2, AVG3, AVG4, AVG5;

            private Foo currentOption;

    public boolean hasMoreElements() {
        if (currentOption!=AVG5) return true;
                    else return false;
    }
    public Object nextElement(){
        switch (currentOption) {
                        case AVG1: currentOption=AVG2; return AVG2;
                        case AVG2: currentOption=AVG3; return AVG3;
                        case AVG3: currentOption=AVG4; return AVG4;
                        case AVG4: currentOption=AVG5; return AVG5;
                        default: return null;
                    }
    }
}

コードの品質は良くありませんが、おわかりいただけたでしょうか。

于 2012-07-10T21:50:05.147 に答える