【问题标题】:fill an array in imbricated for loops在叠瓦状for循环中填充数组
【发布时间】:2014-01-09 19:15:42
【问题描述】:

我有 2 个成员数组 - 一个已填充,另一个未填充。 我有一个包含所有成员的列表。 我需要用不在第一个数组中的成员填充第二个数组。

我试过这个,但我得到了一个出站异常(我对纯算法非常糟糕:()

Member[] busyMember= getBusyMember();
List<Team> allMembers= new ArrayList<Team>(jsonParsed.getAllElement());
Member[] availableMembers= new Member[allMembers.size()-busyMembers.length];


            for (int i= 0; i<allMembers.size(); i++) {
                Team t = allMembers.get(i);
                long memberId = t.getMember().getId();
                for (int j= 0 ; j<busyMember.length; j++) {
                    if (memberId != busyMember[j].getId()) {
                        availableMembers[i]=t.getMember();
                        //outboundexception here

                    }
                }

            }

非常感谢您的帮助

【问题讨论】:

  • 为什么是数组?使用集合和列表,您将不会遇到这些问题......每一秒的集合问题似乎都与数组有关,而标准集合会将问题变成微不足道的问题。叹息....您提出问题的方式呼唤“不要使用数组”
  • @OlegS。我知道用集合而不是数组来处理要容易得多,但在我的情况下,这是我必须尊重的指令:(

标签: java arrays for-loop


【解决方案1】:

我只会使用ListsremoveAll 方法。如果你真的需要一个数组,你可以随时在结果列表上调用方法toArray(T[])

List<Member> busyMember= Arrays.asList(getBusyMember());
List<Team> allMembers= new ArrayList<Team>(jsonParsed.getAllElement());
List<Member> availableMembers = new ArrayList<Member>();
for(Team t : allMembers){
    availableMembers.add(t.getMember());
}
availableMembers.removeAll(busyMember);

【讨论】:

  • 感谢您的帮助。不幸的是,我必须使用数组,因为这是给我的指令。但我会选择你的解决方案并调用 toArray 方法
【解决方案2】:

假设allMembers的元素比busyMember多,你只需要修改语句

for (int i= 0; i<allMembers.size(); i++)

for (int i= 0; i<availableMembers.size(); i++)

为了保持一致性,您还需要进行其他更改,但这是另一个讨论 :-)

【讨论】:

  • 虽然这将解决当前的异常,但这将导致另一个逻辑问题。
  • @PNS 谢谢你的帮助。确实,这解决了我的问题,但它不会读取 allMembers 数组的所有数据(因为它仅限于 availableMembers.size())
  • 这意味着您需要按照邹邹的建议进行修改,或者手动跟踪正确的索引值。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-04-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-11-21
  • 2022-09-29
相关资源
最近更新 更多