为了比亚迪的电池终身质保,写了个简单算法,计算任意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)+"公里,其中"+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)+"公里,其中"+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;
}
}
