假设,我有一些变量:
String x="abcd";
String y="qwert";
String z="mnvji";
和更多...
我接受用户的输入。如果用户输入 'x' ,我打印该字符串,即我打印 "abcd" 如果用户输入 'y' ,我打印 "qwert" 等等......有没有办法在没有开关或 ifs 的情况下做到这一点?
提前谢谢各位朋友。
您可以创建从输入字符串到结果的映射。初始化地图:
Map<String, String> map = new HashMap<String, String>();
map.put("x", "abcd");
map.put("y", "qwert");
map.put("z", "mnvji");
当您想从用户的输入中打印结果时:
Scanner s = new Scanner(System.in);
while (s.hasNextLine())
System.out.println(map.get(s.nextLine()));
局部变量名称在运行时不可用,并且读取字段知道它的名称需要一些反思(请参阅@amit 的答案)。你需要一张地图:
Map<String, String> map = new HashMap<>();
map.put("x", "abcd");
map.put("y", "qwert");
map.put("z", "mnvji");
现在只需从该地图中获取价值:
String value = map.get(userInput);
value
如果null
它不匹配任何x/y/z
.
As we can approach like that also,
String input[]=new String['z'];
input['X']="abcd";
input['Y']="qwert";
input['Z']="mnvji";
System.out.println(input['X']);
But it will come under some limitation
使用键值对实现的地图集合解决了您的问题。
将变量 x,y,z 作为键和 "abcd" ,.. 作为值。
根据输入值从特定键中检索值。
Map<String, String> map = new HashMap<String, String>();
map.put("x", "abcd");
map.put("y", "qwert");
map.put("z", "mnvji");
获得价值
字符串值 = 地图 .get(inputValue)。
创建一个字符串数组,其中 x,y,z 应该是索引并相对存储内容...
获取用户输入并将其作为索引传递给数组..你会得到它..
如果您别无选择,只能使用对象变量(fields)而不是 aMap
其他答案所建议的 - 您可能想要使用反射,特别是Class.getField()
andClass.getDeclaredField()
方法 -
Field f = MyClass.class.getDeclaredField("x");
System.out.println(f.get(myObject));
MyClass
您的类名在哪里,并且myObject
是您想要从中获取值的对象。
请注意,使用这种方法 - 您无法添加字段 - 您只能获取现有字段。
如果您真的不想使用开关或 ifs(我假设您在其中包含地图),那么您必须使用反射来获取所有变量的名称并决定在它们上打印哪些。这是基础知识:
Class yourClass = Class.forName("yourpackagename.YourClassName")
Field[] allFields = yourClass.getDeclaredFields();
String[] fieldNames = new String[allFields.length];
for(int i = 0; i < fieldNames.length; i++)
{
fieldNames[i] = allFields [i].getName();
}
//Get name of field user wants to display, and look it up in
//the fieldNames array to get the index of it, store this index
Object instance = yourClass.newInstance();
System.out.println(allFields[indexToDisplay].get(instance));
当然,这很可能是矫枉过正。
Map<String, String> map = new HashMap<>();
map.put("x", "abcd");
map.put("y", "qwert");
map.put("z", "mnvji");
Scanner s = new Scanner(System.in);
while (s.hasNextLine())
System.out.println(map.get(s.nextLine()));
可能会工作。
将您的变量集作为(键,值)对放入 HashMap 中,并在用户输入键时检索特定键的值。