First, my code (It is far from perfect, I don't really know what I am doing) is this:
public enum Chord { MAJOR, MINOR, DIMINISHED, BASS, BASS2 }
public enum Scales { C, D, E, F, G, A }
public class EnumTest
{
Chord chord;
public EnumTest(Chord chord)
{
this.chord = chord;
}
public void tellItLikeItIs()
{
switch (chord) {
case MAJOR:
for(Scales C : Scales.values())
System.out.println(C + " " + C.ordinal());
break;
//I've tried in the CHORD enum going MAJOR(0, 2, 4) but I don't think that was correct
case MINOR: System.out.println("C, Eb, G");
break;
default:
System.out.println("I screwed up");
break;
}
}
public static void main(String[] args)
{
EnumTest firstDay = new EnumTest(Chord.MAJOR);
firstDay.tellItLikeItIs();
EnumTest thirdDay = new EnumTest(Chord.MINOR);
thirdDay.tellItLikeItIs();
System.out.println("Here are all Scale degrees" +
" and their ordinal values: ");
for(Scales C : Scales.values())
System.out.println(C + " " + C.ordinal());
}
}
I might be missing a few brackets and things, I had trouble posting some of it using the code tool. My question is, for case MAJOR, I can get the compiler to print C 0, D 1, E 2, etc.. except I only want it to print C, E and G (0, 2, 4). Is there a way to select ONLY these 3 ordinal values for a major chord and print those?
Also, in the Scales enum I also need the sharps (C, C#, D, D#..) except the sharps are 'illegal characters' and I get _MusicChord\Scales.java:2: illegal character: \35
I tried to look into escape characters, but I either didn't understand the article I read or I was looking at the wrong thing. Could someone also tell me how to add the #'s into the Scales class without them being illegal characters? Any help is appreciated
In the following example you can see how you could address some of the problems you are facing:
public class EnumTest
{
public enum Chord
{
MAJOR,
MINOR,
DIMINISHED,
BASS,
BASS2
}
public enum Scales
{
C("C"),
CSharp("C#"),
E("E"),
F("F"),
G("G"),
A("A");
private final String printName;
Scales(String printName)
{
this.printName = printName;
}
public String getPrintName()
{
return printName;
}
public String toString()
{
return printName;
}
private static final Map<Chord, List<Scales>> scalesForChord;
static
{
scalesForChord = new HashMap<Chord, List<Scales>>();
scalesForChord.put(Chord.MAJOR, Arrays.asList(Scales.C, Scales.E, Scales.G));
}
public static List<Scales> getScalesForChord(Chord chord)
{
return scalesForChord.get(chord);
}
}
}