检查字符串中的一组字母是否为变量的有效方法?

问题描述

我正在尝试编写代码以打印音阶。我不能使用结构的列表或数组类型(学校原因)。这是我到目前为止的内容

public class Musicarum {
    public static void main(String[] args) {
        Scanner input = new Scanner(system.in);
        double buildNum = 0.01;
        
        //**************************************************************************************
        int a = 1,bb = 2,b = 3,c = 4,db = 4,d = 5,eb = 6,e = 7,f = 8,gb = 9,ab = 10;
        //**************************************************************************************

然后在代码中更进一步,一旦您选择要去的地方,它应该打印一个刻度。现在我在大范围内:

if(answer.equals("scales")) {
                System.out.println("Would you like to see a major or a minor scale?");
                String scale = input.nextLine();
                scale = scale.toLowerCase();
                if(scale.equals("major"));
                System.out.println("What Scale would you like to see?");
                scale = input.nextLine();
                System.out.println("The scale you would like to see is made of the notes: " + scale.charat(0));
}}

我当前的问题是我正在打印秤的最后一行上方。我想知道是否可以检查字符串scale并查看其中的单词是否对应于我预定义的变量。然后,我希望能够使用我分配给变量的数值。我尝试使用用户键入的第一个字符的unicode值,但是我不知道如何使用它来匹配我的一个int变量。我也研究过设置类似于python字典的内容,但是现在如何做到这一点我完全不知所措。有什么帮助吗?尝试在不使用4000个嵌套if语句和每个比例尺157个变量的情况下做到这一点。

解决方法

Java并不是一种动态语言,因此(尽管有可能)采用用户字符串并将其“转换”为变量名是非常繁重的工作(也是非常高级的主题)。

您问题的直接答案是使用 Map 结构(地图与Java等效于python字典)。一个简单的例子:

Map<String,Integer> scaleByName = new HashMap<>();
scaleByName.put("a",1); 
scaleByName.put("bb",2); ...

然后,您可以使用诸如scaleByName.get(someStringComingFromUserInput)之类的调用来将字符串键映射到其Integer值。 javadoc可以为您提供更多有关如何使用地图的信息。