为了账号安全,请及时绑定邮箱和手机立即绑定

遍历列表并减去前面的元素会产生不需要的结果

遍历列表并减去前面的元素会产生不需要的结果

哔哔one 2022-06-04 17:06:53
我正在尝试用 Java 创建一个 MIDI 阅读程序。目标是保存 MIDI 文件中的音符和音符的拍号,使用每个音符的节拍并减去它们以找到值的差异,然后将它们转换为相应的时间值。我的程序的示例输出将是:Tick at @27576Channel: 2 Note = AS1 key = 34Tick at @27600Channel: 2 Note = AS1 key = 34Tick at @27624Channel: 2 Note = AS1 key = 34Tick at @29952//and so on然后刻度值将被插入到一个名为的 ArrayListnoteTimings中,而音符值将被插入到一个名为的 ArrayList 中noteKeyValues因此,在示例输出中 -noteTimings将具有以下值: [27576, 27600, 27624, 29952]现在,我想要完成的是用前一个元素减去最后一个元素(例如 29952 - 27624),然后将该值插入到新的 ArrayList 中。这将一直持续到每个元素都在 for 循环中被迭代。我的for循环:ArrayList<Integer> newNoteTimings = new ArrayList<>();for (int i = noteTimings.size() - 1; i >= 1; i--) {        for (int j = i - 1; j >= 0; j--) {            newNoteTimings.add((noteTimings.get(i) - noteTimings.get(j)));        }    }System.out.println(newNoteTimings);预期成绩:23282424实际结果:232823522376有什么我忽略的吗?任何帮助,将不胜感激!
查看完整描述

1 回答

?
largeQ

TA贡献2039条经验 获得超7个赞

您可以反转列表并从头开始执行减法,例如:


List<Integer> list = new ArrayList<>();

list.add(27576);

list.add(27600);

list.add(27624);

list.add(29952);


//Reverse the list

Collections.reverse(list);

List<Integer> result = new ArrayList<>();

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

    result.add(list.get(i) - list.get(i+1));

}

System.out.println(result);


查看完整回答
反对 回复 2022-06-04
  • 1 回答
  • 0 关注
  • 75 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信