以下是数据结构import java.util.ArrayList;
import java.util.List;public class Demo { /**
 * @param args
 */
public static void main(String[] args) {

Money m1  = new Money();
m1.setStart_value(7410D);
m1.setEnd_value(10000D);
m1.setRecoup_ratio(0.5D);
Money m2  = new Money();
m2.setStart_value(10000D);
m2.setEnd_value(30000D);
m2.setRecoup_ratio(0.55D);
Money m3  = new Money();
m3.setStart_value(30000D);
m3.setEnd_value(70000D);
m3.setRecoup_ratio(0.60D);
Money m4  = new Money();
m4.setStart_value(70000D);
m4.setEnd_value(150000D);
m4.setRecoup_ratio(0.65D);
Money m5  = new Money();
m5.setStart_value(150000D);
m5.setEnd_value(300000D);
m5.setRecoup_ratio(0.70D);
List<Money> list = new ArrayList();
list.add(m1);
list.add(m2);
list.add(m3);
list.add(m4);
list.add(m5);
}}
class Money{
private Double start_value ;
private Double end_value ;
private Double recoup_ratio;
public Double getStart_value() {
return start_value;
}
public void setStart_value(Double start_value) {
this.start_value = start_value;
}
public Double getEnd_value() {
return end_value;
}
public void setEnd_value(Double end_value) {
this.end_value = end_value;
}
public Double getRecoup_ratio() {
return recoup_ratio;
}
public void setRecoup_ratio(Double recoup_ratio) {
this.recoup_ratio = recoup_ratio;
}

}以下代码是写死的,将以上数据结构带入以下代码改为动态的double cisTotalEnabledMoney = 12000D;
double cisTotalRedeemMoney = 6000D;
//ceshi
//cisTotalRedeemMoney = 2600;
Map map = new HashMap();
Double result=0d;
     Double a=0.5D;//recoup_ratio
     Double b=0.55D;
     Double c= 0.60D;
     Double d=0.65D;
     Double e=0.70D;
    
     Double a_f=7410D;//为startValue
     Double b_f=10000D;//为endValue
     Double c_f=30000D;
     Double d_f=70000D; 
     Double e_f=150000D;
     Double f_d=300000D;
    
     if(cisTotalEnabledMoney>a_f && cisTotalEnabledMoney<=b_f) //a
     {     System.out.println(map,cisTotalEnabledMoney,a_f,a,1,cisTotalRedeemMoney);
     System.out.println(map,0,0,b,2,0);
     System.out.println(map,0,0,c,3,0);
     System.out.println(map,0,0,d,4,0);
     System.out.println(map,0,0,e,5,0);
     }
     else if(cisTotalEnabledMoney>b_f && cisTotalEnabledMoney<=c_f) //b
     {
     if(cisTotalRedeemMoney<=(b_f-a_f)*a&&cisTotalRedeemMoney>=0){
     System.out.println(map,b_f,a_f,a,1,cisTotalRedeemMoney);
     System.out.println(map,cisTotalEnabledMoney,b_f,b,2,0);
     System.out.println(map,0,0,c,3,0);
         System.out.println(map,0,0,d,4,0);
         System.out.println(map,0,0,e,5,0);
     }else if(cisTotalRedeemMoney <= (((b_f-a_f)*a)+((c_f-b_f)*b))){
     System.out.println(map,b_f,a_f,a,1,(b_f-a_f)*a);
     System.out.println(map,cisTotalEnabledMoney,b_f,b,2,cisTotalRedeemMoney-(b_f-a_f)*a);
     System.out.println(map,0,0,c,3,0);
     System.out.println(map,0,0,d,4,0);
         System.out.println(map,0,0,e,5,0);
     }
     }
     else if(cisTotalEnabledMoney>c_f && cisTotalEnabledMoney<=d_f) //c
     {
     if(cisTotalRedeemMoney<=(b_f-a_f)*a&&cisTotalRedeemMoney>=0){
     System.out.println(map,b_f,a_f,a,1,cisTotalRedeemMoney);
     System.out.println(map,c_f,b_f,b,2,0);
     System.out.println(map,cisTotalEnabledMoney,c_f,c,3,0);
         System.out.println(map,0,0,d,4,0);
         System.out.println(map,0,0,e,5,0);
     }else if(cisTotalRedeemMoney <= (((b_f-a_f)*a)+((c_f-b_f)*b))){
     System.out.println(map,b_f,a_f,a,1,(b_f-a_f)*a);
     System.out.println(map,c_f,b_f,b,2,cisTotalRedeemMoney-(b_f-a_f)*a);
     System.out.println(map,cisTotalEnabledMoney,c_f,c,3,0);
     System.out.println(map,0,0,d,4,0);
         System.out.println(map,0,0,e,5,0);
     }else if(cisTotalRedeemMoney <= (((b_f-a_f)*a)+((c_f-b_f)*b)+ ((d_f-c_f)*c))){
     System.out.println(map,b_f,a_f,a,1,(b_f-a_f)*a);
     System.out.println(map,c_f,b_f,b,2,(c_f-b_f)*b);
     System.out.println(map,cisTotalEnabledMoney,c_f,c,3, cisTotalRedeemMoney-(b_f-a_f)*a - (c_f-b_f)*b);
     System.out.println(map,0,0,d,4,0);
         System.out.println(map,0,0,e,5,0);
     }
     }
     else if(cisTotalEnabledMoney>d_f && cisTotalEnabledMoney<=e_f) //d
     {
     if(cisTotalRedeemMoney<=(b_f-a_f)*a&&cisTotalRedeemMoney>=0){
     System.out.println(map,b_f,a_f,a,1,cisTotalRedeemMoney);
     System.out.println(map,c_f,b_f,b,2,0);
     System.out.println(map,d_f,c_f,c,3,0);
         System.out.println(map,cisTotalEnabledMoney,d_f,d,4,0);
         System.out.println(map,0,0,e,5,0);
     }else if(cisTotalRedeemMoney <= (((b_f-a_f)*a)+((c_f-b_f)*b))){
     System.out.println(map,b_f,a_f,a,1,(b_f-a_f)*a);
     System.out.println(map,c_f,b_f,b,2,cisTotalRedeemMoney-(b_f-a_f)*a);
     System.out.println(map,d_f,c_f,c,3,0);
         System.out.println(map,cisTotalEnabledMoney,d_f,d,4,0);
         System.out.println(map,0,0,e,5,0);
     }else if(cisTotalRedeemMoney <= (((b_f-a_f)*a)+((c_f-b_f)*b)+ ((d_f-c_f)*c))){
     System.out.println(map,b_f,a_f,a,1,(b_f-a_f)*a);
     System.out.println(map,c_f,b_f,b,2,(c_f-b_f)*b);
     System.out.println(map,d_f,c_f,c,3, cisTotalRedeemMoney-(b_f-a_f)*a - (c_f-b_f)*b);
         System.out.println(map,cisTotalEnabledMoney,d_f,d,4,0);
         System.out.println(map,0,0,e,5,0);
     }else if(cisTotalRedeemMoney <= (((b_f-a_f)*a)+((c_f-b_f)*b)+ ((d_f-c_f)*c)+((e_f-d_f)*d))){
     System.out.println(map,b_f,a_f,a,1,(b_f-a_f)*a);
     System.out.println(map,c_f,b_f,b,2,(c_f-b_f)*b);
     System.out.println(map,d_f,c_f,c,3,(d_f-c_f)*c);
     System.out.println(map,cisTotalEnabledMoney,d_f,d,4,cisTotalRedeemMoney - ((b_f-a_f)*a)-((c_f-b_f)*b)-((d_f-c_f)*c));
         System.out.println(map,0,0,e,5,0);
     }
     }
     else if(cisTotalEnabledMoney>e_f) //e
     {
     if(cisTotalRedeemMoney<=(b_f-a_f)*a&&cisTotalRedeemMoney>=0){
     System.out.println(map,b_f,a_f,a,1,cisTotalRedeemMoney);
     System.out.println(map,c_f,b_f,b,2,0);
     System.out.println(map,d_f,c_f,c,3,0);
         System.out.println(map,e_f,d_f,d,4,0);
         System.out.println(map,cisTotalEnabledMoney,e_f,e,5,0);
     }else if(cisTotalRedeemMoney <= (((b_f-a_f)*a)+((c_f-b_f)*b))){
     System.out.println(map,b_f,a_f,a,1,(b_f-a_f)*a);
     System.out.println(map,c_f,b_f,b,2,cisTotalRedeemMoney-(b_f-a_f)*a);
     System.out.println(map,d_f,c_f,c,3,0);
         System.out.println(map,e_f,d_f,d,4,0);
         System.out.println(map,cisTotalEnabledMoney,e_f,e,5,0);
     }else if(cisTotalRedeemMoney <= (((b_f-a_f)*a)+((c_f-b_f)*b)+ ((d_f-c_f)*c))){
     System.out.println(map,b_f,a_f,a,1,(b_f-a_f)*a);
     System.out.println(map,c_f,b_f,b,2,(c_f-b_f)*b);
     System.out.println(map,d_f,c_f,c,3, cisTotalRedeemMoney-(b_f-a_f)*a - (c_f-b_f)*b);
         System.out.println(map,e_f,d_f,d,4,0);
         System.out.println(map,cisTotalEnabledMoney,e_f,e,5,0);
     }else if(cisTotalRedeemMoney <= (((b_f-a_f)*a)+((c_f-b_f)*b)+ ((d_f-c_f)*c)+((e_f-d_f)*d))){
     System.out.println(map,b_f,a_f,a,1,(b_f-a_f)*a);
     System.out.println(map,c_f,b_f,b,2,(c_f-b_f)*b);
     System.out.println(map,d_f,c_f,c,3,(d_f-c_f)*c);
     System.out.println(map,e_f,d_f,d,4,cisTotalRedeemMoney - ((b_f-a_f)*a)-((c_f-b_f)*b)-((d_f-c_f)*c));
         System.out.println(map,cisTotalEnabledMoney,e_f,e,5,0);
     }else{
     System.out.println(map,b_f,a_f,a,1,(b_f-a_f)*a);
     System.out.println(map,c_f,b_f,b,2,(c_f-b_f)*b);
     System.out.println(map,d_f,c_f,c,3,(d_f-c_f)*c);
     System.out.println(map,e_f,d_f,d,4,(e_f-d_f)*d);
     System.out.println(map,cisTotalEnabledMoney,e_f,e,5,cisTotalRedeemMoney - ((b_f-a_f)*a)-((c_f-b_f)*b)-((d_f-c_f)*c)-((e_f-d_f)*d));
     }
     }
由于本人逻辑思维不是很好,想了2天也没弄出来。希望各位大虾帮忙解决下。谢谢

解决方案 »

  1.   

    你的目的不会仅仅只是想把main方法中的那个list改为手动输入,而不是定义在方法中吧?
      

  2.   

    不是哦。 是把list代入下面这段代码。亲。
      

  3.   

    这么复杂的代码应该不会只是问怎么讲list带入下面代码吧?
    如果不是这个,那看这段代码像是阶梯电价的计算算法,
    还有这个好像不全这个map创建了好像没用到,难道这个就是设计算法的写了个半死不活的算法让你改?
    还有System.out.println(map,0,0,e,5,0);这个玩意能通过编译?