光电数鸡算法《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。

二:代码解答

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

java 复制代码
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实体类:

java 复制代码
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;
    }

结果

java 复制代码
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。
总结:

总体而言并不算太难,加油!

相关推荐
桦说编程21 分钟前
Java 中如何创建不可变类型
java·后端·函数式编程
lifallen21 分钟前
Java Stream sort算子实现:SortedOps
java·开发语言
IT毕设实战小研24 分钟前
基于Spring Boot 4s店车辆管理系统 租车管理系统 停车位管理系统 智慧车辆管理系统
java·开发语言·spring boot·后端·spring·毕业设计·课程设计
地平线开发者33 分钟前
ReID/OSNet 算法模型量化转换实践
算法·自动驾驶
地平线开发者1 小时前
开发者说|EmbodiedGen:为具身智能打造可交互3D世界生成引擎
算法·自动驾驶
cpsvps_net1 小时前
美国服务器环境下Windows容器工作负载智能弹性伸缩
windows
没有bug.的程序员1 小时前
JVM 总览与运行原理:深入Java虚拟机的核心引擎
java·jvm·python·虚拟机
甄超锋2 小时前
Java ArrayList的介绍及用法
java·windows·spring boot·python·spring·spring cloud·tomcat
星星火柴9362 小时前
关于“双指针法“的总结
数据结构·c++·笔记·学习·算法
阿华的代码王国2 小时前
【Android】RecyclerView复用CheckBox的异常状态
android·xml·java·前端·后端