Java中怎么实现并行计算器
发表于:2025-02-01 作者:千家信息网编辑
千家信息网最后更新 2025年02月01日,Java中怎么实现并行计算器,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。代码实现:package test;import java
千家信息网最后更新 2025年02月01日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; } LinkedListplus_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安全错误
数据库的锁怎样保障安全
租服务器好还是架设服务器好
电机软件开发培训
江苏特色软件开发推荐货源
数据库差集怎么写
幼儿园网络安全倡议书美篇
机柜滑轨拆卸服务器
vip数据库英文全称
辽宁电视墙服务器设备
500g服务器硬盘
家长和孩子一起学习网络安全
兄弟互联网科技
monitor连接不了数据库
工业网络安全常识学习
爱网络技术
互联网科技企业有哪些职位
ug8.0许可证服务器
企业邮箱服务器主机名
大数据库有辐射吗
网络安全课宣传片
数据库密文索引技术
国土三调数据库建设
idea数据库文件
介绍网络技术课程
手机外国代理服务器
数据库sql 题型与答案
江门专业的模具制造管理软件开发
益阳市网络安全宣传日
远控服务器
教师数据库 内容
win7建ftp服务器