我正在尝试转置一个音符,但它返回的结果不是应该的。你能检查我的代码并告诉我哪里错了吗?
public int changeTone(String chord) {
int changeTone = 0;
switch(chord) {
case "I":
changeTone = 0;
break;
case "II":
changeTone = 1;
break;
case "III":
changeTone = 2;
break;
case "IV":
changeTone = 3;
break;
case "V":
changeTone = 4;
break;
case "VI":
changeTone = 5;
break;
case "VII":
changeTone = 6;
break;
case "i":
changeTone = 0;
break;
case "ii":
changeTone = 2;
break;
case "iii":
changeTone = 4;
break;
case "iv":
changeTone = 5;
break;
case "v":
canviDeTo = 7;
break;
case "vi":
changeTone = 9;
break;
case "vii":
changeTone = 11;
break;
default:
System.out.println("Vaya");
break;
}
return changeTone ;
}
public String getChord(int interval) {
String chord = "";
switch(interval) {
case "0":
chord = "C";
break;
case "2":
chord = "D";
break;
case "4":
chord = "E";
break;
case "5":
chord = "F";
break;
case "7":
chord = "G";
break;
case "9":
chord = "A";
break;
case "11":
chord = "B";
}
return chord;
}
public String WriteChord(String chords, String tone) {
String finalChord;
String[] chordArray = chords.split("-");
for(int i=0; i < chordArray.length; i++){
String chord = chordArray[i];
int interval = changeTone(chord);
chord = getChord(interval);
Note note = new Note(chord);
finalChord += note.changeValue(interval).toString() += "-";
}
return finalChord;
}
好的,所以它试图做的是改变一个和弦的值,给定一个带有间隔的和弦进行。像 I-III-IV-iv。用户将选择一个音调(主音,I note),并且以该音符作为参考来改变和弦。因此,例如,运行代码应该执行以下操作:
- 用户选择一个音调,说“E”。
- 该代码生成一个和弦进行,例如“I-III-IV-iv”。
- 代码获取 I 和 III、I 和 IV 以及 I 和 iv 之间的间隔。
- 初始音符“E”随着音程的变化而改变其值。
预期输出为:EG#-A#-A# 实际输出为:CG#-G#-Bb
为什么这不起作用?我已经简化了我的代码,所以如果您需要更多信息,请告诉我!提前致谢。
编辑:我已经更正了代码并添加了预期/获得的输出。