2013-02-19 1 views
-1

Вот то, что я до сих пор: Мой список:Как случайным образом выбрать целое число из списка в Java?

private int [] delays = {1000, 1333, 3443, 1220, 3232}; 

Я хочу иметь функцию, где он будет спать на мгновение, прежде чем продолжить:

sleep(random(delays)) 

я нашел решения для строк но когда дело доходит до целых чисел, я действительно не понимаю.

Пожалуйста, кто-нибудь может помочь мне с кодом и объяснить его также?

я импортировал случайный,

я получил:

Random rand = new Random(); 
int delayIndex = rand.nextInt(delays.length); 

однако он говорит: Метод nextInt (целое, целый) в типе Random не применяется для аргументов (межд)

Спасибо, что отрицал меня.

Я ценю вашу помощь, однако проблема я адресности все еще встречающийся:

Метод nextInt (целое, целое) в типе Random не применяется для аргументов (интермедиат)

Я не поймите, почему я совершенно новичок в java, так голый со мной.

+0

Вы пытаетесь случайным образом выбрать целое число из массива 'delayays'? –

+2

Вы уверены, что случайно не набрали «(задержка, длина)« с запятой »,« вместо периода ».»? – rgettman

+0

Да, я уверен, что я не использовал запятую .. и да pavel im пытается случайно выбрать. – Echoe

ответ

1

Используйте встроенный в Java класс Random, чтобы выбрать случайное целое число от 0 до последнего индекса вашего массива.

import java.util.*; 

Random rnd = new Random(); 
int delayIndex = rnd.nextInt(delays.length); 

Затем войдите в массив и подайте этот элемент массива в Thread.sleep.

+0

ahhh так его delayays.length, я использовал delayays.getSize(): S позвольте мне проверить это! 2 минуты и спасибо! О да, это проблема, которую я получил: Метод nextInt (int, int) в типе Random не применим для аргументов (int) – Echoe

+0

Да, это массив, поэтому используйте delayays.length. – rgettman

1

Производите случайное значение от 0...N где N - размер массива, удерживающий вашу продолжительность. Как только у вас есть это случайное значение, которое является индексом для массива, просто спящий на протяжении времени извлекает из вашего массива в этой позиции индекса.

Random random = new Random(); 
int randomInt = random.nextInt(delays.length); 
sleep(delays[randomInt]); 
1
Random r = new Random(); 

Thread.sleep (delays [r.nextInt (delays.length)]); 
+0

Я все еще получаю ошибку: метод nextInt (int, int) в типе Random не применим для аргументов (int) – Echoe

+0

@Echoe Убедитесь, что ваш 'Random' действительно' java.util.Random'. –

1
Random rnd = new Random(); 
int index = rnd.nextInt(delays.length); 
+0

В вашем случае 'index' будет от' -delays.length + 1' до 'delayays.length-1' включительно, т. Е. Может быть отрицательным. –

+1

@MikhailVladimirov Спасибо, забыл, что java дает отрицательные результаты модному. – NominSim

1
public int random(int[] delays){ 
    Random rn = new Random(); 
    int range = delays.length - 1; 
    int pos = rn.nextInt() % range; 

    return delays[pos]; 
} 
1
sleep(delays[(int)(Math.random() * 100)/20]); 

Math.random() возвращает случайное число> = 0,0 и < 1,0

Умножить на 100, преобразовать в целое, и разделить на 20 - теперь у вас есть случайное число 0 - 4.

Или:

sleep(delays[new Random().nextInt(5)]); 

http://docs.oracle.com/javase/7/docs/api/java/lang/Math.html#random() http://docs.oracle.com/javase/7/docs/api/java/util/Random.html

+0

Спасибо за это, похоже, проблема решена. Я ценю вашу помощь! Любая идея, что, кажется, проблема с nextInt вещь? – Echoe

+0

'Random.nextInt()' принимает один аргумент; «int». И на самом деле это верхняя граница, эксклюзивная. Вы получите число, которое находится между нулем и числом минус один. –

+0

Вы импортируете что-то странное, а не 'java.util.Random', если вы получаете сообщение, которое вы заявляете. –

0

Целые массивы не являются списки, массивы, как правило, последовательное хранение памяти объектов (например.0 = 1, 1 = 16, 2 = 0, 3 = 100) Но в любом случае здесь, как сделать это с целым массивом:

int[] delays = {1000, 1333, 3443, 1220, 3232}; 
Random rand = new Random(); 
Thread.sleep(delays[rand.nextInt(delays.length)]); 

Чтобы сделать то же самое со списком со списком целых чисел это было бы что-то вроде этого:

List<Integer> delays = Lists.newArrayList(1000, 1333, 3443, 1220, 3232); 
int delay; 
for (Iterator<Integer> iter = delays.iterator(); iter.hasNext();){ 
    Random rand = new Random(); 
    if(rand.nextInt(delays.size()) == delays.size()){ 
      delay = iter.next(); 
      break; 
    } 
} 
Thread.sleep(delay); 

Как вы можете догадаться, я тоже новичок в Java, но я надеюсь, что я мог бы помочь.