Java 这段代码会输出相同的结果吗?
我正在复习AP计算机科学考试,我写的代码和答案有点不同。您认为您可以检查每个输出是否相同吗 目标:从CookieOrder ArrayList订单中删除特定类型的Cookie订单,并返回已删除的框数。 请假设所有方法都按照建议工作 答复: 返回框被移除; } 我说: 这还能用吗?或者,如果你想给我打分,这里是(问题1,B部分)。我感谢你的帮助;明天就要考试了,我非常紧张 这还能用吗 您的代码将因出现Java 这段代码会输出相同的结果吗?,java,loops,Java,Loops,我正在复习AP计算机科学考试,我写的代码和答案有点不同。您认为您可以检查每个输出是否相同吗 目标:从CookieOrder ArrayList订单中删除特定类型的Cookie订单,并返回已删除的框数。 请假设所有方法都按照建议工作 答复: 返回框被移除; } 我说: 这还能用吗?或者,如果你想给我打分,这里是(问题1,B部分)。我感谢你的帮助;明天就要考试了,我非常紧张 这还能用吗 您的代码将因出现ConcurrentModificationException而失败,因为您在迭代集合时正在修改集
ConcurrentModificationException
而失败,因为您在迭代集合时正在修改集合
模型答案通过使用索引而不是迭代器来避免这种情况。。。从名单的末尾到最前面
另一种避免CME问题的方法是使用显式迭代器,并使用iterator.remove()
方法进行删除。(这将适用于ArrayList
或LinkedList
,但由于某些原因,一些更奇特的列表类型可能会返回一个不支持remove()
的迭代器。)
这还能用吗
您的代码将因出现ConcurrentModificationException
而失败,因为您在迭代集合时正在修改集合
模型答案通过使用索引而不是迭代器来避免这种情况。。。从名单的末尾到最前面
另一种避免CME问题的方法是使用显式迭代器,并使用iterator.remove()
方法进行删除。(这将适用于数组列表
或链接列表
,但一些更奇特的列表类型可能会返回一个迭代器
,该迭代器由于某些原因不支持删除()
),这将抛出一个ConcurrentModificationException
,因为您在遍历列表时正在从列表中删除一个项目
一种安全的方法是使用迭代器。是所有集合(包括ArrayList
s)必须提供的内置类。迭代器为您提供了一种在列表上进行迭代的方法(很像您使用的for
-循环),但也允许您从集合中安全地删除元素
首先从ArrayList
的iterator
方法获取迭代器。与ArrayList
类似,Iterator
是通用的–也就是说,它是迭代器
,而不仅仅是迭代器
Iterator<CookieOrder> iterator = order.iterator();
特别针对您的问题:
Iterator<CookieOrder> iterator = order.iterator();
while (iterator.hasNext()) {
// Get the boxes cookie order.
CookieOrder boxes = iterator.next();
// Perform the same check as before.
String type = boxes.getVariety();
int totalBoxesCookieOrder = boxes.getNumBoxes();
if(type.equals(cookieType))
{
totalRemoved += totalBoxesCookieOrder;
// Here's where we want to remove it.
//
// Instead of calling order.remove, we can use the
// "remove" method of the iterator. This is safe.
iterator.remove();
}
}
Iterator Iterator=order.Iterator();
while(iterator.hasNext()){
//把盒子拿出来点饼干。
CookieOrder Box=iterator.next();
//执行与之前相同的检查。
字符串类型=box.getVariation();
int totalBoxesCookieOrder=box.getNumBoxes();
if(type.equals(cookieType))
{
totalRemoved+=TotalBoxesTookeOrder;
//这是我们想要移除它的地方。
//
//我们可以使用
//迭代器的“remove”方法。这是安全的。
iterator.remove();
}
}
评分标准(B部分):
- +1/2用于访问
this.orders的元素(虽然是隐式的,但带有框
)
- +1/2用于将
cookieVar
(cookieType
)与GetVariation()的结果进行比较
- +1用于所有元素的比较,无越界电位
- 没有要删除的点数(接下来的三个条件,值两个点数),因为它将引发异常
- +1/2用于声明和初始化
totalRemoved
- +1/2用于
getNumBoxes
- +用
+=
正确累加总数的1/2(尽管他们可能会选择不为ConcurrentModificationException
给出这一点,但根据我的经验,他们只会对错误惩罚一次)
- +1/2用于正确返回
总分:4/6
记住,那个分数只适用于那个部分;外推,你的问题分数可能是6/9,这已经高于平均分数(5.46)。还要记住,这些不是线性分级的;i、 例如,答对50%的问题是很好的
祝你考试顺利 正如其他人所提到的,这将抛出一个ConcurrentModificationException
,因为您在迭代列表时正在从列表中删除一个项目
一种安全的方法是使用迭代器。是所有集合(包括ArrayList
s)必须提供的内置类。迭代器为您提供了一种在列表上进行迭代的方法(很像您使用的for
-循环),但也允许您从集合中安全地删除元素
首先从ArrayList
的iterator
方法获取迭代器。与ArrayList
类似,Iterator
是通用的–也就是说,它是迭代器
,而不仅仅是迭代器
Iterator<CookieOrder> iterator = order.iterator();
特别针对您的问题:
Iterator<CookieOrder> iterator = order.iterator();
while (iterator.hasNext()) {
// Get the boxes cookie order.
CookieOrder boxes = iterator.next();
// Perform the same check as before.
String type = boxes.getVariety();
int totalBoxesCookieOrder = boxes.getNumBoxes();
if(type.equals(cookieType))
{
totalRemoved += totalBoxesCookieOrder;
// Here's where we want to remove it.
//
// Instead of calling order.remove, we can use the
// "remove" method of the iterator. This is safe.
iterator.remove();
}
}
Iterator Iterator=order.Iterator();
while(iterator.hasNext()){
//把盒子拿出来点饼干。
CookieOrder Box=iterator.next();
//执行与之前相同的检查。
字符串类型=box.getVariation();
int totalBoxesCookieOrder=box.getNumBoxes();
if(type.equals(cookieType))
{
totalRemoved+=TotalBoxesTookeOrder;
//这是我们想要移除它的地方。
//
//我们可以使用
//迭代器的“remove”方法。这是安全的。
iterator.remove();
}
}
评分标准(B部分):
Iterator<CookieOrder> iterator = order.iterator();
while (iterator.hasNext()) {
// Get the boxes cookie order.
CookieOrder boxes = iterator.next();
// Perform the same check as before.
String type = boxes.getVariety();
int totalBoxesCookieOrder = boxes.getNumBoxes();
if(type.equals(cookieType))
{
totalRemoved += totalBoxesCookieOrder;
// Here's where we want to remove it.
//
// Instead of calling order.remove, we can use the
// "remove" method of the iterator. This is safe.
iterator.remove();
}
}
Iterator<CookieOrder> it = orders.iterator();
while (it.hasNext()) {
CookieOrder cand = it.next(); // 'candidate' for consideration/ removal
if (cand.getVariety. equals( type)) {
// Remove; iterator.remove() handles the loop index correctly.
boxesRemoved += cand.getNumBoxes();
it.remove();
}
}