当前位置:编程学习 > JAVA >>

求高手简化下面的语句

for(int i=1;i<=resus.size();i++)
{
if(i==1) {
item.setMoney1(cashBudgetService.getMoney(c.getDailyFeeProject().getId(), c.getDailyCatalog().getId(),resus.get(i-1),companyId));
}
if(i==2) {
item.setMoney2(cashBudgetService.getMoney(c.getDailyFeeProject().getId(), c.getDailyCatalog().getId(),resus.get(i-1),companyId));
}
if(i==3) {
item.setMoney3(cashBudgetService.getMoney(c.getDailyFeeProject().getId(), c.getDailyCatalog().getId(),resus.get(i-1),companyId));
}
if(i==4) {
item.setMoney4(cashBudgetService.getMoney(c.getDailyFeeProject().getId(), c.getDailyCatalog().getId(),resus.get(i-1),companyId));
}
}
--------------------编程问答--------------------   对象里面有4个不同的setMoney方法???? --------------------编程问答-------------------- switch处理吧 --------------------编程问答-------------------- 四个setMoney方法?
可以试试 只用一个setMoney方法,并添加一个参数比如flag;
setMoney方法内通过不同的flag进行处理 --------------------编程问答-------------------- 晕,你这for循环写的还有意义么。。。 --------------------编程问答-------------------- 是这个样子的  
假设某个月总共有30天,我要在前台显示有数据的这几天的记录,类似下面这个样子

我用的前台框架是jquery easyui+volicety
我是想知道 可不可以加set变量化
比如写成下面这个样子:
for(int i=1;i<=resus.size();i++) { if(i==1) { item.setMoneyi(cashBudgetService.getMoney(c.getDailyFeeProject().getId(), c.getDailyCatalog().getId(),resus.get(i-1),companyId)); }
 }

有没有类似的实现方式,变量必须要有这么多 --------------------编程问答-------------------- 我擦 不能显示图片 --------------------编程问答-------------------- 就是想知道可以不可以有类似这样的实现方式:

for(int i=1;i<=resus.size();i++) { 
if(i==1) { item.setMoneyi(cashBudgetService.getMoney(c.getDailyFeeProject().getId(),c.getDailyCatalog().getId(),resus.get(i-1),companyId)); }
 }
--------------------编程问答-------------------- 明显告诉你不可以。。。 --------------------编程问答-------------------- 用反射,方法名可以参数化 --------------------编程问答-------------------- 你那样写算什么呀?一个月有30天难道你要写30个if吗?1到30个item.setMoney???
因为每天的数据和某月某天没有任何的关系所以为什么不用一个setMoney方法呢? --------------------编程问答-------------------- 因为前台显示数据的时候必须要有参数名 --------------------编程问答-------------------- 类似这样子,field表示的是参数名称,我声明一个,我就只能显示一列

columns:[[
#set ($_index = 1)
#foreach($day in $days)
   {field:'money$_index',title:$day,width:fixWidth(0.1)},
#set($_index = $_index+1)
#end
{field:'applyMan',title:'申请人',width:fixWidth(0.1)},
{field:'memo',title:'备注',width:fixWidth(0.1)}
]]
--------------------编程问答--------------------
for(int i=1;i<=resus.size();i++) { if(i==1) { item.setMoney(cashBudgetService.getMoney(c.getDailyFeeProject().getId(), c.getDailyCatalog().getId(),resus.get(i-1),companyId),i); }
 }

这样不行吗? --------------------编程问答--------------------
for(int i=1;i<=resus.size();i++){
item.setMoney(cashBudgetService.getMoney(c.getDailyFeeProject().getId(), c.getDailyCatalog().getId(),resus.get(i-1),companyId),i);
}
--------------------编程问答-------------------- 如果不止4个setMoney,用反射吧,只有那4个的话,不如保持现状,可读性更高...更容易维护 --------------------编程问答-------------------- 这里的循环有意义? --------------------编程问答-------------------- 我猜楼主要写4块不同的内存区,在4种方法中实现的是写内存区的不同,比如起始位、写长度等。
建议楼主将内存区作为枚举,比如起始位、写长度这些作为每个枚举的属性,因为这种东西必然是静态的亘古不变的东西,枚举可以很好的处理这种情况。
方法只需要一个,增加一个参数,即内存区枚举 --------------------编程问答-------------------- 不止4个  大概30个左右 --------------------编程问答--------------------
引用 18 楼  的回复:
不止4个  大概30个左右

枚举就是用来做那些不会改变的声明的,数量不是问题 --------------------编程问答-------------------- 老夫观察你item.setMoney1的方法在循环中只是在根据i的值判断该调用哪个setMoney方法,
但是 setMoney1、setMoney2、setMoney3、setMoney4这四个方法只有resus.get(i-1) 这里用到i的值,并且操作是一样的,都是i-1。
是不是可以写成
for(int i=1;i<=resus.size();i++){
item.setMoney1(cashBudgetService.getMoney(c.getDailyFeeProject().getId(), c.getDailyCatalog().getId(),resus.get(i-1),companyId));
    }
--------------------编程问答--------------------
引用 9 楼  的回复:
用反射,方法名可以参数化

支持这个

不过我又想问,如果真的有setMoney30()或setMoney31()的话,写出这种代码的不应该直接开除么? --------------------编程问答--------------------
引用 20 楼  的回复:
老夫观察你item.setMoney1的方法在循环中只是在根据i的值判断该调用哪个setMoney方法,
但是 setMoney1、setMoney2、setMoney3、setMoney4这四个方法只有resus.get(i-1) 这里用到i的值,并且操作是一样的,都是i-1。
是不是可以写成

Java code
for(int i=1;i<=resus.size();i++){
……


我也是这么觉得滴
补充:Java ,  Java SE
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,