Установка значений переменных с помощью массива / цикла в Java - PullRequest
0 голосов
/ 12 января 2011

Как я могу установить значения переменных с помощью цикла? Например:

String cur[]= {"A","B"};
String strA,strB;
for(int i =0;i < cur.length;i++) {
  str+i = "Blah";
}

что должно идти в части "str + i", чтобы для strA и strB было установлено значение "Blah"?

Спасибо

Ответы [ 4 ]

3 голосов
/ 12 января 2011

Нет простого способа сделать именно то, что вы хотите.Однако существует простая альтернатива: вместо индивидуального именования ваших строк, просто используйте один массив.

String[] cur = new String[2];
for (int i = 0; i < cur.length; ++i) {
    cur[i] = "Blah";
}

Если вам нужен доступ к этим строкам по имени, а не по индексу, посмотрите на создание Map<String, String>.

3 голосов
/ 12 января 2011

Ты этого не делаешь.Вместо этого вы создаете коллекцию некоторого типа.Например, вы можете использовать карту:

String[] cur = { "A", "B" };
Map<String, String> map = new HashMap<String, String>;
for (String name : cur)
    map.put(name, "Blah");
}

Если вы не используете отражение (которое не поможет локальным переменным), вы не сможете "вычислить" имя переменной для использования ... и вы не должен использовать отражение для чего-то подобного.

Это предполагает, что вы хотите получить доступ к значениям по имени строки.Если вы можете использовать непрерывный диапазон целых чисел (начиная с 0), тогда массив или List<T> могут быть более подходящими.Это зависит от того, что вы пытаетесь сделать.

1 голос
/ 12 января 2011

Вы можете сделать что-то вроде этого, хотя я не уверен, почему вы хотите:

import java.lang.reflect.Field; 

public class Test { 
    static public String strA, strB; 

    public static void main(String args[]) throws Exception { 
        String cur[]= {"A","B"}; 

        for(int i =0;i < cur.length;i++) { 
            Field field = Test.class.getField("str" + cur[i]); 
            field.set(null, "Blah"); 
        } 
        System.out.println(strA); 
        System.out.println(strB); 
    } 
} 
1 голос
/ 12 января 2011

Вы не можете.Вы, вероятно, не должны.

Для строго того, что вы хотите, вы должны использовать, вероятно, классы java.lang.reflectЭто позволяет вам осуществлять динамический доступ к элементу, который вы видите возможным на таких языках, как javascript и / или ruby.Но это кажется излишним в этом случае.

Еще одно более полезное решение - мистер.Джон Скит предложил.В зависимости от ваших реальных потребностей это может сработать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...