【问题标题】:Void not allowed here. Changing element in ArrayList Java此处不允许作废。更改 ArrayList Java 中的元素
【发布时间】:2015-08-02 03:37:23
【问题描述】:

我遇到了一些本应直截了当的问题。尝试使用方法更改 ArrayList 中的元素时,我不断收到“此处不允许无效”错误

public static void editDialog(int pos) 
{
    if(parcelList.get(pos).type==1)
    {
        JTextField field1 = new JTextField(""+parcelList.get(pos).idNum);
        JTextField field2 = new JTextField(""+parcelList.get(pos).zone);
        JTextField field3 = new JTextField(""+parcelList.get(pos).getWidth());
        JTextField field4 = new JTextField();
        JTextField field5 = new JTextField(""+parcelList.get(pos).getHeight());

        Object[] fields = 
        {
            "Please Enter New Box Details:\n", "\n",
            "Box ID:", field1,
            "Delivery Zone:", field2,
            "Width:", field3,
            "Length:", field4,
            "Height:", field5
        };

        JOptionPane.showConfirmDialog(null, fields, "Amend Box Details:",
                JOptionPane.OK_CANCEL_OPTION);
        System.out.println(field1.getText() + "" + field2.getText() + "" + field3.getText() + "" + field4.getText()
                + "" + field5.getText());

        String getZone = field2.getText();
        int id = Integer.parseInt(field1.getText());
        char zone = getZone.charAt(0);
        int width = Integer.parseInt(field3.getText());
        int length = Integer.parseInt(field4.getText());
        int height = Integer.parseInt(field5.getText());

        parcelList.set(pos,Parcel.newParcel.addBox(id, zone, width, length, height));

    }

addBox 构造函数如下:

public void addBox(int id, char z, int w, int l, int h)
{
    parcelList.add(new Box(id,z,w,l,h));
}

我需要做的就是更改列表中特定位置的值。有谁知道我为什么会收到这个错误?

包裹类

protected static ArrayList<Parcel> parcelList;
protected static ParcelList newParcel = new ParcelList();

public Parcel(int id, char z) 
{
    this.idNum = id;
    this.zone = z;
}

//default contstructor
public Parcel()
{
    this.idNum=0;
    this.zone='z';
    this.charge=0;  
    this.type=0;
    this.i=new ImageIcon("images/nullParcel.jpg");   
}

public double getCharge()
{
    return charge;
}

public boolean isLarge()
{
    return false;
}

public ImageIcon getImage()
{
    return i;     
}

@Override
public String toString() 
{
    return "Parcel{" + "idNum=" + idNum + ", charge=" + charge + ", zone=" + zone + '}';
}

public void setIdNum(int idNum) {
    this.idNum = idNum;
}

public void setZone(char zone) {
    this.zone = zone;
}

ParcelList 类:

ParcelList()
{
    parcelList = new ArrayList<Parcel>();
}

public void addBox(int id, char z, int w, int l, int h)
{
    parcelList.add(new Box(id,z,w,l,h));
}

public void removeItem(int b)
{
    parcelList.remove(b);
}

public void addTube(int id, char z, int l)
{
   parcelList.add(new Tube(id,z,l));
}

public void addEnvelope(int id, char z, char s)
{
    parcelList.add(new Envelope(id, z, s));
}
public void printString()
{
    for(Parcel p:parcelList)
    {
        System.out.println(p.toString()+"");
    }
}   


public boolean isFull()
{
    if(parcelList.size()<=11)
    {
        return false;
    }
    return true;
}

public void clearList()
{
    parcelList.clear();
}

public String listSize()
{
    return ""+parcelList.size();
}

public boolean isEmpty()
{
    return this.isEmpty();
}

@Override
public String toString() {
    return "AssetList{" + "assetList=" + parcelList + '}';
}
}

【问题讨论】:

  • 你认为set 是做什么的?你认为应该采取什么论据?你为什么这么认为?你认为这个错误意味着什么?
  • 我希望这个答案对您有所帮助。 stackoverflow.com/questions/15019723/…
  • 我认为 .set 方法会将当前元素设置为我传入的任何新元素?至于错误我不知所措,这就是我在这里发布的原因。
  • addBox 属于哪个类? ParcelList的代码是什么?
  • addBox 属于 ParcelList,我编辑过原帖。

标签: java methods arraylist constructor void


【解决方案1】:
Parcel.newParcel.addBox(id, zone, width, length, height) 

需要为第二个参数返回一些东西

 parcelList.set(pos,Parcel.newParcel.addBox(id, zone, width, length, height));

【讨论】:

    【解决方案2】:

    您的parcelList 是这样定义的:

    protected static ArrayList<Parcel> parcelList;
    

    这意味着它是一个ArrayList。现在,ArrayList 中的方法set,如果您查看documentation,需要一个参数是整数(位置),另一个是ArrayList 的基本类型 - 在您的情况下, Parcel

    您的posint,这很好,但是您在Parcel 参数中传递了什么?

    parcelList.set(pos,Parcel.newParcel.addBox(id, zone, width, length, height));
    

    您正在传递表达式Parcel.newParcel.addBox(id, zone, width, length, height) 的结果。所以这是对您的 addBox 方法的调用。

    该方法的定义如下:

    public void addBox(int id, char z, int w, int l, int h)
    

    调用方法的表达式被认为是为该方法定义的类型。您的方法被定义为返回 void。这意味着它实际上并没有返回任何东西void 不是 Parcel,因此您会收到该错误。

    如果您想更改列表中该位置的内容,您必须传递一个实际返回某种Parcel 的表达式。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-09-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-07-22
      • 1970-01-01
      相关资源
      最近更新 更多