为了比亚迪的电池终身质保,写了个简单算法,计算任意12个连续的月份公里数加起来不超过3万公里的预警 import java.util.ArrayList; import java.util.Arrays; import java.util.List; import java.util.Scanner; import java.util.stream.Collectors; /** * @Auther: LGH * @Date: 2023/4/26 15:48 * @Description: */ public class Test { public static void main(String[] args) { while (true){ Scanner scan=new Scanner(System.in); System.out.println("请输入开始年月份(如:202301):"); String month=scan.nextLine(); System.out.println("请输入每月公里数逗号隔开(如:2300,1233,3343):"); Scanner scan1=new Scanner(System.in); String amount=scan1.nextLine(); if (amount.indexOf(",")<0){ System.out.println("你输入的格式不正确"); } String [] hevs=amount.split(","); List<Integer> months=new ArrayList<>(); int length=hevs.length; int sum=0; int begain=0; int[] array = Arrays.asList(hevs).stream().mapToInt(Integer::parseInt).toArray(); int max=0; int min=0; String maxYear=null; String minYear=null; StringBuffer stringBuffer=new StringBuffer(); for (int i=0;i<length;i++){ int hev=array[i]; max=hev; min=hev; int k=0; sum+=hev; months.clear(); months.add(hev); minYear=handelYear(month,i); maxYear=handelYear(month,i); k++; for (int j=i+1;j<length;j++){ months.add(array[j]); if (array[j]>max){ max=array[j]; maxYear=handelYear(month,j); } if (array[j]<min){ min=array[j]; minYear=handelYear(month,j); } sum+= array[j]; k++; String s="ssssss"; if (k==12){ if (j<12){ System.out.println("从"+month+"至"+handelYear(month,11)+"的连续12个月的总里程:"+sum+"公里,平均每月行驶:"+sum/k+"公里,其中"+maxYear+"是单月最大行驶:"+max+"公里,"+minYear+"是单月最小行驶公里数:"+min+"公里"); stringBuffer.append("从"+month+"至"+handelYear(month,11)+"里程详情"+months.stream().map(String::valueOf).collect(Collectors.joining(","))+System.getProperty("line.separator")); }else{ System.out.println("从"+handelYear(month,i)+"至"+handelYear(handelYear(month,i),11)+"的连续12个月的总里程:"+sum+"公里,平均每月行驶:"+sum/k+"公里,其中"+maxYear+"是单月最大行驶:"+max+"公里,"+minYear+"是单月最小行驶公里数:"+min+"公里"); stringBuffer.append("从"+handelYear(month,i)+"至"+handelYear(handelYear(month,i),11)+"里程详情"+months.stream().map(String::valueOf).collect(Collectors.joining(","))+System.getProperty("line.separator")); } sum=0; k=0; break; }else if (k<12&&j==length-1){
if (j<12){ System.out.println("从"+handelYear(month,i)+"至"+handelYear(month,length-1)+"的连续"+ k+"个月的总里程:"+sum+"公里,平均每月行驶:"+sum/(k)+"公里,剩余的"+(12-k)+"个月內请控制在"+(count-sum)+"公里内,其中"+maxYear+"是单月最大行驶:"+max+"公里,"+minYear+"是单月最小行驶公里数:"+min+"公里"); //System.out.println("从"+month+"至"+handelYear(month,11)+"里程详情"+months.stream().map(String::valueOf).collect(Collectors.joining(","))); stringBuffer.append("从"+handelYear(month,i)+"至"+handelYear(month,length-1)+"里程详情"+months.stream().map(String::valueOf).collect(Collectors.joining(","))+System.getProperty("line.separator")); }else{ System.out.println("从"+handelYear(month,i)+"至"+handelYear(handelYear(month,i),k-1)+"的连续"+ k+"个月的总里程:"+sum+"公里,平均每月行驶:"+sum/(k)+"公里,剩余的"+(12-k)+"个月內请控制在"+(count-sum)+"公里内,其中"+maxYear+"是单月最大行驶:"+max+"公里,"+minYear+"是单月最小行驶公里数:"+min+"公里"); stringBuffer.append("从"+handelYear(month,i)+"至"+handelYear(handelYear(month,i),k-1)+"里程详情"+months.stream().map(String::valueOf).collect(Collectors.joining(","))+System.getProperty("line.separator")); } sum=0; k=0; break;
} } } System.out.println(stringBuffer.toString()); } } public static String handelYear(String month,int length){ int year=Integer.valueOf(month.substring(0,4)); String mo=month.substring(4,6); int mon=0; if (mo.startsWith("0")){ mon=Integer.valueOf(month.substring(5,6)); }else{ mon=Integer.valueOf(month.substring(4,6)); } mon=mon+length; int j=mon/12; if (mon>12){ year=year+j; mon=mon-12*j; } String yearmon=null; if (mon>9){ yearmon=String.valueOf(year)+String.valueOf(mon); }else{ if (mon==0){ mon=mon+1; } yearmon=String.valueOf(year)+"0"+String.valueOf(mon); } return yearmon; } }