我正在写一个关于音乐和弦的节目。我希望用户输入A-G或a-g,但它也可以是#或 - (平坦),也可以是m(次要)。 它正在运行,但如果你输入#m,你就得到了
输入音乐钢琴和弦名称: 甲
我需要它继续读取if语句,这样如果输入是3个字符,我可以描述char应该是什么。
我还没有添加有关锐利和平面的部分。
import java.util.Scanner;
public class Hwk9 {
public static void main(String[] args) {
String chord;
Scanner stdin = new Scanner(System.in);
System.out.println("Enter a musical piano chord name: ");
chord = stdin.nextLine();
String finalChord = validChord(chord);
System.out.println(finalChord);
}
public static String validChord(String input) {
if (input.length() > 3 && input.length() < 1) {
input = "Invalid chord";
}
char note = input.charAt(0);
char capNote = chordCapitalize(note);
if (capNote == 'A') {
input = capNote + "";
}
else if (capNote == 'B') {
input = capNote + "";
}
else if (capNote == 'C') {
input = capNote + "";
}
else if (capNote == 'D') {
input = capNote + "";
}
else if (capNote == 'E') {
input = capNote + "";
}
else if (capNote == 'F') {
input = capNote + "";
}
else if (capNote == 'G') {
input = capNote + "";
}
else {
input = "Invalid chord";
}
if (input.length() == 3) { *<<<<<<This section is not going through*
char minor = input.charAt(2);
if (minor == 'm') {
input = capNote + "" + minor;
}
else {
input = "Invalid chord";
}
}
return input;
}
public static char chordCapitalize(char input) {
String note = input + "";
String caps = note.toUpperCase();
char capNote = caps.charAt(0);
return capNote;
}
}
答案 0 :(得分:1)
问题是您要将大写的和弦分配回input
块中的if
。您需要有一个局部变量,不将其重新分配给input
如果您为input
分配capNote
的值,input
的长度将始终为1。
String result;
if (capNote == 'A') {
result = capNote + "";
}
else if (capNote == 'B') {
result = capNote + "";
}
//Rest of code
if (input.length() == 3) {
char minor = input.charAt(2);
if (minor == 'm') {
result = capNote + "" + minor;
}
else {
result = "Invalid chord";
}
}
return result;