有没有大佬帮忙写个JAVA方法

qq593467574 2018-08-08 04:06:25
业务场景如图:

左侧为客户需求的数量,每一天一个数量
中间为ERP系统实际能够供给的数量,
右侧为根据ERP系统和需求合并时候的数量,,
假如ERP系统的数量能满足客户需求,则写客户需求的数量,如果不能满足,则写实际能提供多少数量,并且在后续的日期里,要补上这部分没能提供的数量
之前没要求写备注的时候,我写了个简单的方法就能满足需求,,
但是运行了一段时间,有人怀疑数量计算的不准确,于是让我加上备注这一列..如图右侧备注那一列.
我内心是拒绝的,,但是又没办法反驳,现在心里已经有几个方法了,但是改动量都比较大,所以在论坛上求助下各位..
附我之前的简单方法..

public static void main(String[] args) {
int arr1[]={100,80,200,0,400,0,100,300}; //需求数按日期排列
int arr2[]={300,0,300,0,0,0,500,0}; //回复数按日期排列并且合并
//String arrInfo[]={"1","2","3","4","5"};
CollcetionUtil cu=new CollcetionUtil();
System.out.println("需求数="+Arrays.toString(arr1));
System.out.println("实际数="+Arrays.toString(arr2));
System.out.println("回复数="+Arrays.toString(cu.MergeArray(arr1,arr2)));
}
public int[] MergeArray(int[] arr1, int[] arr2) {

int[] arr3=new int[arr1.length];
for(int i=0;i<arr1.length;i++){
if(arr2[i]>=arr1[i]){
arr3[i]=arr1[i];
if(i<arr1.length-1){
arr2[i+1]+=arr2[i]-arr1[i];
}
}else{
arr3[i]=arr2[i];
if(i<arr1.length-1){
arr1[i+1]+=arr1[i]-arr2[i];
}
}
}
return arr3;
}



需求方法:根据左侧,中间两组数据集合生成右侧的数据集合
...全文
181 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
nayi_224 2018-08-08
  • 打赏
  • 举报
回复
	public static void main(String[] args) {
int arr1[]={100,80,200,0,400,0,100,300}; //需求数按日期排列
int arr2[]={300,0,300,0,0,0,500,0}; //回复数按日期排列并且合并
//String arrInfo[]={"1","2","3","4","5"};
//CollcetionUtil cu=new CollcetionUtil();
System.out.println("需求数="+Arrays.toString(arr1));
System.out.println("实际数="+Arrays.toString(arr2));
System.out.println("回复数=[100, 80, 200, 0, 220, 0, 280, 220]");
//System.out.println("回复数="+Arrays.toString(MergeArray(arr1,arr2)));
System.out.println("回复数=");
String[][] arr = MergeArray2(arr1,arr2);
for(String[] temp: arr){
System.out.println((temp[0] == null ? 0 : temp[0]) + " " + (temp[1] == null ? "" : temp[1]) + ",");
}

}

public static String[][] MergeArray2(int[] arr1, int[] arr2){

String[][] arr3 = new String[arr1.length][2];
int cur = 0;
int last_i = 0;
for(int i = 0; i < arr1.length; i++){
int i_val = arr1[i] + last_i;
int j = cur;
for(; j < arr2.length && j <= i && i_val > 0; j++){
arr3[i][0] = Integer.valueOf(arr3[i][0] == null ? "0" : arr3[i][0]) + (i_val > arr2[j] ? arr2[j] : i_val) + "";
if((i_val > arr2[j] ? arr2[j] : i_val) != 0)
arr3[i][1] = (arr3[i][1] == null && arr2[j] != 0 ? "" : arr3[i][1]) + "【arr2 第 " + j + " 下标:" + (i_val > arr2[j] ? arr2[j] : i_val) + "】";
int temp_j = arr2[j];
arr2[j] = i_val > arr2[j] ? 0 : arr2[j] - i_val;
i_val = i_val > temp_j ? i_val - temp_j : 0;
}
cur = arr2[j - 1] == 0 ? j : j - 1;
last_i = i_val;
}

return arr3;
}


输出:
需求数=[100, 80, 200, 0, 400, 0, 100, 300]
实际数=[300, 0, 300, 0, 0, 0, 500, 0]
回复数=[100, 80, 200, 0, 220, 0, 280, 220]
回复数=
100 【arr2 第 0 下标:100】,
80 【arr2 第 0 下标:80】,
200 【arr2 第 0 下标:120】【arr2 第 2 下标:80】,
0 ,
220 【arr2 第 2 下标:220】,
0 ,
280 【arr2 第 6 下标:280】,
220 【arr2 第 6 下标:220】,
qq593467574 2018-08-08
  • 打赏
  • 举报
回复
引用 4 楼 zhuizhuizhui666 的回复:
你是把arr1,arr2都改了啊,这两个改了,用户看着太费劲了,都不知道原始数据了,所以会提出怀疑
还是加一列简单明了


1.我实际应用场景里是把原始数据(arr1,arr2)复制一份然后才参与合并计算的..所以不必考虑这个..
2.我原来的场景里是没有右侧最后一个备注列的,我现在要加上这个,说明我回复的数量是具体取的哪条作业单的数量..

zhuizhuizhui666 2018-08-08
  • 打赏
  • 举报
回复
你是把arr1,arr2都改了啊,这两个改了,用户看着太费劲了,都不知道原始数据了,所以会提出怀疑
还是加一列简单明了
zhuizhuizhui666 2018-08-08
  • 打赏
  • 举报
回复
你为什么要改变arr2呢,这个原数据就别动态改变了
可以在备注前加一列,来显示每日的消耗结果(+-来表示)
读第二天的时候,加上前一天的剩余。
zhuizhuizhui666 2018-08-08
  • 打赏
  • 举报
回复
备注是什么作用
qq593467574 2018-08-08
  • 打赏
  • 举报
回复
+100分

50,530

社区成员

发帖
与我相关
我的任务
社区描述
Java相关技术讨论
javaspring bootspring cloud 技术论坛(原bbs)
社区管理员
  • Java相关社区
  • 小虚竹
  • 谙忆
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧