2013-09-11 3 views
0

Мне нужно создать несколько переменных, таких как: «n23, n4, n18 ...».
Итак, они состоят из двух частей: буквы «n» и числа, которое я хочу получить от моего метода для генерации случайных чисел (rand()).Как использовать метод во имя переменной?

Что-то вроде этого:

for(int i = 0; i < 6; i++) { 
    int n*here_must_be_random_number_got_from_my_method*; 
} 

Можно ли сделать что-то подобное?

+5

Вы не можете. Используйте массив, карту или список. –

+0

Почему вы создаете переменные во время выполнения? Переменные являются частью определения класса, а не частью состояния объекта во время выполнения. –

+2

Это очень похоже на [проблема XY] (http://meta.stackexchange.com/questions/66377/what-is-the-xy-problem) – gerrytan

ответ

1

Java не является языком скриптов.

Все идентификаторы, которые означают все имена пакетов, имена типов, имена методов, имена полей и переменные, должны указываться во время компиляции. Таким образом, нет возможности объединить имена переменных на основе значений, вычисленных во время выполнения.

НО!

Вам даже не нужно. Просто используйте java.util.Map. Вместо того чтобы делать

int n*here_must_be_random_number_got_from_my_method* = *whatever_it_is_you_want_to_put_here*; 

вы можете вместо этого сделать

Map<Integer, Integer> myMap = new HashMap<>(); 

один раз, а затем положить значения внутри карты следующим образом:

myMap.put(*here_must_be_random_number_got_from_my_method*, *whatever_it_is_you_want_to_put_here*); 

и получить его обратно, как так:

myMap.get(*here_must_be_random_number_got_from_my_method*); 
0

Вы не можете, но предположительно вы хочу, чтобы ссылался на на эти более поздние даты, и если бы вы намеревались ссылаться на n123, то, можно надеяться, ссылайтесь на них как на n[123]. Если это так, то вы можете использовать массив Java, возможно, как это:

private int[] n = new int[999]; 

void populate() { 
    for(int i = 0; i < 6; i++) { 
     n[here_must_be_random_number_got_from_my_method] = something; 
    } 
} 

Обратите внимание, что Java не делает разреженных массивов, поэтому размер вашего массива должен быть настолько большим, как самый большой случайное число , Если это нам больше, подумайте об использовании карты в соответствии с ответом Яна.

+0

Предполагая, что у него действительно нет всех чисел между 0 и 999, это будет пустой тратой ресурсов *, а также * смысловым нарушением. Поиск значения на основе ключа - это работа «Карта», а не массивы. –

+0

@jan да. Я подумал об этом. Отмечено в ответ указателем на ваш ответ – Bohemian

Смежные вопросы