尝试以随机时间间隔添加项目。
我想我需要在我等于到达时开始,一旦满足我需要创建一个新的随机到达并添加i(否则它不会再发生,因为我已经到了。所以我添加了另一个如果,一旦满足,创建新的到达时间并再次添加我。伪代码似乎有意义,代码不是那么多,任何帮助是值得赞赏的。
ArrayList<Integer> q = new ArrayList<Integer>();
Random r = new Random();
int arrivals = 0;
for (int i = 1; i <= 720; i++) {
int arrive = r.nextInt(4)+1;
if (i == arrive) {
q.add(i);
arrivals ++;
arrive = r.nextInt(4)+1+i;
}
else if (i == arrive) {
q.add(i);
arrivals ++;
arrive = r.nextInt(4)+1+i;
}
}
抱歉,到达时间应该刚到。 ArriveTime不存在。
编辑:从评论中扩展。 'i'代表时间,我不想在列表中添加随机整数。而是以“i”的随机间隔添加相同的对象。我在列表中添加'i'的值,以查看算法添加项目的时间,因为它似乎没有工作。结果各不相同,但似乎总是将单个数字添加到列表中。还对代码进行了更新。
答案 0 :(得分:1)
您的算法缺少暂停 - 即调用Thread.sleep()
,否则会旋转。
我会努力保持简单,将代码与问题相匹配:即在添加到队列之间等待一段时间,只需:
ArrayList<Integer> q = new ArrayList<Integer>();
Random r = new Random();
for (int i = 1; i <= 720; i++) { // loop as many times as you want
Thread.sleep(r.nextLong() % 1000); // wait a random time up to 1 second
q.add(r.nextInt()); // add a random number to the queue
}
您可以根据自己的要求调整数字。
答案 1 :(得分:0)
发布的代码没有多大意义。
arrive
的语句无效...因为它在循环中是本地的。答案 2 :(得分:0)
您应该在time
语句中将if
与1-4进行比较,然后将该值添加到i
(因为i
代表时间)这样的事情
ArrayList<Integer> q = new ArrayList<Integer>();
Random r = new Random();
int arrivals = 0;
for (int i = 1; i < 100 ; i++) { //loop as many times as you want.
int time = r.nextInt(4)+1; //choose a random time of arrival, 1-4
//now compare time to your random time intervals (1-4, not i
//if it matches add that value to i
if (time == 1) {
//add your object to the list
i += 1;
}
else if (time == 2) {
//add your object to the list
i += 2;
}
else if (time == 3) {
//add your object to the list
i += 3;
}
else if (time == 4) {
//add your object to the list
i += 4;
}
}