मैं जावा में वैरिएबल का एक सेट असाइन करना चाहता हूं:
int n1,n2,n3;
for(int i=1;i<4;i++)
{
n<i> = 5;
}
मैं इसे जावा में कैसे प्राप्त कर सकता हूं?
मैं जावा में वैरिएबल का एक सेट असाइन करना चाहता हूं:
int n1,n2,n3;
for(int i=1;i<4;i++)
{
n<i> = 5;
}
मैं इसे जावा में कैसे प्राप्त कर सकता हूं?
जवाबों:
यह नहीं है कि आप जावा में चीजें कैसे करते हैं। जावा में कोई गतिशील चर नहीं हैं। जावा चर को सोर्स कोड 1 में घोषित किया जाना है ।
आप जो हासिल करने की कोशिश कर रहे हैं, उसके आधार पर, आपको एक सरणी, List
या एक का उपयोग करना चाहिए Map
; जैसे
int n[] = new int[3];
for (int i = 0; i < 3; i++) {
n[i] = 5;
}
List<Integer> n = new ArrayList<Integer>();
for (int i = 1; i < 4; i++) {
n.add(5);
}
Map<String, Integer> n = new HashMap<String, Integer>();
for (int i = 1; i < 4; i++) {
n.put("n" + i, 5);
}
स्रोत कोड में घोषित किए गए वेरिएबल्स को गतिशील रूप से संदर्भित करने के लिए प्रतिबिंब का उपयोग करना संभव है । हालाँकि, यह केवल उन चरों के लिए काम करता है जो कक्षा के सदस्य हैं (यानी स्थैतिक और उदाहरण क्षेत्र)। यह स्थानीय चरों के लिए काम नहीं करता है। @ Fyr का "त्वरित और गंदा" उदाहरण देखें।
हालाँकि जावा में इस तरह की चीज़ों को अनावश्यक रूप से करना एक बुरा विचार है। यह अक्षम है, कोड अधिक जटिल है, और चूंकि आप रनटाइम पर भरोसा कर रहे हैं, इसलिए यह अधिक नाजुक है। और यह "गतिशील नामों के साथ चर" नहीं है। इसे स्थिर नामों के साथ चर तक गतिशील पहुंच के रूप में वर्णित किया गया है।
1 - वह कथन थोड़ा गलत है। यदि आप BCEL या ASM का उपयोग करते हैं, तो आप bytecode फ़ाइल में चर को "घोषित" कर सकते हैं। लेकिन यह मत करो! उस तरह पागलपन है!
Map<String, T>
, तो इसके बजाय का उपयोग करें, अपने वास्तविक कोड के साथ खिलवाड़ शुरू न करें।
यदि आप चर का उपयोग करना चाहते हैं तो आप किसी प्रकार के गतिशील का उपयोग कर सकते हैं। हालांकि प्रतिबिंब स्थानीय चर के लिए नहीं काम करता है। यह केवल क्लास विशेषताओं के लिए लागू है।
एक त्वरित और गंदा उदाहरण यह है:
public class T {
public Integer n1;
public Integer n2;
public Integer n3;
public void accessAttributes() throws IllegalArgumentException, SecurityException, IllegalAccessException,
NoSuchFieldException {
for (int i = 1; i < 4; i++) {
T.class.getField("n" + i).set(this, 5);
}
}
}
आपको इस कोड को विभिन्न तरीकों से सुधारना होगा, यह केवल एक उदाहरण है। यह भी अच्छा कोड नहीं माना जाता है।
आपको उपयोग करना चाहिए List
या array
इसके बजाय
List<Integer> list = new ArrayList<Integer>();
list.add(1);
list.add(2);
list.add(3);
या
int[] arr = new int[10];
arr[0]=1;
arr[1]=2;
या इससे भी बेहतर
Map<String, Integer> map = new HashMap<String, Integer>();
map.put("n1", 1);
map.put("n2", 2);
//conditionally get
map.get("n1");
जावा में डायनामिक वेरिएबल नाम
ऐसी कोई चीज नहीं है।
आपके मामले में आप सरणी का उपयोग कर सकते हैं:
int[] n = new int[3];
for() {
n[i] = 5;
}
अधिक सामान्य (name, value)
जोड़े के लिए, का उपयोग करेंMap<>
इस तरह आजमाएं:
HashMap<String, Integer> hashMap = new HashMap();
for (int i=1; i<=3; i++) {
hashMap.put("n" + i, 5);
}