我在部分Java项目上遇到麻烦。因此,该项目的一部分是设置等于频率的音符。我制作了一个由音符组成的字符串数组和一个双倍频率数组,但我不知道如何将字符串数组设置为等于双精度,以便在演奏音符时,它以双倍数组的特定频率播放。如果有更好的方法可以做到这一点?
double[] freq = {
16.35, 17.32, 17.32, 18.35, 19.45, 19.45, 20.60, 21.83, 23.12,
23.12, 24.50, 25.96, 25.96, 27.50, 29.14, 29.14, 30.87
};
String[] notes = {
"C0", "C#0", "Db0", "D0", "D#0", "Eb0", "E0", "F0", "F#0",
"Gb0", "G0", "G#0", "Ab0", "A0", "A#0", "Bb0", "B0"
};
这是两个数组。
答案 0 :(得分:0)
您应使用
创建一个 Java Map 对象键:值
对而不是两个不同的数组。 这是Map类的Java文档,其类型为:https://docs.oracle.com/javase/8/docs/api/java/util/Map.html
以下是一些实现示例: https://examples.javacodegeeks.com/java-basics/java-map-example/
但是首先请检查您需要哪种类型的地图。这是很好解释的区别: Difference between HashMap, LinkedHashMap and TreeMap
示例:
HashMap<String, Double> notesMap = new HashMap<>();
notesMap.put("C0", 16.35); ...
添加所有注释,然后您可以按注释名称获取频率,并遍历 HashMap 的所有属性。
如果是一对多的关系,则应通过创建具有名称和频率变量的Note类来解决此问题。
答案 1 :(得分:0)
如果数组的顺序很重要,或者如果您的分配仅限于数组,这就是我要使用的解决方案(尽管肯定不如Map高效)
container
答案 2 :(得分:0)
除了使用地图外,“更安全的类型”答案:创建一个Note类,例如:
public class Note {
private final String name;
private final double frequency;
public Note(String name, double frequency) {
this.name = name; ...
然后您可以继续将 play 方法放入课堂。
接下来的其他选择是使用枚举而不是类,很明显,注释Note("C0", 16.35)
不需要创建多次... >
请注意:无论如何,您都希望数据以某种方式表示名称和相应频率之间的关系。您当前的代码基于两个不同数组中的相同索引隐式创建该映射。如图所示,您现在可以决定如何使事情更明确。