首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >走出BoundsException

走出BoundsException
EN

Stack Overflow用户
提问于 2017-10-03 15:58:40
回答 2查看 67关注 0票数 0

我必须创建一个程序,该程序将在人员列表中找到commonDates。

代码语言:javascript
运行
复制
public DateSet commonDates() {
        if (persons.size() >= 2) {
            DateSet Cdates = 
persons.get(0).getDateSet().intersection(persons.get(1).getDateSet());
            for (int i = 2; i < persons.size(); i++) {
                Cdates = Cdates.intersection(persons.get(i).getDateSet());
            }
            return Cdates;
        }
        else {
            throw new IllegalArgumentException();
       }
    }

以下是相交方法:

代码语言:javascript
运行
复制
public DateSet intersection(DateSet other) {
    DateSet dates2 = (DateSet) other;
    DateSet NewDateSet = new DateSet();
    for(int i = 0; i < dates.size(); i++) {
        if (dates.get(i).equals(dates2.dates.get(i))) {
            NewDateSet.add(dates.get(i));
        }
    }
    return NewDateSet;
}

commonDates的Junit测试如下所示

代码语言:javascript
运行
复制
@Test
public void testCommonDates() {
    DatePicker persons = new DatePicker();
    List<Date> dates = new ArrayList<Date>();
    Person P1 = new Person("Joop");
    Person P2 = new Person("Joopie");
    Person P3 = new Person("Jaapie");
    Date D1 = new Date("maandag");
    Date D2 = new Date("dinsdag");
    dates.add(D1);
    persons.addPerson(P1);
    persons.addPerson(P2);
    P1.add(D1);
    P2.add(D1);
    P3.add(D1);
    P1.add(D2); 
    assertThat("commonDates should return dates all persons have in common", persons.commonDates(), equalTo(dates));
}

以下是我收到的错误消息

提前感谢

EN

回答 2

Stack Overflow用户

发布于 2017-10-03 16:14:33

检查循环

代码语言:javascript
运行
复制
for (int i = 2; i < persons.size(); i++) {
                Cdates = Cdates.intersection(persons.get(i).getDateSet());
}

您的for-loop变量i从初始值2开始,它是递增的,而它应该是递减的,对吗?

票数 1
EN

Stack Overflow用户

发布于 2017-10-03 16:55:27

我建议为public DateSet intersection(DateSet other)方法创建一个单独的测试,因为这是您的问题所在。看起来有一个问题,因为它要求集合的长度相同。

您可能应该使用像这样的东西

代码语言:javascript
运行
复制
Set<Date> intersection = new HashSet<>(dates1);
intersection.retainAll(dates2);

而不是使用自定义数据类型。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46539780

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档