と仮定すると、私はいくつかの変数を持っています:
String x="abcd";
String y="qwert";
String z="mnvji";
もっと...
ユーザーからの入力を受け取ります。ユーザーが「x」を入力した場合、その文字列を出力します。つまり、「abcd」を出力します。ユーザーが「y」を入力した場合、「qwert」などを出力します。スイッチやifを使用せずに実行する方法はありますか?
よろしくお願いします。
入力文字列から結果へのマップを作成できます。マップを初期化します。
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
。
そのようにアプローチできるので、
String input[]=new String['z'];
input['X']="abcd";
input['Y']="qwert";
input['Z']="mnvji";
System.out.println(input['X']);
しかし、それはいくつかの制限の下になります
キーと値のペアの実装を使用したマップコレクションは、問題を解決します。
変数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.get(inputValue)。
変数セットを(key、value)ペアとしてHashMapに入れ、ユーザーがキーを入力したときに特定のキーの値を取得するだけです。
x、y、zがインデックスである文字列配列を作成し、コンテンツを比較的格納します...
ユーザー入力を取得し、それをインデックスとして配列に渡します。取得します。
他の回答で示唆されているようにオブジェクト変数(フィールド)を使用する以外に選択肢がない場合は、リフレクション、具体的にはandメソッドMap
を使用することをお勧めします-Class.getField()
Class.getDeclaredField()
Field f = MyClass.class.getDeclaredField("x");
System.out.println(f.get(myObject));
MyClass
クラス名はどこにありmyObject
、値を取得するオブジェクトはです。
このアプローチでは、フィールドを追加することはできませんが、既存のフィールドのみを取得できることに注意してください。
スイッチやifを本当に使用したくない場合(そしてマップを含めると仮定します)、リフレクションを使用してすべての変数の名前を取得し、それらに印刷するものを決定する必要があります。基本は次のとおりです。
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()));
おそらく動作します。