[英]Make a string of letters and numbers?
我一直想寫一個音樂程序,但是我對編程並不了解太多,因此可能不會發生。 該程序的目標首先是用字母名稱表示吉他和弦(例如:CMaj = CEG),並且可能有幾種不同類型的和弦(大,小,小等),為了使之最簡單,我我認為我將從C大調開始,因為那里沒有尖銳或平坦的地方。 我的第一個和弦可能是C大調,它是音階的第一,第三和第五( C D E F G AB)。 我的問題是,使用字符串和字符(或其他某種方式,我有點猜測),有沒有一種方法可以將C表示為String(?)C,其中C = 1,D = 2,E = 3。 。等等。 這樣,當程序輸入大和弦時,它會請求相應音階的1、3和5? 因此,基本上,用戶會選擇和弦C Maj,將其轉換為1、3、5,然后將音階進行匹配,程序會調用該音階的這3個特定間隔。
任何幫助將不勝感激,或以其他方式完全考慮這一點。
利用我所掌握的很少知識,我使用了Oracles網站,找到了他們的枚舉示例,並將其放在一起:
public enum Chord {
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: System.out.println("C, E, G");
break;
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();
}
}
我仍然無法理解,以Olivers為例,當我制作C大調和弦時,如何指定我想要Scales枚舉的1、3和5值。 我喜歡使用C的半音並建立每個和弦的想法,但我不知道如何將#放入Scales類(非法字符)。因此,基本上我的問題是如何獲得Chord類從Scales類獲取比例度並將其插入EnumTest類?
(如果還有其他地方,我可以去問一些愚蠢的問題而又不打擾別人,我可以嘗試在那里問= p)
如果您需要有限的一組值並且功能將某些參數綁定到這些值,請使用Enums 。
我首先看這個問題:
enum Note {
C, D, E, F, G, A, B
}
class Chord {
List<Note> notes;
}
在這種情況下,音符列表包含插入順序中和弦的音符。 如果您不關心順序,並且我想和弦不能包含類似的音符,請使用Set作為音符持有人。
另外,如果您需要代碼,請使用Note.ordinal()
來返回筆記的代碼。
基本上,音符,和弦和和弦進行過程是枚舉的組合。
我會去的:
首先,請注意一個枚舉。 用半音而不是音符思考要容易得多。
枚舉注{C(1),C#(2),D(3),D#(4),E(5),F(6),F#(7),G(8),G#(8),A( 9),A#(10),B(11)}
與mishaddof建議的Note.ordinal()的實現
其次,我將擁有一個Chord枚舉,其中包含所有可能的Chord Type,它給出了要添加到根音中的半音的偏移量。 例如:
枚舉Chord {MAJOR(4,7),MINOR(3,6)}
查找CMaj就像獲取C音符並獲取位於音符枚舉中的4(E)和7(G)半音的音符一樣簡單。 對於G#Maj(8),其C(8 + 4 = 12(-11)= 1,然后D#(8 + 7 = 15-11 = 4)。對於Dmin,D(3),F(3 + 3 = 6)和A#(3 + 7 = 9)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.