实现相同的结果但使用不同类型的循环
achieving the same result but using a different kind of loop
因此此方法执行每日检查,将一天添加到 displayedDays 以确定项目的新鲜度,因此该方法添加一天然后通过调用方法 isRotten() 检查它是否已腐烂以及是否已腐烂它删除了数组
for (int i = 0; i < numItems; i++) {
items[i].displayedDays++;
}
for (int i = 0; i < numItems;) {
if (items[i].isRotten()) {
if (removeItem(i)) {
if (i > 0) {
i--;
}
continue;
}
}
i++;
}
这也是使用相同循环和 if 的另一种方法
所以这个方法应该从数组中删除糖果(数组有两种类型的项目面包和糖果)
double totalSweetsPrice = 0;
int count = numItems;
for (int i = 0; i < count;) {
Item item = items[i];
if (item instanceof Sweet) {
totalSweetsPrice += item.getPrice();
if (removeItem(i)) {
if (i > 0) {
i--;
}
continue;
}
}
i++;
}
我不明白中间部分,希望有一个不同的循环或其他东西,同时得到相同的结果
每日检查方法就是这样写的
for (int i = 0; i < numItems; i++) {
items[i].displayDays++ ;
if(items[i].isRotten())
removeItem(i); }
输出错误
大部分代码源于您更改正在枚举的数组中的元素位置这一事实。一种更适合删除元素的不同类型的数据结构,例如链表,将大大简化您的代码并提高效率。
正如 FooBar 所说,您不能既迭代 ArrayList 又从同一个 ArrayList 中删除项目。所以你需要把条件分开。例如:
for (int i = 0; i < items.size(); i++) {
items.get(i).displayedDays++;
}
int i = 0:
while (i < items.size()) {
if(items.get(i).isRotten()) {
items.remove(i);
// don’t increment our counter here because now
// we’ve changed what object exists in the ArrayList
// at this index position
} else {
// only increment our counter if the item in that index
// is good, so we can now move on to check the next item
i++;
}
}
为什么不使用ArrayList.removeAll(Collection c)? This way, you can create a Collection,例如ArrayList,遍历原始列表,将所有烂项目添加到新集合中,然后在遍历整个列表后对原始ArrayList 调用removeAll?这样,您就不必担心在遍历列表时修改列表。
因此此方法执行每日检查,将一天添加到 displayedDays 以确定项目的新鲜度,因此该方法添加一天然后通过调用方法 isRotten() 检查它是否已腐烂以及是否已腐烂它删除了数组
for (int i = 0; i < numItems; i++) {
items[i].displayedDays++;
}
for (int i = 0; i < numItems;) {
if (items[i].isRotten()) {
if (removeItem(i)) {
if (i > 0) {
i--;
}
continue;
}
}
i++;
}
这也是使用相同循环和 if 的另一种方法 所以这个方法应该从数组中删除糖果(数组有两种类型的项目面包和糖果)
double totalSweetsPrice = 0;
int count = numItems;
for (int i = 0; i < count;) {
Item item = items[i];
if (item instanceof Sweet) {
totalSweetsPrice += item.getPrice();
if (removeItem(i)) {
if (i > 0) {
i--;
}
continue;
}
}
i++;
}
我不明白中间部分,希望有一个不同的循环或其他东西,同时得到相同的结果
每日检查方法就是这样写的
for (int i = 0; i < numItems; i++) {
items[i].displayDays++ ;
if(items[i].isRotten())
removeItem(i); }
输出错误
大部分代码源于您更改正在枚举的数组中的元素位置这一事实。一种更适合删除元素的不同类型的数据结构,例如链表,将大大简化您的代码并提高效率。
正如 FooBar 所说,您不能既迭代 ArrayList 又从同一个 ArrayList 中删除项目。所以你需要把条件分开。例如:
for (int i = 0; i < items.size(); i++) {
items.get(i).displayedDays++;
}
int i = 0:
while (i < items.size()) {
if(items.get(i).isRotten()) {
items.remove(i);
// don’t increment our counter here because now
// we’ve changed what object exists in the ArrayList
// at this index position
} else {
// only increment our counter if the item in that index
// is good, so we can now move on to check the next item
i++;
}
}
为什么不使用ArrayList.removeAll(Collection c)? This way, you can create a Collection,例如ArrayList,遍历原始列表,将所有烂项目添加到新集合中,然后在遍历整个列表后对原始ArrayList 调用removeAll?这样,您就不必担心在遍历列表时修改列表。