问题描述
我正在尝试编写代码以打印音阶。我不能使用结构的列表或数组类型(学校原因)。这是我到目前为止的内容:
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可以为您提供更多有关如何使用地图的信息。