千家信息网

Java中怎么实现并行计算器

发表于:2025-12-04 作者:千家信息网编辑
千家信息网最后更新 2025年12月04日,Java中怎么实现并行计算器,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。代码实现:package test;import java
千家信息网最后更新 2025年12月04日Java中怎么实现并行计算器

Java中怎么实现并行计算器,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。

代码实现:

package test;import java.util.*;import java.util.concurrent.*;public class Main {    final static ExecutorService executorService = Executors.newCachedThreadPool();        public static void main(String [] args) throws ExecutionException, InterruptedException {        Scanner scanner = new Scanner(System.in);        while (scanner.hasNext()) {            System.out.println("请输入加法计算器和乘法计算器个数");            String inputStr =  scanner.nextLine();            String[] operateNumArry = scanner.nextLine().split(" ");            int plusNum = Integer.parseInt(operateNumArry[0]);            int mulNum = Integer.parseInt(operateNumArry[1]);            if (plusNum < 0 || mulNum < 0) {                System.out.println("并行计算器数量要大于0");                break;            }                    LinkedList plus_numbers = new LinkedList<>();            LinkedList> mul_number_array = new LinkedList<>();            String [] inputArray = inputStr.split("\\+");                        for (int i = 0; i < inputArray.length; i++) {if (!inputArray[i].contains("*")) {                    plus_numbers.add(Integer.parseInt(inputArray[i]));                } else {                    LinkedList mul_numbers = new LinkedList<>();                    String [] mul_numbers_str = inputArray[i].split("\\*");                    for (int j = 0; j < mul_numbers_str.length; j++) {                        mul_numbers.add(Integer.parseInt(mul_numbers_str[j]));                    }//乘排序                    Collections.sort(mul_numbers);                    //添加到list                    mul_number_array.add(mul_numbers);                }            }                        StringBuilder builder = new StringBuilder();            calculateSum(plus_numbers, mul_number_array, plusNum, mulNum,builder);            System.out.println(builder.toString());        }    }        /**     * 計算     * @param plusNumbers     * @param mulNumbers     * @param plusNum     * @param mulNum     */    public static void calculateSum(LinkedList plusNumbers, LinkedList> mulNumbers, int plusNum, int mulNum, StringBuilder builder) throws ExecutionException, InterruptedException {//首先打印        printResult(plusNumbers, mulNumbers, builder);        if (plusNumbers.size() == 1) {return;        }       //計算加        int requiredPlusNum = plusNumbers.size();        if (requiredPlusNum > plusNum)            requiredPlusNum = plusNum;        else if (requiredPlusNum <= plusNum)            requiredPlusNum--;                for (int i = 0; i < requiredPlusNum; i++) {            Integer first_plus_factor = plusNumbers.poll();            Integer second_plus_factor = plusNumbers.poll();            Future future = executorService.submit(new Operator(first_plus_factor, second_plus_factor, 0));            plusNumbers.addLast(future.get());        }    //计算乘        int requiredMulNum = mulNumbers.size();        if (requiredMulNum > mulNum)            requiredMulNum = mulNum;                for (int i = 0; i <  requiredMulNum; i++) {                LinkedList mulNumberArray = mulNumbers.poll();            Integer first_mul_factor = mulNumberArray.poll();            Integer second_mul_factor = mulNumberArray.poll();            Future future = executorService.submit(new Operator(first_mul_factor, second_mul_factor, 2));                        if (mulNumberArray.isEmpty())                plusNumbers.add(future.get());            else {                mulNumberArray.offer(future.get());                mulNumbers.offer(mulNumberArray);            }        }    //递归调用        calculateSum(plusNumbers, mulNumbers, plusNum, mulNum, builder);    }    static void printResult(final LinkedList plusNumbers, final LinkedList> mulNumbers, StringBuilder builder) {//加排序        Collections.sort(plusNumbers);        builder.append("{");        plusNumbers.forEach(item-> {builder.append(item).append("+");        });            if (!mulNumbers.isEmpty()) {//相同數量的乘因子按第一個不同的最小值排序            Collections.sort(mulNumbers, new CustomComparator());            mulNumbers.forEach(item->{                item.forEach(i->{builder.append(i).append("*");                });                        builder.deleteCharAt(builder.lastIndexOf("*")).append("+");            });        }                builder.deleteCharAt(builder.lastIndexOf("+")).append("}").append("\n");    }    static class CustomComparator implements Comparator> {@Override        public int compare(List o1, List o2) {if (o1.size() == o2.size()) {for (int i = 0; i < o1.size(); i++) {if (o1.get(i) > o2.get(i))return 1;                    else if (o1.get(i) < o2.get(i))return -1;                    else                        return 0;                }            return 0;            } else if (o1.size() > o2.size()){return 1;            }        return -1;        }    }        static class Operator implements Callable  {//第一因子        private int firstNumber;        //第二因子        private int secondNumber;        //操作類型:加、減、乘、除:0/1/2/3        private int type;            public Operator(int firstNumber, int secondNumber, int type) {this.secondNumber = secondNumber;            this.firstNumber = firstNumber;            this.type = type;        }    public Integer call() throws Exception {if (type == 0)return firstNumber + secondNumber;            if (type == 1)return firstNumber - secondNumber;            if (type == 2)return firstNumber * secondNumber;            if (type == 3)return firstNumber / secondNumber;            if (type == 4)return firstNumber % secondNumber;            return 0;        }    }}

关于Java中怎么实现并行计算器问题的解答就分享到这里了,希望以上内容可以对大家有一定的帮助,如果你还有很多疑惑没有解开,可以关注行业资讯频道了解更多相关知识。

计算器 因子 问题 排序 更多 帮助 解答 不同 易行 最小 相同 简单易行 个数 乘法 代码 内容 加法 小伙 小伙伴 数量 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 人民网软件开发部 计算机网络技术第一阶段作业 新兴经济与网络安全融合 高校学校网络安全工作内容 安卓远程启动服务器下载 结构化数据库包含哪些 证券交易软件开发工作内容 廊坊市凯硕网络技术有限公司 网络安全知识与技术考试 国家网络安全局发文 浙江惠普服务器维修维保价格 拒绝服务与数据库安全论文 上海大承网络技术 十堰软件开发税务筹划有什么方法 wpf 数据库下划线字段 华为服务器lolo是什么网口 黄德才数据库实验数据查询 什么是云服务器系统 工商联数据库总结 高考冲刺网络技术应用 数据库如何取证 辽阳软件开发制作 网络安全管理员课时 软件开发竞争性谈判会议纪要 精讲解读国家网络安全法意义感想 杭州哪个软件开发培训好 将数据库爬下来 网络安全青少年日活动 兰石爱特互联网科技有限公司 平板电脑怎么做图片数据库
0