আমি জাভাতে ভেরিয়েবলগুলির একটি সেট নীচে নির্ধারণ করতে চাই:
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);
}
সোর্স কোডে ঘোষিত ভেরিয়েবলগুলিকে গতিশীলভাবে উল্লেখ করতে প্রতিবিম্বটি ব্যবহার করা সম্ভব । যাইহোক, এটি কেবল শ্রেণীর সদস্যদের (যেমন স্থির এবং উদাহরণ ক্ষেত্র) ভেরিয়েবলগুলির জন্য কাজ করে। এটি স্থানীয় ভেরিয়েবলের জন্য কাজ করে না। @ ফায়ারের "দ্রুত এবং নোংরা" উদাহরণ দেখুন।
তবে জাভাতে অযথা এই জাতীয় জিনিস করা একটি খারাপ ধারণা। এটি অকার্যকর, কোডটি আরও জটিল এবং যেহেতু আপনি রানটাইম যাচাইয়ের উপর নির্ভর করছেন এটি আরও ভঙ্গুর। এবং এটি "গতিশীল নামের ভেরিয়েবল" নয়। স্থির নামের সাথে ভেরিয়েবলের গতিশীল অ্যাক্সেস হিসাবে এটি আরও ভালভাবে বর্ণনা করা হয়েছে।
1 - এই বিবৃতিটি কিছুটা ভুল। আপনি যদি বিসিইএল বা এএসএম ব্যবহার করেন তবে আপনি বাইটকোড ফাইলটিতে ভেরিয়েবলগুলি "ডিক্লেয়ার" করতে পারেন। তবে এটা করবেন না! এইভাবে মিথ্যা পাগলামি!
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);
}
}
}
আপনাকে এই কোডটি বিভিন্ন উপায়ে উন্নত করতে হবে এটি কেবল উদাহরণ। এটিও ভাল কোড হিসাবে বিবেচিত হয় না।
আপনার যা প্রয়োজন তা অ্যারে নামকরণ করা হয়েছে। আমি নিম্নলিখিত কোডটি লিখতে চেয়েছিলাম:
int[] n = new int[4];
for(int i=1;i<4;i++)
{
n[i] = 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);
}