java集合问题,请大家帮帮忙,有此类问题告诉我!谢谢

修身0 2012-02-10 06:35:24
List<List<User>> list=new ArrayList<List<User>>();

List<User> users=new ArrayList<User>();
User u1=new User();
u1.setId(1);
u1.setName("a1");
u1.setSl(10);
User u2=new User();
u2.setId(1);
u2.setName("a2");
u2.setSl(20);
User u3=new User();
u3.setId(1);
u3.setName("a3");
u3.setSl(30);

users.add(u1);
users.add(u2);
users.add(u3);
list.add(users);

List<User> users1=new ArrayList<User>();
User u4=new User();
u4.setId(2);
u4.setName("a4");
u4.setSl(50);
users1.add(u4);
list.add(users1);

List<User> users2=new ArrayList<User>();
User u5=new User();
u5.setId(3);
u5.setName("a5");
u5.setSl(10);
users2.add(u5);

User u6=new User();
u6.setId(3);
u6.setName("a6");
u6.setSl(50);
users2.add(u6);

list.add(users2);
list.add(users);
list.add(users1);
相同id的user统一的减去60,最后不高的数量减成负数,然后再放到集合中,最后的答案是
user id=1 的sl属性值为 0,0,0
user id=2 的sl属性值为 -1
user id=3 的sl属性值为 0,0
请各位大侠,帮帮解决一下,谢谢了!或是相同的问题给个思路
...全文
128 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
飞跃颠峰 2012-02-11
  • 打赏
  • 举报
回复

public void subtract(List<List<User>> list, int x) {
User user;
int sub,sl;
List<User> l;
for (int i=0; i<list.size(); i++) {
l = list.get(i);
sub = x;
for (int j=0; j<l.size(); j++) {
user = l.get(j);
sl = user.getSl();
if (j==l.size()-1) {
user.setSl(sl-sub); // 最后一个直接减,哪怕会成为负数
// if(sl<sub) user.setSl(-1); //或者在减成负数后设成-1?你举的例子是-1
} else {
user.setSl(sl>=sub?sl-sub:0);
sub = sub - sl;
if (sub<=0) break;
}
}
}
}

修身0 2012-02-11
  • 打赏
  • 举报
回复
类是与这样的算法,
id=1
a1的sl-60=-50;第一个不能出现负数,那么就为a1的数量为0,然后再判断第二个id是否为 1 如果为 1,然后再减去,直到最后没有相同的id了,那么就减成负数就可以了!如果其中一个够减得话,那么就直接跳过这一组,也就是id相同的哪一组

上面是解释,下面是需求
1、id相同的减去 60 但不是总和减去 60 ,第一个不够再找第二个然后再减,直到最后如果还不够减,那么就直接减成负数就可以了!

不知道我说明白了吗!
飞跃颠峰 2012-02-10
  • 打赏
  • 举报
回复

subtract(list,60);
public void subtract(List<List<User>> list, int x) {
for (int i=0; i<list.size(); i++) {
List<User> l = list.get(i);
int sum = 0;
for (int j=0; j<l.size(); j++)
sum += l.get(j).getSl();
int newsl = (sum-x)/l.size();
if (newsl<0) newsl=-1; //如果你是说不够扣就统一设置成-1,就加上这句
for (int j=0; j<l.size(); j++)
l.get(j).setSl(newsl);
}
}

飞跃颠峰 2012-02-10
  • 打赏
  • 举报
回复

subtract(list,60);
public void subtract(List<List<User>> list, int x) {
for (int i=0; i<list.size(); i++) {
List<User> l = list.get(i);
int sum = 0;
for (int j=0; j<l.size(); j++)
sum += l.get(j).getSl();
int newsl = (sum-x)/l.size();
for (int j=0; j<l.size(); j++)
l.get(j).setSl(newsl);
}
}

jiakai0419 2012-02-10
  • 打赏
  • 举报
回复
能简述下你的需求吗?

67,513

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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