我是Java小菜鸡,理解不了这代码为啥输出不了,求解答

    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);

哪里不理解?

  • 先是定义double类型变量,有些直接用整形直接赋值,有些用计算表达式赋值,有些依赖上一个变量赋值
  • 然后是个if-else语句
  • 接着是个switch语句,按照不同情况,计算j,最后输出j。
  • 这个问题的回答你可以参考下: https://ask.csdn.net/questions/7726525
  • 我还给你找了一篇非常好的博客,你可以看看是否有帮助,链接:【Java牛客刷题第四期】——想让自己算法大幅度提升,这一期你一定不要错过
  • 除此之外, 这篇博客: 用java语言,模拟实现操作系统的银行家算法。中的 详细设计 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  • 1.先选用储存进程和系统资源的数据结构,两者我都是用链表的形式储存的。(其实系统资源用数组比较好,因为它基本上都是修改,没有增加和删除。)。选用链表之后就是创建链表类的属性,系统资源的属性有名字、系统总资源和可用资源。进程类链表的属性是进程名字、最大需要资源的链表头节点和当前占有资源的链表头节点。
    2.然后是设计菜单。
    在这里插入图片描述
    大概设计成这样就行,然后用switch语句执行每一个选项的方法。
    前四个选项的输入,主要就是初始化所有属性,给属性赋值就行了。
    第七个选项,也是遍历两个链表,查看属性就行了。我重点说一下,5和6的两个算法。
    3.安全性检测,因为是检测,所以进入方法之后,首先赋值进程链表和资源的链表。然后创建一个判断当前进程链表是否有可以被满足的进程的方法。传入进程链表的头节点,如果当前可用资源可以满足此链表的某一个进程节点,就将此节点占用的资源加到可用资源上。然后删除此节点,再次调用此方法,看是否能满足某一个节点。如果可用资源数对每一个进程的节点都不满足,说明当前没有安全序列。如果每次都能满足,每次都删除节点,当头节点为null的时候,证明所有节点都释放完毕,安全序列已经生成。
    4.开始请求资源,这是银行家算法的核心,因为是试分配,所以还是要复制两条链表,然后系统对某一个进程进行资源请求,可以分为五种情况。
    ①.请求的资源大于系统可用资源,做一个判断打印一下就可以;
    ②.请求的资源大于此进程尚需的资源数,做一个判断打印一下就可以;
    ③.请求的资源满足条件,减少系统可用资源,增加请求资源进程的占有资源,在此状态下调用安全性检测方法,系统不处于安全状态。(因为是在复制链表中进行的,所以不用再次赋值,直接舍弃复制的链表)
    ④.请求的资源满足条件,减少系统可用资源,增加请求资源进程的占有资源,在此状态下调用安全性检测方法,系统处于安全状态,系统资源进行真实分配,将复制链表的值,赋给真实链表。
    ⑤.系统资源请求加上进程之前所占有的资源,刚好每种资源等于它的最大需求量,此进程得到满足,释放所有资源,将可用资源增加,此进程在真实链表中被删除。

  • 您还可以看一下 翟东平老师的企业微信支付JAVA版_企业红包+向员工付款+向员工收款课程中的 向员工收款_快速部署_修改账户信息小节, 巩固相关知识点

你这代码放在哪个函数里了?