【问题标题】:Update value in Java ArrayList更新 Java ArrayList 中的值
【发布时间】:2014-03-24 19:40:14
【问题描述】:

我不太确定这个问题的标题是什么,提前道歉。我目前在 BidderArray 中存储的值是 50。我希望能够通过在文本字段中输入的任何给定数字来增加 50。

假设我想将 10 添加到现有的 50,它将返回 60。目前,当我添加 10 时,50 被 10 替换,而不是将两者相加。我理解为什么我的代码会这样做,但找不到任何关于我应该做什么的教程或提示。

代码如下:

package abc;

import java.awt.*;


public class Funds extends javax.swing.JFrame {
    int i = 0;

    Bidder bidbal = new Bidder();
    /** Creates new form Funds */
    public Funds() {
        initComponents();
    }

    private void addActionPerformed(java.awt.event.ActionEvent evt) {
        // TODO add your handling code here:
        int f = 0;
        boolean validEntries = true;

        try{
            f = Integer.parseInt(amount.getText());
            Bidder.BidderArray.get(i).setRegFee(f);
        } catch (Exception error) {
            validEntries = false;
            amount.setBackground(Color.red);
        }
        if (validEntries) {
            Bidder.exportBidder();
            Home home = new Home();
            home.setVisible(true);
            this.dispose();
        }
    }
}

【问题讨论】:

  • 我不知道 Bidder 是什么,但您的问题的一个可能原因是,当您将 10 个元素添加到 ArrayList 时,实际上是在更改对新 ArrayList 的引用,然后将这 10 个元素添加到该新列表中。
  • @NESPowerGlove 是的,我知道这就是我目前正在做的事情,如何将 10 添加到 Bidder 数组中的现有 50?目的是增加用户拥有的代币数量。令牌总数显示在 Home 类中
  • 更多问题和您只知道的东西的参考!任何人都应该如何回答有关您未发布的代码的问题?

标签: java arraylist add


【解决方案1】:

你实际上并没有添加任何东西

Bidder.BidderArray.get(i).setRegFee(f);

显然只是将某些内容设置为f,您必须将当前值设置为get,添加到它,然后再放回去。但这只是一个猜测,因为我们没有足够的实际代码来知道你做错了什么。

【讨论】:

    【解决方案2】:

    您必须获取当前费用,添加值,然后设置费用:

    f = Integer.parseInt(amount.getText());
    Bidder.BidderArray.get(i).setRegFee( f + Bidder.BidderArray.get(i).getRegFee() );
    

    或者您可以添加一个新方法 Bidder 类来增加费用:

    class Bidder
    {
        //...
        public void addToRegFee( int amount )
        {
            this.regFee += amount;
        }
    }
    
    f = Integer.parseInt(amount.getText());
    Bidder.BidderArray.get(i).addToRegFee( f );
    

    【讨论】:

    • 谢谢@clcto,您建议的第一种方法完全符合我的预期。很抱歉对那些接我的人含糊不清。我是 Java 新手,我不完全确定要发布多少代码
    【解决方案3】:
        f = Integer.parseInt(amount.getText());
        Bidder.BidderArray.get(i).setRegFee(f);
    

    在这里,您似乎正在获取用户的输入 (f),然后将数组的元素值设置为它。听起来您想要做的是在设置之前获取该输入(f),数组的元素现有值,组合(阅读:添加)它们将元素的值转换为新的组合值。

    在伪代码中,这就是你正在做的事情:

    f := get user's input
    setValue(f)
    

    你需要做什么:

    f := get user's input
    g := get current value
    setValue(f + g)
    

    【讨论】:

      【解决方案4】:

      您必须将其添加到您的旧值中:

        //Add old to new (Unless you have a different method set for get like
        //getRegFee (Not sure how bidder is implemented))
        Bidder.BidderArray.get(i).setRegFee(Bidder.BidderArray.get(i) + f);
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-10-04
        • 1970-01-01
        • 1970-01-01
        • 2011-01-31
        • 1970-01-01
        • 1970-01-01
        • 2015-11-15
        • 1970-01-01
        相关资源
        最近更新 更多