我需要在Java中完成有关ArrayList和泛型类型的作业。
我有2节课: ->双门轿跑车 -> TableauPartiel
CoupeDeA只是一个描述从哪里剪切数组的地方。 (它仅包含两个私有整数变量“ begin”和“ end”)
TableauPartiel是ArrayList所在的类。
我的问题是我需要像这样在TableauPartiel中创建一个方法:
public TableauPartiel<E> coupe(CoupeDeA coupe)
返回的TableauPartiel必须是我的初始TableauPartiel的引用。示例:
Integer[] arr = {8,7,6,5};
TableauPartiel<E> tab = new TableauPartiel<>(arr);
TableauPartiel<E> tab2 = tab.coupe(1,3);
tab2.set(1,45);
该代码应该在我的tab2的索引1处设置45,同时在索引2处设置45。
但是我尝试了许多不同的方法,并且设法获得了子列表,但是它没有指向我的原始ArrayList。
例如,我尝试过这样的事情:
private ArrayList<E> tableau;
...
public TableauPartiel<E> coupe(Coupe coupe)
throws IndexOutOfBoundsException {
if (coupe.getBegin() >= 0 && coupe.getEnd() <= tableau.size()) {
TableauPartiel<E> tab = new TableauPartiel<>((E[]) new Object[coupe.getEnd()-coupe.getBegin()]);
for (int i = 0; i < coupe.getEnd()-coupe.getBegin(); ++i) {
tab.set(i, this.get(coupe.getBegin()+i));
}
return tab;
} else {
throw new IndexOutOfBoundsException();
}
}
如何获取引用其原始ArrayList的子列表?
我已经找到了使用subList方法并将ArrayList的签名切换为List的代码的解决方案,但是我的老师最终不希望我们使用subList。 这是我的带有subList方法的代码:
TableauPartiel<E> tab;
if (coupe.getDebut() >= 0 && coupe.getFin() <= taille()) {
if (coupe.getFin() == -1)
tab = new TableauPartiel<>(tableau.subList(coupe.getDebut(),taille()));
else
tab = new TableauPartiel<>(tableau.subList(coupe.getDebut(),coupe.getFin()));
return tab;
} else {
throw new IndexOutOfBoundsException();
}
}
答案 0 :(得分:0)
首先要注意几件事:
Coupe
是如何工作的(0
是法定最低电话号码还是1
?),但是coupe.getEnd() <= tableau.size()
可能会失控< / li>
现在我对解决方案的建议:
我建议您修改TableauPartiel
类,使其除了已有start
引用之外,还具有end
和private ArrayList<E> tableau;
整数字段。也许添加一个新的“副本构造函数”来接受一个实例
TableauPartiel
(您可以从中复制对tableau
的引用)和两个int
值,指示您可以使用原始tableau
的哪一部分(此处的技巧还在于查看{您要“列出”对象的{1}}和start
值)。这样,当您调用end
时,就可以检查输入数字的有效性(就像您已经做的那样),只需返回一个引用了#coupe
和方法的新TableauPartiel
对象参数-this
和start
的值。将end
和start
的索引操作逻辑添加到end
拥有的任何方法中,您应该会做得很好。