通过列表循环和减去前面的元素给不想要的结果

问题描述 投票:-1回答:1

我试图在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

然后剔值会被插入到一个ArrayList名为noteTimings和音符值会被插入到一个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);

预期成绩:

2328
24
24

实际结果:

2328
2352
2376

有我俯瞰的东西吗?任何帮助,将不胜感激!

java for-loop iteration midi
1个回答
1
投票

您可以扭转的列表,并从一开始,e.g执行减法:

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

推荐问答