有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

Java,将字符串数组设置为双数组

我在这个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) 个答案

  1. # 1 楼答案

    除了使用地图,“类型更安全”的答案是:创建一个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)不需要多次创建

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

  2. # 2 楼答案

    您应该使用

    key:value

    配对,而不是两个不同的数组。 下面是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类来解决这个问题

  3. # 3 楼答案

    如果数组的顺序很重要,或者如果你的任务仅限于数组,这就是我会使用的解决方案(尽管肯定没有地图那么有效)

    noteToTest = scanner.nextLine();
    
    for(x = 0; x < notes.length; x++)
    {
         if(noteToTest.equalsIgnoreCase(notes[x])
         {
    
              System.out.println("The frequency is :" + freq[x]);
    
         }          
    }