假设我有一些变量:
String x="abcd";
String y="qwert";
String z="mnvji";
以及更多......
我从用户那里得到了一个输入。 如果用户输入'x',我打印该字符串,即我打印“abcd” 如果用户输入'y',我打印“qwert”等等...... 有没有办法没有开关或ifs吗?
先谢谢你们,朋友们。
答案 0 :(得分:7)
您可以创建从输入字符串到结果的地图。初始化地图:
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()));
答案 1 :(得分:4)
本地变量名在运行时和读取字段中不可用,知道它的名称需要反思(参见@amit's answer)。你需要一张地图:
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
。
答案 2 :(得分:2)
我们也可以这样做,
String input[]=new String['z'];
input['X']="abcd";
input['Y']="qwert";
input['Z']="mnvji";
System.out.println(input['X']);
但它会受到一些限制
答案 3 :(得分:1)
使用键值对实现的地图集合可以解决您的问题。
将变量x,y,z作为键,将“abcd”,...作为值。
根据输入值从特定键中检索值。
Map<String, String> map = new HashMap<String, String>();
map.put("x", "abcd");
map.put("y", "qwert");
map.put("z", "mnvji");
获得价值
String value = map .get(inputValue)。
答案 4 :(得分:0)
将您的变量集作为(键,值)对放入HashMap中,并在用户输入密钥时检索特定键的值。
答案 5 :(得分:0)
创建一个字符串数组,其中x,y,z应该是索引并相对存储内容...
获取用户输入并将其作为索引传递给数组..你会得到它..
答案 6 :(得分:0)
如果您别无选择,只能使用其他答案建议的对象变量(字段)而不是Map
- 您可能需要使用 reflection < / strong>,特别是Class.getField()
和Class.getDeclaredField()
方法 -
Field f = MyClass.class.getDeclaredField("x");
System.out.println(f.get(myObject));
MyClass
是您的班级名称,myObject
是您想要该值的对象。
请注意,使用此方法 - 您无法添加字段 - 您只能获取现有字段。
答案 7 :(得分:0)
如果你真的不想使用开关或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));
当然,这可能有点矫枉过正。
答案 8 :(得分:0)
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()));
可能会奏效。