Как определить несколько наборов, используя цикл в java?

91
13

Я хочу определить тысячи treeet.How я могу сделать это, используя какой-то цикл? Я пробовал код ниже, но он дает мне ошибку "Duplicate local variable"

//String names_array[]={jason,jack,katia,michael......}lots of name here
for (int z = 0; z < 2000; z++) {
String nameofset = namesarray[z];
TreeSet<String> nameofset = new TreeSet();
}

Изменение: нужно больше объяснений, я думаю. Я хочу создать разные наборы с другим именем, где каждое имя является некоторой строкой из списка, например, jason, jack...

спросил(а) 2015-06-30T13:17:00+03:00 5 лет, 2 месяца назад
1
Решение
70

Вы должны думать о структуре данных, в которой вы хотите хранить тысячи деревьев. Например, карта:

Map<String, Set<String>> namedSets = new HashMap<>();
String[] names = { "jason", "jack", "katia", "michael"};
for(String name : names) {
namedSets.put(name , new TreeSet<String>());
}

Чтобы получить определенный набор:

Set<String> jacksSet = namedSets.get("jack");

ответил(а) 2015-06-30T13:23:00+03:00 5 лет, 2 месяца назад
40

У вас есть этот код:

  String nameofset = namesarray[z];                     
TreeSet<String> nameofset = new TreeSet();

Вы создаете две переменные с одним и тем же именем. Определение объекта TreeSet вызывает исключение, так как имя локальной переменной использовалось чуть выше него. Вы должны использовать разные имена, и мне интересно, что вы будете делать с переменной String, поскольку она не используется в своей области.

ответил(а) 2015-06-30T13:48:00+03:00 5 лет, 2 месяца назад
40

Вам придется отделить TreeSet объекта TreeSet и назначить переменные на два отдельных шага. В цикле вы можете создавать только объекты, но не пытайтесь снова и снова назначать одну и ту же ссылочную переменную - очевидно, это ошибка. Для хранения этих объектов вам понадобится ArrayList<TreeSet<String>>. Позже вы можете назначить эти объекты на любые нужные вам ссылки.

Кроме того, неясно, почему вам нужны разные имена переменных, чтобы начать с того, когда вы можете получить доступ к этим объектам по своим индексам из ArrayList и назначить любые ссылки по своему усмотрению.

ответил(а) 2015-06-30T13:32:00+03:00 5 лет, 2 месяца назад
41

У вас есть две переменные по имени nameofset внутри цикла. Внесите следующие изменения в свой код:

for(int z=0;z<2000;z++){
String nameString =namesarray[z];
TreeSet<String> nameofset = new TreeSet();
}

ответил(а) 2015-06-30T13:21:00+03:00 5 лет, 2 месяца назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема