【问题标题】:Loop through ArrayList循环遍历 ArrayList
【发布时间】:2020-06-15 12:27:06
【问题描述】:

我正在尝试遍历 ArrayList 并获取循环实例的当前值。

public ArrayList<Double> getCurrent(double x) {

    ArrayList<Double> list = new ArrayList<>(); 

    list.add(x);

    ArrayList<Double> list1 = new ArrayList<>(); 

    double sum = 0;
    for (int i = 0; i < list.size(); i++) {
        sum += list.get(i);
        list1.add(sum);
    }

    return list1;

}

这是我的 JSP 文件。请注意,循环遍历我的 ArrayList 历史记录,而我想从方法 getCurrent(double x) 解析为新的 ArrayList 的值采用 ret

<% for (history his : history) {


    double ret = his.getRet();
    double dep = his.getDeposit();
    String res = his.getRes();

    if (res.equals("Loss")) {
        ret = -dep;
         }

 %>

<h1><%=his.getCurrent(ret) %></h1>

<%} %>

这给了我一个ArrayList,它包含正确的值,但没有添加以前的值。 ArrayList 现在显示:[30.0, -5.0, 20.0] 这是正确的值。但是,我希望它显示:[30, 25, 45],以便将这些值与所有以前的值相加。

【问题讨论】:

  • 如果您完全依赖整数值,那么我会建议使用 int 列表而不是 float。我在下面添加我的答案,希望这会有所帮助
  • 谢谢。我不依赖整数值。我期待看到你的回答。提前谢谢你。
  • 我不太明白你的方法。为什么要向列表中添加单个值只是为了迭代该列表并将该值添加到 sum 中?我想这不是您想要的,所以我的猜测是在您的方法中(重新)定义 list 是您的问题。 ArrayList&lt;Double&gt; list = new ArrayList&lt;&gt;(); 很可能在您的代码中的其他位置。

标签: java jsp arraylist


【解决方案1】:

我相信你想得到一些,但你声明的变量不是最终的。每个函数调用都会重置其值,您将无法获得所需的结果。此外,声明:

    sum += list.get(i);

并不适合所有编译器和 IDE,如果处理不当,这可能会导致运行时错误并且可能包含垃圾。我更喜欢使用这个修改后的代码。

    Final double sum = 0;
    for (int i = 0; i < list.size(); i++) {
        sum = sum + list.get(i);
        list1.add(sum);
    }

【讨论】:

  • 想解释一下为什么sum = sum + list.get(i);sum += list.get(i); 更好?它基本上是相同的操作(两个操作数在自动拆箱后具有相同的类型,这将在两个语句中发生)。
【解决方案2】:

我相信您想要做的是将双精度值传递给该函数,然后该函数将返回带有计算值的列表。

每当调用函数时,根据您的代码new Arraylist is declared every time。因此,那里没有以前的值。如果您希望输出像您提到的那样,那么declare the list outside the function。一旦它在外面,就不需要一次又一次地声明它。它将保留所有以前的值,当您进行计算时,它将为您提供预期的输出。

【讨论】:

  • 谢谢。嗯我试过在函数外声明列表,但似乎没有任何效果。
  • @egx 你应该展示你在那里做了什么,因为你可能做错了(记住:如果方法遮蔽它,在方法之外声明列表将无济于事,即创建另一个具有相同的变量名称,或者如果它属于某个对象/方法,该对象/方法也只是在该单个调用期间“存在”)。
  • 能否请您发布您的整个代码。这对解决您的问题有很大帮助。
猜你喜欢
  • 1970-01-01
  • 2014-03-22
  • 2013-04-05
  • 1970-01-01
  • 1970-01-01
  • 2012-09-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多