当前位置: 首页 > 知识库问答 >
问题:

我如何成功地遍历一个预填充的ArrayList以找到每个连续元素的差异并将其打印出来?

田翔
2023-03-14
public class AccumulatedData {

    public static void main(String args[]) {

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

        weights.add(145.0);
        weights.add(146.5);
        weights.add(146.5);
        weights.add(147.0);
        weights.add(146.0);
        weights.add(148.0);
        weights.add(148.5);

        ArrayList<Double> printWeightChanges = getWeightChanges(weights);
        System.out.println(weights);
    }

    public static ArrayList<Double> getWeightChanges(ArrayList<Double> weights) {

        for (int i = 0; i < weights.size() - 1; i++) {
            weights.set(i, (weights.get(i + 1) - weights.get(i)));
        }

        return weights;
    }

}

上面我尝试遍历数组列表的所有元素,并打印出它们各自的连续差值(取数组列表的索引1,减去索引零)。但是,我的for循环似乎遍历所有元素,打印它们各自的差值,然后将初始数组的最后一个数与所有差值一起添加到新数组列表的末尾。我怎么解决这个?

ublic类PartA{

public static void main(String args[]) {


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


    weights.add(145.0);
    weights.add(146.5);
    weights.add(146.5);
    weights.add(147.0);
    weights.add(146.0);
    weights.add(148.0);
    weights.add(148.5);


    ArrayList<Double> printWeightChanges = getWeightChanges(weights);

新尝试:

}

/**
 * Part a
 */

public static ArrayList<Double> getWeightChanges(ArrayList<Double> weights) {

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

    for (int i = 0; i < weights.size() - 1; i++) {
        weightDifferences.add(i, weights.get(i + 1) - weights.get(i));

    }

    System.out.println(weightDifferences);
    return weightDifferences;


    }

}

这会产生各种错误:

线程“main”java.lang.IndexOutoFboundsException:索引145超出长度6的界限,位于java.base/jdk.internal.util.preconditions.OutoFbounds(preconditions.java:64)位于java.base/jdk.internal.util.preconditions.OutoFboundscheckindex(preconditions.java:70)位于java.base/jdk.internal.util.preconditions.CheckIndex(preconditions.java:248)位于

从我的尝试中输出的我的尝试代码

共有1个答案

慕容宏毅
2023-03-14

这是因为您定义循环限制的方式:

for (int i = 0; i < weights.size() - 1; i++)

该循环比数组中的元素(i )少更改一个元素。

我建议为差异创建另一个列表,如下所示:

public static List<Double> getWeightChanges(ArrayList<Double> weights) {

    List<Double> diffs = new ArrayList<>();
    for (int i = 0; i < weights.size() - 1; i++) {
        diffs.add(weights.get(i + 1) - weights.get(i));
    }

    return diffs;
}

 类似资料:
  • 我的数组正在加载,并且正在按计划(按照它们在文件中出现的顺序)将卡打印出来。当我尝试在单独的方法中循环遍历arraylist以检查数据是否存在时,它只打印最后一个对象而不是每个对象。有人能告诉我为什么吗? 加载法 和getAll()方法 运行时,它只打印出.txt文件中的最后一张牌“KS”(黑桃之王)。有人能告诉我为什么会这样吗? 谢谢 }

  • 我想获取ArrayList的每个元素并使用它来创建一个字符串: 包含与ArrayList和、、中的元素一样多的单词 将为每个单词打印ArrayList中的int值 为了更清楚,我想打印一个字符串,如下所示: 不幸的是,我只从ArrayList中获取最后一个整数的值,但“元素”字数是正确的,所以我的实际结果字符串如下所示: ArrayList只有4个元素: 要生成此错误字符串,我使用以下代码: 那么

  • 问题内容: 我正在使用getifaddrs()和inet_ntop()来获取系统上的ip地址。当系统设置为IPv6时,返回的地址为简化版本(使用::表示零)。有什么办法可以将该地址扩展为完整地址吗? 这是我正在使用的代码: 代码非常感谢。 编辑: 由于这显然很难理解,我举一个例子: 如果我得到abcd:12 :: 3,我需要将其扩展为abcd:0012:0000:0000:0000:0000:00

  • 我有困难的逻辑,我有6个数字在我的arraylist和我想打印每2个元素,然后去下一个元素2。喜欢打印1,2然后3,4然后5,6。

  • 我有一个文件看起来是这样的: “葛底堡演说 亚伯拉罕·林肯

  • 设G=(V, E)是一个简单的无向图。建议一种算法,在图中找到一些简单的循环并打印它(组成它的节点序列)。如果没有这样的循环,算法就不会打印任何东西。 算法: 启动一个大小为n的数组,并为每个顶点创建一个父变量。 在随机顶点上启动DFS,对于每个访问的顶点,在数组中标记“1”,并分配其父节点。 如果在DFS运行中,下一个顶点是已标记的顶点,而不是其父顶点-图形中有一个循环,并使用其父变量向后打印所