通过编码MIDI处理程序来自学Java.程序需要做的一件事是在MIDI音符编号及其对应的紧凑字符串表示形式之间来回转换.我看过使用枚举设置,但是由于命名限制,您无法执行类似的操作

c-1, c#-1, ... g9;

因为尖锐和负面(是的,我遵循的惯例是使您最终得到负八度音:P).

必须在允许的范围和我想要的范围之间进行转换似乎很笨拙.

CNEG1("c-1"),

CSNEG1("c#-1"),

DNEG1("d-1"),

...

G9("g9");

所以我想出了下面的静态导入方案,它可以正常工作.但是,我想了解有关如何使用枚举的更多信息,并且我有直觉,如果实际上我更好地了解枚举的含义,它们实际上可能会更适合该任务.所以这就是我的问题:任何人都可以提出一种优雅的方法来使用枚举方案提供相同的功能吗?此外,会否有强烈的理由这样做?

public abstract class MethodsAndConstants {

public static final String TONICS[] = {"c","c#","d","d#","e","f","f#","g","g#","a","a#","b"};

static final NoteMap notemap = new NoteMap();

static class NoteMap{

static String map[] = new String[128];

NoteMap() {

for (int i = 0; i < 128; i++){

int octave = i/12 - 1;

String tonic = MethodsAndConstants.TONICS[i%12];

map[i] = tonic + octave;

}

}

}

public static int convert_midi_note(String name){

return indexOf(NoteMap.map, name);

}

public static String convert_midi_note(int note_num){

return NoteMap.map[note_num];

}

public static int indexOf(String[] a, String item){

return java.util.Arrays.asList(a).indexOf(item);

}

}

编辑——————————————

经过深思熟虑,我认为在这种特殊情况下,枚举毕竟可能会过大.我可能最终只是在这里使用此代码,这是一种静态导入方法,但甚至不再需要上面的NoteMap业务.

note_num->名称转换非常简单,名称-> note_num的东西只是很好的字符串解析乐趣.

public abstract class MethodsAndConstants {

public static final String[] TONICS = {"c","c#","d","d#","e","f","f#","g","g#","a","a#","b"};

static String convert(int i) {

String tonic = MethodsAndConstants.TONICS[i%12];

int octave = (i / 12) - 1;

return tonic + octave;

}

static int convert(String s) {

int tonic = java.util.Arrays.asList(MethodsAndConstants.TONICS).indexOf(s.substring(0,1));

if (s.contains("#")) tonic += 1;

int octave = Integer.parseInt(s.substring(s.length()-1));

if (s.contains("-")) octave -= 2; // case octave = -1

int note_num = ((octave + 1) * 12) + tonic;

return note_num;

}

}

c enum能像java一样吗_Java枚举替代我如何做到这一点?相关推荐

  1. java enum类默认常量是什么_Java枚举类型enum的详解及使用

    Java枚举类型enum的详解及使用 最近跟同事讨论问题的时候,突然同事提到我们为什么Java 中定义的常量值不采用enmu 枚举类型,而采用public final static 类型来定义呢?以前 ...

  2. java return用法_Java枚举的高级用法之多键值的映射使用

    枚举Enum单映射使用 做Java的各位仁兄姐妹都知道,Java通过HashMap,以及枚举提供了方便的K-V映射功能,例如 枚举单映射使用 但是如果遇到多个键值映射,例如K-K-V的形式怎么办呢?可 ...

  3. java枚举类型enum用法_java枚举类型enum用法和原理介绍【传智播客】

    Enum枚举类型 Enum的全写是Enumeration,这个词的翻译是列举.逐条陈述.细目.在程序语言中,枚举类型是一种特殊的数据类型(常用的数据类型比如字符串.整型),这种数据类型的变量值限定在固 ...

  4. java enum 随机_Java 枚举(enum)

    1.枚举(enum) enum是一个特殊的类,代表一组常量(不可更改的变量,如,final变量). 要创建enum,请使用enum关键字(而不是类或接口),并用逗号分隔常量.请注意,它们应使用大写字母 ...

  5. java switch enum对象_Java枚举类(enum)5种常见用法和3种内部方法,详细附代码

    文章目录 Java枚举类(enum)重点用法和内部方法,附代码 一.Java 枚举类(enum) 详解5种常见的用法 1.常量 2.支持switch 3.向枚举中添加新方法 4.覆盖枚举的方法 5.实 ...

  6. java enum比较_Java枚举比较

    可以通过三种方式比较两个枚举常量: 使用Enum类的compareTo()方法 使用Enum类的equals()方法 使用==运算符 Enum类的compareTo()方法比较同一枚举类型的两个枚举常 ...

  7. java 数据库 空值_java – 是否可以将枚举属性的空值存储到数据库?

    我试图使用JPA TopLink将 Java中实体的枚举属性的null值存储到Oracle数据库.代码执行时没有异常或警告,但实体未存储在数据库中. 该实体定义如下: @Entity public c ...

  8. 用java的io做一个代码计数器,如何制作Java页面计数器_java

    大庆采油六厂采油工艺研究所 王兵 王波 常常逛WWW的人,一定对许多起始页上的计数器感兴趣.每当你光临某个站点的起始页时,它的计数器就很亲切地告诉你,从某年某月某日开始,你是第几位光临的人.你可能也想 ...

  9. java string转enum_java枚举类Enum方法简介(valueof,value,ordinal) (转)

    Enum作为Sun全新引进的一个关键字,看起来很象是特殊的class,   它也可以有自己的变量,可以定义自己的方法,可以实现一个或者多个接口.   当我们在声明一个enum类型时,我们应该注意到en ...

最新文章

  1. 全球16家超级独角兽公司,为什么中国能占7家,印度只有1家?未来哪些行业最可能诞生独角兽?
  2. [HNOI2015]接水果
  3. 运维基础--Linux用户和组的管理
  4. systemverilog硬件设计及建模_Chisel引领敏捷硬件开发浪潮
  5. nodejs开发——require与exports的使用
  6. 【学习笔记】JavaScript基础(一)
  7. 职场上个人的核心技术_职场上,这3种人表面老实,实际却是个“高手”,要远离...
  8. 值不值得入手_iPhone11现在还值不值得入手?真实用户说出心里话
  9. 阿里云助力1药网开辟疫情防控“第二战场”
  10. Linux学习笔记-对父子进程直接通信基础与实例
  11. 紫皮java_java如果已知一个日期为2007/3/8,求10天后是哪一天,367天后呢
  12. java基于springboot高校后勤报修管理系统
  13. 【无标题】免费公众号对接电影自动回复功能教程详解
  14. 澳洲航空和香港航空在OAG的准点率报告中获得五星评级
  15. 网站优化与seo的方法(seo的优化基础)
  16. 连接真机开发安卓(Android)移动app MUI框架 添加购物车等——混合式开发(四)...
  17. 管螺纹如何标注_螺纹常识,这一次搞全了
  18. OSChina 周五乱弹 ——越污的人颜值越高 不信看图!
  19. 【调剂】南京信息工程大学2023年中外合作计算机,电子信息都招!
  20. DSP TMS320F280049之数模转换器DAC(寄存器版)

热门文章

  1. python结束不退出_Python 基本功: 1. Hello world
  2. csdn java社区_java中的io系统详解 - ilibaba的专栏 - 博客频道 - CSDN.NET
  3. dw html5怎么美化,DW CS5/CS6代码格式化、美化插件 Dreamweaver代码格式化美化插件
  4. 天眼探空经济发展_【砥砺奋进的五年】观神州 惠民生:“天眼”探空惊艳全球...
  5. python中newfile是干嘛用的_python 文件操作方法
  6. 皮一皮:原来骑骆驼要求这么高。。
  7. 赠书:Kotlin在Spring Boot中的应用
  8. Spring Boot 启动可以有多快?
  9. Command ‘[‘ninja‘, ‘-v‘]‘ returned non-zero exit status 1
  10. CUDA out of memory in pytorch