这是示例代码:
public class TestNoteValue {
public static void main(String[] args) {
Chord c = new Chord("C5maj");
DevLog.debug(MusicAnnotationUtil.reportChord(c));
// ----------------
c.setOctave(4);
DevLog.debug(MusicAnnotationUtil.reportChord(c));
}
}
结果输出:
第一次结果是对的:Chord{Note{C5, 60}, Note{E5, 64}, Note{G5, 67}, }
C5 的值确实是 60。但是在 Chord.setOctave(4) 之后,它并没有改变第一个音符的表达,而是改变了它的值。导致正确性受损的音符数组: Chord{ Note{C5, 48} , Note{E4, 52}, Note{G4, 55}, }
我在这里错过了什么吗?
谢谢您的帮助!
由于 David 正在帮助研究代码,我将发布我的临时解决方法。希望它可以帮助其他人。
public static Chord setOctave(Chord c, byte octave) {
DevLog.super_trace("setting octave for chord "+c+" to "+octave);
c.setOctave(octave);
Note[] nA = new Note[3];
for(int i=0; i<c.getNotes().length; i++){
nA[i] = new Note(c.getNotes()[i].getValue());
}
return Chord.fromNotes(nA);
}