• 光电数鸡算法《java》


    一:需求

    题目:一条流水线有工位D1,D2,D3…D20,总共20个工位。
    每个工位都装有一个光电计数器,每个工位都为本工位的计数减去前一个工位(第一个有数值的工位除外,不计算。)
    计算规则:比如D1,D2都有数值,D2计数等于D2-D1为,D1不计算,以此类推。
    在这里插入图片描述
    现在数据库中存着这些工位计数的明细数据,要求从数据库中查出当天每个工位的光电计数值,并求出每个工位具体的计数值。
    注意:D1到D20,20是个工位中有可能有的工位没有数值,数据库明细中没有记录。如数据:D1数值20,D2为80,剩余数据没有了(数据库明细中只有这两个数据)。
    解释:数据D1为80,D2为100,D2后面所有工位为空,那么计算后,D1计数值为80,D2为100-80=20,如果哪个工位为空,不再计算,直接为0。

    二:代码解答

    注意:下面是测试代码,各位看看就好
    这个是测试代码:

    import java.util.HashMap;
    import java.util.LinkedList;
    import java.util.List;
    import java.util.Map;
    
        public class GoodIntegers {
            public static void countWholeDayPairs(List<ShStatisticsDetails> list) {
    
                Map<String, Integer> countsMap = new HashMap<>();
                for (int i = 0; i < list.size() ; i++) {
                    ShStatisticsDetails rs = list.get(i);
                    countsMap.put(rs.getWorkStation(), rs.getChickenNum());
                }
    
                int[] actualCounts = new int[20];
                int previousCount = 0;
                for (int i = 0; i < 20; i++) {
                    String currentStation = "D" + (i + 1);
                    int currentCount = countsMap.getOrDefault(currentStation, 0);
                    if (i == 0) {
                        actualCounts[i] = currentCount;  
                    } else {
                        if (currentCount != 0 || countsMap.containsKey(currentStation)) {
                            actualCounts[i] = currentCount - previousCount;
                            previousCount = currentCount;
                        } else {
                            actualCounts[i] = 0;  
                        }
                    }
                }
                for (int i = 0; i < 20; i++) {
                    System.out.println("D" + (i + 1) + ": " + actualCounts[i]);
                }
            }
    
            public static void main(String[] args) {
                List<ShStatisticsDetails> list = new LinkedList<>();
                //创建对象,依次放入D1,D2还有数值
                ShStatisticsDetails s1 = new ShStatisticsDetails();
                s1.setWorkStation("D2");
                s1.setChickenNum(80);
                list.add(s1);
    
                ShStatisticsDetails s2 = new ShStatisticsDetails();
                s2.setWorkStation("D3");
                s2.setChickenNum(100);
                list.add(s2);
    
    
                ShStatisticsDetails s3 = new ShStatisticsDetails();
                s3.setWorkStation("D12");
                s3.setChickenNum(220);
                list.add(s3);
    
    
                ShStatisticsDetails s4 = new ShStatisticsDetails();
                s4.setWorkStation("D18");
                s4.setChickenNum(260);
                list.add(s4);
    
                ShStatisticsDetails s5 = new ShStatisticsDetails();
                s5.setWorkStation("D6");
                s5.setChickenNum(120);
                list.add(s5);
              countWholeDayPairs(list);
            }
        }
    

    用的ShStatisticsDetails实体类:

    public class ShStatisticsDetails
    {
        private static final long serialVersionUID = 1L;
    
        /** 机器号 */
        @Excel(name = "机器号")
        private String machineNumber;
    
        /** 工位 */
        @Excel(name = "工位")
        private String workStation;
    
        /** 统计数鸡数量(明细) */
        @Excel(name = "统计数鸡数量", readConverterExp = "明=细")
        private Integer chickenNum;
        }
    

    结果

    D1: 0
    D2: 80
    D3: 20
    D4: 0
    D5: 0
    D6: 20
    D7: 0
    D8: 0
    D9: 0
    D10: 0
    D11: 0
    D12: 100
    D13: 0
    D14: 0
    D15: 0
    D16: 0
    D17: 0
    D18: 40
    D19: 0
    D20: 0
    

    解析:
    (1)将查询结果(也就是上面的list集合数据)存储在一个Map中,工位为map的key,光电计数为value,以便后续处理。
    如果某个工位没有数据,使用getOrDefault方法给出默认值0。
    (2)计算每个工位的实际计数:遍历所有工位,计算每个工位的实际计数。
    如果当前工位为第一个,则直接使用其计数值;
    否则,计算当前工位与前一个工位的差值。如果某个工位的数据缺失,则设置该工位的计数值为0。
    总结:
    总体而言并不算太难,加油!

  • 相关阅读:
    openjudge 1.8.15 细菌的繁殖与扩散
    docker (八)-dockerfile制作镜像
    替换sql,某个字段特定容
    【融合ChatGPT等AI模型】Python-GEE遥感云大数据分析、管理与可视化及多领域案例实践应用
    生成二维码
    [Unity2D独立/合作开发]实现记录物品在不同场景的存在状态,附:场景的淡入淡出功能和预加载
    一次元数据空间内存溢出的排查记录
    TC测试自动化Shell脚本
    nginx和gunicorn相关,反向代理和正向代理区别,静态资源和动态资源
    Perl爬虫程序的框架
  • 原文地址:https://blog.csdn.net/qq_43758153/article/details/139823691