-4

3 つの文字列フィールドで構成されるクラスがあり、Birdそれぞれが異なる言語の名前Bird.lang1です。と呼ばれる Bird のインスタンスがあります。Bird.lang2Bird.lang3allbirds

ListOfAllBirdsここで、ユーザーが選択した言語ですべての鳥の名前を含む文字列のリストを作成したいと考えています。これはlang変数に格納され、その値はlang1lang2、のいずれかですlang3。そして、これを何百回も行う必要があります (この回数を呼び出しますN)。

もちろん、すべての Bird 要素に対してイテレータを実行し、対応するフィールドを のフィールドに追加できlangます。しかし、これ3 x N x Bird.size()は、ユーザーが選択した言語をテストするための (つまり、何十万もの!!) 条件付きクエリを意味します。

次のようなことができますか

varfield = lang.toField();
for (Bird birdy : allbirds)
    ListOfAllBirds.add(birdy.varfield);

つまり、変数を使用してフィールドへの参照を作成できますか?? これにより、大量の条件付きクエリを節約できます。

ありがとう!

4

1 に答える 1

1

String 配列を使用することで私が意味したことは、次のようなものでした (Vulcan が提案したように言語設定を int に変更したくない場合)。

String chosenLanguage = "Language 2";
int languageIndex = -1;
switch(chosenLanguage)
{
    case "Language 1": 
        languageIndex = 0;
        break;
    case "Language 2":
        languageIndex = 1;
        break;
    case "Language 3":
        languageIndex = 2;
        break;
    default:
        languageIndex = 0;
        break;
}

for (Bird birdy : allbirds)
       ListOfAllBirds.add(birdy.names[languageIndex]);

クラスは次のようになります。

class Bird
{
    public String[] names = {"name1", "name2", "name3"};
}

それ以外の

class Bird
{
    public String lang1 = "name1";
    public String lang2 = "name2";
    public String lang3 = "name3";
}

この方法では、ユーザーが選択した言語を 1 回確認するだけで (インデックスを見つけるために)、すべての鳥を繰り返し処理して、インデックスに基づいて正しい名前を取得できます。

于 2012-12-09T00:57:36.420 に答える