笔记七:课程实验中遇到的问题与解决(4)

Java中随机数操作总结

在最近的实验中需要实现随机进程调度,随机排班等功能,需要使用到随机数,现将随机数的相关操作总结如下

1. 生成不重复随机数序列

在安排排班和进程调度时,需要将所有人或所有进程都安排到,且已经安排过的不能再次安排,也就是说需要用到一个有一定范围的不重复随机数序列,利用Java的Random类实现如下

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Random;
import java.util.Scanner;
import java.util.List;

// 生成1到10的随机不重复序列
public class RandomNumber {
    public static void main(String[] args) {
		
        for(int i = 0; i < 11; i ++)
            numbers.add(i + 1);
        int[] result = new int[k];
        for(int i = 0; i < 11; i ++){
            int r = generateRandomIndex(n - i);
            result[i] = numbers.get(r);
            numbers.remove(r);
        }
        Arrays.sort(result);
        for(int i : result)
            System.out.println(i);
    }
    // 获得0到n之间的随机数(不包括0,n)
    private static int generateRandomIndex(int n){
        Random random = new Random();
        return random.nextInt(n);
    }
}

2. 随机产生一个限定范围的long型数字

public long nextLong(Random rng, long n) {
   long bits, val;
   do {
      bits = (rng.nextLong() << 1) >>> 1;
      val = bits % n;
   } while (bits-val+(n-1) < 0L);
   return val;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
通过优先级调度算法的模拟,加深进程概念和进程调度过程的理解。设计原理及方案:1)在Linux下用C语言编程模拟优先级程调度算法。为了清楚地观察每个进程的调度过程,程序将每个时间片内的进程情况显示出来。2)进程控制块是进程存在的唯一标志,因此,在模拟算法每一个进程用一个进程控制块PCB来代表,PCB用一结构体表示。3)进程在运行过程其状态将在就绪、执行、完成几种状态之间转换,同时进程可能处于不同的队列,如就绪队列。在优先级调度算法,选择单向队列,入队既是将进程控制块插入队尾,出队既是按优先级重新排列的队,删除队头元素。4)为了便于处理,程序的某进程运行时间以时间片为单位计算。各进程的优先级认为输入,运行所需时间随机产生。5)优先权调度算法采用动态优先权,进程每运行一个时间片,优先数减1;进程在就绪队列等待一个时间单位,优先数加1。6)对于遇到优先权一致的情况,采用FCFS策略解决。7)由于是模拟进程调度,所以,对被选的进程并不实际启动运行,而是修改进程控制块的相关信息来模拟进程的一次运行。 分别用两种调度算法对伍个进程进行调度。每个进程可有三种状态;执行状态(R)、就绪状态(W,包括等待状态)和完成状态(F,并假定初始状态为就绪状态。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值