比较java变量和打印

比较java变量和打印,java,variables,Java,Variables,假设我有一些变量: String x="abcd"; String y="qwert"; String z="mnvji"; 还有更多 我接受用户的输入。 如果用户输入“x”,我将打印该字符串,即打印“abcd” 如果用户输入“y”,我打印“qwert”等等。。。 没有开关或ifs,有没有办法做到这一点 朋友们,请提前感谢。您可以创建从输入字符串到结果的映射。初始化映射: Map<String, String> map = new HashMap<String, String

假设我有一些变量:

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");

将变量集作为(键、值)对放入HashMap中,当用户输入键时,只需检索特定键的值。

本地变量名在运行时不可用,读取知道其名称的字段需要一些反射(请参阅)。你需要一张地图:

Map<String, String> map = new HashMap<>();
map.put("x", "abcd");
map.put("y", "qwert");
map.put("z", "mnvji");

如果与任何
x/y/z
不匹配,则将为
null

使用键值对实现地图收集解决您的问题

将变量x、y、z作为键,并将“abcd”,。。作为价值

根据输入值从特定键检索值

Map<String, String> map = new HashMap<String, String>();
map.put("x", "abcd");
map.put("y", "qwert");
map.put("z", "mnvji");
Map Map=newhashmap();
地图放置(“x”、“abcd”);
地图放置(“y”、“qwert”);
地图放置(“z”、“mnvji”);
获得价值


String value=map.get(inputValue)。

创建一个字符串数组,其中x、y、z应为索引,并相对存储内容


获取用户输入并将其作为索引传递到数组。如果您别无选择,只能使用对象变量(字段)而不是其他答案所建议的
映射,则您将获得它。您可能希望使用,特别是-

其中,
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));
classyourclass=Class.forName(“yourpackagename.YourClassName”)
Field[]allFields=yourClass.getDeclaredFields();
String[]FieldName=新字符串[allFields.length];
对于(int i=0;i

当然,这可能是过火了。

我们也可以这样做

String input[]=new String['z'];
 input['X']="abcd";
 input['Y']="qwert";
 input['Z']="mnvji";
 System.out.println(input['X']);
但是它会受到一些限制

Map Map=newhashmap();
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()));
地图放置(“x”、“abcd”); 地图放置(“y”、“qwert”); 地图放置(“z”、“mnvji”); 扫描仪s=新的扫描仪(System.in); 而(s.hasNextLine()) System.out.println(map.get(s.nextLine());

可能会起作用。

这些变量是类的属性还是方法中的变量?如果它们是属性,则可以使用反射(即使不建议使用反射)。否则,你就不能(看)。在这种情况下,你应该考虑@ DACWE回答。我不喜欢第一个语句。反射API的使用非常简单。我同意不建议这样做,但通过字段名获取值是相当容易的。(我添加了一个2行示例作为答案,以说明如何实现它)@amit:好吧,我不会在“普通”Java程序中使用反射,可能是在库或框架中。但这不是重点。OP说的是“一些变量”,我说的也是(局部)变量,而不是字段。局部变量是另一个故事,你应该在你的答案中明确说明,IMO.+1;简单。但必须进行范围检查,但我想这就是你所说的限制。您可以轻松地执行
input['x']=input['x']=“abcd”
将相同的数据放入多个插槽。
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));
String input[]=new String['z'];
 input['X']="abcd";
 input['Y']="qwert";
 input['Z']="mnvji";
 System.out.println(input['X']);
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()));