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

efficient way to check if a group of letters in a string is a variable?

我正在尝试编写代码来打印音阶。我不能使用列表或数组类型的结构(学校原因)。这是我目前所拥有的:

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;
        //**************************************************************************************

然后在代码中进一步,一旦你 select 你想去的地方,它应该打印一个比例。现在我在大尺度上:

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) 之类的调用来 将字符串键 映射到它的整数值。有很多javadoc告诉你更多如何使用地图。