音符を移調しようとしていますが、返される結果が本来あるべきものではありません。私のコードをチェックして、どこが間違っているか教えてください。
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;
}
OK、これがやろうとしているのは、与えられた和音進行を間隔で指定して、和音の値を変更することです。I-III-IV-ivのように。ユーザーはトーン (トニカル、I note) を選択し、その音符を参照してコードが変更されます。したがって、たとえば、コードを実行すると、次のようになります。
- ユーザーはトーンを選択し、「E」と言います。
- このコードは、「I-III-IV-iv」などのコード進行を生成します。
- このコードは、I と III、I と IV、I と iv の間の間隔を取得します。
- 最初の音「E」は音程とともに値が変化します。
予想される出力は次のとおりです: EG#-A#-A# 実際の出力は次のとおりです: CG#-G#-Bb
なぜこれが機能しないのですか?コードを簡略化したので、もう少し必要な場合はお知らせください。前もって感謝します。
編集:コードを修正し、期待/取得した出力を追加しました。