Java,将字符串数组设置为等于双精度数组

时间:2019-02-25 22:47:41

标签: java arrays

我在部分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"
};

这是两个数组。

3 个答案:

答案 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)不需要创建多次...

请注意:无论如何,您都希望数据以某种方式表示名称和相应频率之间的关系。您当前的代码基于两个不同数组中的相同索引隐式创建该映射。如图所示,您现在可以决定如何使事情更明确。