Srs, boa tarde. tudo blz ?
Gostaria de pedir uma ajuda de vcs, se for possivel, abaixo mostro uma parte de um código fornecido pelo instrutor RoinujNosde a algum tempo, mas como tive dificuldae na epoca para coloca-lo em meu projeto, resolvi adiar.
Hoje, ao voltar ao projeto, resolvi tentar de novo, o programa esta funcionando muito bem para Tons musicais de A,B,C,D,E,F,G.
No programa o usuario entra com o tom atual da musica em uma caixa de texto (txtTomAtual) e em outra caixa de texto (txtTomNovo), insere o novo tom;
Por exemplo, tenho uma musica em LA(A) e quero ela em SI(B), funciona muito bem para esta tonalidades e outras.
Qual é o problema ? Quando tenho uma musica em um tom “# ou b” (sustenido ou bemol) o programa da erro, pelo fato dele só aceitar um caracter como entrada,
exemplo
A para B - ok funciona
(A# para D#) ou (Ab para B) - da erro, pois a entrada (txtTomAtual) e (txtTomNovo) só aceitam 1 caracter e o código foi feito para isso.
Abaixo segue uma parte do código.
String tomAtual = txtTomAtual.getText();
String tomNovo = txtTomNovo.getText();
String texto = txtArea.getText(); // pego o texto da jTextArea
String[] linhas = texto.split("\n");
for (int i = 0; i < linhas.length; i += 2) { // leio somente a linha das cifras
int indice = 0;
StringBuilder sb = new StringBuilder();
while ((indice < linhas[i].length())) { // leio caracteres a caractertes
char nota = linhas[i].charAt(indice); // caracter A.B,C,D,E.F.G, A#,
switch (tomAtual + tomNovo) { /
case "AB": // tom de A quero transporta-la para B
if (nota == 'A') { // caractere for A, eu substituo por B
sb.append("B");
} else if (nota == 'B') { // caractere for um B substituo por C#
sb.append("C#");
} else if (nota == 'C') {
sb.append("D");
} else if (nota == 'D') {
sb.append("E");
} else if (nota == 'E') {
sb.append("F#");
} else if (nota == 'F') {
sb.append("G");
} else if (nota == 'G') {
sb.append("A");
"
Continua ....
} else {
//caso seja espaço em branco ou outro qualquer
sb.append(nota);
}
break;
default:
JOptionPane.showMessageDialog(null, "Novo tom, so aceita
A,B,C,D,E,F,G ou A#,C#,D#,E,F#,G#");
} // Fim Suitch
indice++; // leio o próximo caractere na linha
} // Fim while
txtArea.setText(txtArea.getText().replace(linhas[i], sb.toString()));
} // Fim For
Obrigado.