这是我第一次在这个网站上询问,并明天参加我的考试,所以试着让我的代码变得更好!我将链接整个班级(即使其他3个班级)。
这是方法,我无法从lagerplass
删除对象,将其添加到hk.addVarer
作品中。所有这一切背后的想法是lagerplass
是商品存储在商店(butikk),所以当人们从商店购买商品并将其放入handlekurv
时,商品会从商店中删除(lagerplass):
public void leggTilHandlekurv(String varenavn)
{
for (Varer a : lagerplass)
{
if (a.getVarenavn().equals(varenavn))
{
hk.addVarer(a);
lagerplass.remove(varenavn);
}
}
}
这是整个Butikk课程的代码
public class Butikk
{
// instance variables - replace the example below with your own
public ArrayList<Varer> lagerplass;
Handlekurv hk = new Handlekurv();
/**
* Constructor for objects of class Butikk
*/
public Butikk()
{
// initialise instance variables
lagerplass = new ArrayList<Varer>();
}
/**
* An example of a method - replace this comment with your own
*
* @param y a sample parameter for a method
* @return the sum of x and y
*/
public void nyHeadset(String lyd, String vare,int pris, String varenavn )
{
// put your code here
Headset nyHeadset = new Headset ( lyd, vare, pris, varenavn);
lagerplass.add(nyHeadset);
}
public void nyMus(String vare, int pris, String varenavn, int dpi)
{
Mus nyMus = new Mus(vare, pris, varenavn, dpi);
lagerplass.add(nyMus);
}
public void printLagerplass()
{
for (Varer vare : lagerplass)
{
vare.printDetails();
}
}
public int lagerplassSize()
{
return lagerplass.size();
}
public void fjernHeleLagerplass()
{
lagerplass.clear();
}
public void leggTilHandlekurv(String varenavn)
{
Iterator<Varer> iterator = lagerplass.iterator();
while(iterator.hasNext()) {
Varer a = iterator.next();
if (a.getVarenavn().equals(varenavn)) {
iterator.remove();
hk.addVarer(a);
}
}
}
public void printHeleHandlekurven()
{
hk.printHandlekurv();
}
}在此处输入代码
这是整个Varer类的kode
在这里输入代码 公共阶层Varer { //代表工作者merke og pris til en vare。 私人String vare; 私人String merke; 私人监狱; private String varenavn;
/**
* Constructor for klassen Varer
*/
public Varer(int pris, String varenavn, String vare)
{
merke = "Razor";
this.pris = pris;
this.varenavn = varenavn;
this.vare = vare;
}
public String getMerke()
{
return merke;
}
public int getPris()
{
return pris;
}
public String getVarenavn()
{
return varenavn;
}
public String getVare()
{
return vare;
}
public String getDetails()
{
return vare + ", " + merke +" " + varenavn + ", "+pris + " kr.";
}
public void printDetails()
{
System.out.println(vare + ", " + merke +" "+ varenavn + ", "+pris + " kr.");
System.out.println();
}
答案 0 :(得分:3)
在迭代它时从集合中删除一个项应该产生ConcurrentModificationException
,我认为这是你得到的,这就是你无法从中删除的原因。
要在迭代集合时删除元素,您需要获取该集合的迭代器并通过集合的迭代器将其删除。
public void leggTilHandlekurv(String varenavn) {
Iterator<Varer> iterator = lagerplass.iterator();
while(iterator.hasNext()) {
Varer a = iterator.next();
if (a.getVarenavn().equals(varenavn)) {
iterator.remove();
hk.addVarer(a);
}
}
}
答案 1 :(得分:0)
Iterator.remove
是在迭代期间修改集合的唯一安全方法; 如果在迭代进行过程中以任何其他方式修改基础集合,则行为未指定。
for (Iterator<Varer> iterator = lagerplass.iterator(); iterator.hasNext();) {
Varer a = iterator.next();
if (a.getVarenavn().equals(varenavn))
{
hk.addVarer(a);
// Remove the current element from the iterator and the list.
iterator.remove();
}
}
来源:
http://docs.oracle.com/javase/tutorial/collections/interfaces/collection.html
答案 2 :(得分:0)
这是因为在迭代时不能修改集合。使用带有indeces的for循环或集合上的Iterator并调用remove方法。