double l=57;
double a1=10*0.1;
double b1=a1+10*0.075;
double c1=b1+20*0.05;
double d1=c1+20*0.03;
double e1=d1+40*0.015;
double j;
int bz;
if(l>=100)
bz=10;
else
bz=(int)l/10;
switch(bz) {
case 0:
j=l*10;
break;
case 1:
j=a1+(l-10)*0.075;
case 2:
case 3:
j=b1+(l-20)*0.05;
break;
case 4:
case 5:
j=c1+(l-40)*0.05;
case 6:
case 7:
case 8:
case 9:
j=d1+(l-60)*0.015;
case 10:
j=e1+(l-100)*0.01;
break;
}
System.out.println(j);
是因为j没有赋初值。我帮你修改了一下,可以输出了,代码如下;
double l=57;
double a1=10*0.1;
double b1=a1+10*0.075;
double c1=b1+20*0.05;
double d1=c1+20*0.03;
double e1=d1+40*0.015;
double j = 0; //赋初值
int bz;
if(l>=100)
bz=10;
else
bz=(int)l/10;
switch(bz) {
case 0:
j=l*10;
break;
case 1:
j=a1+(l-10)*0.075;
case 2:
case 3:
j=b1+(l-20)*0.05;
break;
case 4:
case 5:
j=c1+(l-40)*0.05;
case 6:
case 7:
case 8:
case 9:
j=d1+(l-60)*0.015;
case 10:
j=e1+(l-100)*0.01;
break;
}
System.out.println(j);
哪里不理解?
1.先选用储存进程和系统资源的数据结构,两者我都是用链表的形式储存的。(其实系统资源用数组比较好,因为它基本上都是修改,没有增加和删除。)。选用链表之后就是创建链表类的属性,系统资源的属性有名字、系统总资源和可用资源。进程类链表的属性是进程名字、最大需要资源的链表头节点和当前占有资源的链表头节点。
2.然后是设计菜单。
大概设计成这样就行,然后用switch语句执行每一个选项的方法。
前四个选项的输入,主要就是初始化所有属性,给属性赋值就行了。
第七个选项,也是遍历两个链表,查看属性就行了。我重点说一下,5和6的两个算法。
3.安全性检测,因为是检测,所以进入方法之后,首先赋值进程链表和资源的链表。然后创建一个判断当前进程链表是否有可以被满足的进程的方法。传入进程链表的头节点,如果当前可用资源可以满足此链表的某一个进程节点,就将此节点占用的资源加到可用资源上。然后删除此节点,再次调用此方法,看是否能满足某一个节点。如果可用资源数对每一个进程的节点都不满足,说明当前没有安全序列。如果每次都能满足,每次都删除节点,当头节点为null的时候,证明所有节点都释放完毕,安全序列已经生成。
4.开始请求资源,这是银行家算法的核心,因为是试分配,所以还是要复制两条链表,然后系统对某一个进程进行资源请求,可以分为五种情况。
①.请求的资源大于系统可用资源,做一个判断打印一下就可以;
②.请求的资源大于此进程尚需的资源数,做一个判断打印一下就可以;
③.请求的资源满足条件,减少系统可用资源,增加请求资源进程的占有资源,在此状态下调用安全性检测方法,系统不处于安全状态。(因为是在复制链表中进行的,所以不用再次赋值,直接舍弃复制的链表)
④.请求的资源满足条件,减少系统可用资源,增加请求资源进程的占有资源,在此状态下调用安全性检测方法,系统处于安全状态,系统资源进行真实分配,将复制链表的值,赋给真实链表。
⑤.系统资源请求加上进程之前所占有的资源,刚好每种资源等于它的最大需求量,此进程得到满足,释放所有资源,将可用资源增加,此进程在真实链表中被删除。
你这代码放在哪个函数里了?