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

lc8prwob  于 2021-07-12  发布在  Java
关注(0)|答案(1)|浏览(491)

我正在尝试用java创建一个midi阅读程序。我们的目标是使用每个音符的记号保存midi文件中的音符和音符的时间签名,并减去它们以找出值的差异,然后将它们转换为相应的时间值。
我的程序的示例输出是:

Tick at @27576
Channel: 2 
Note = AS1 key = 34
Tick at @27600
Channel: 2 
Note = AS1 key = 34
Tick at @27624
Channel: 2 
Note = AS1 key = 34
Tick at @29952
//and so on

然后将记号值插入名为 noteTimings 注解值将被插入一个名为 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);

预期结果:

2328
24
24

实际结果:

2328
2352
2376

有什么我忽略了吗?任何帮助都将不胜感激!

vuv7lop3

vuv7lop31#

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

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);

相关问题