CodeGym /جاوا بلاگ /Random-SD /CodeGym تي رانديون سيڪشن: مفيد ٿيوري
John Squirrels
سطح
San Francisco

CodeGym تي رانديون سيڪشن: مفيد ٿيوري

گروپ ۾ شايع ٿيل
CodeGym تي ”گيمز“ سيڪشن ۾ ، توهان کي دلچسپ پراجيڪٽ ملندا جن ۾ مشهور ڪمپيوٽر گيمز لکڻ شامل آهن. 2048 جي مشهور راندين جو پنهنجو نسخو ٺاهڻ چاهيو ٿا، مائنسويپر، سانپ ۽ ٻيون رانديون؟ اهو سادو آهي. اسان راند لکڻ کي هڪ قدم قدم واري عمل ۾ تبديل ڪيو آهي. "راندين" سيڪشن تي ڪوڊ گيم: مفيد ٿيوري - 1هڪ گيم ڊولپر جي حيثيت سان توهان جي صلاحيتن کي جانچڻ لاءِ، توهان کي ترقي يافته پروگرامر ٿيڻ جي ضرورت ناهي، پر جاوا علم جو هڪ مخصوص سيٽ ضروري آهي. هتي توهان کي معلومات ملندي جيڪا راند لکڻ ۾ ڪارآمد ثابت ٿيندي .

1. وراثت

ڪوڊ گيم گيم انجڻ سان ڪم ڪرڻ ۾ وراثت استعمال ڪرڻ شامل آهي. پر جيڪڏهن توهان کي خبر ناهي ته اهو ڇا آهي؟ هڪ پاسي، توهان کي هن موضوع کي سمجهڻ جي ضرورت آهي: اهو سطح 11 ۾ اڀياس ڪيو ويو آهي . ٻئي طرف، انجڻ خاص طور تي ٺهيل هئي بلڪل سادو، تنهنڪري توهان وراثت جي غير معمولي ڄاڻ حاصل ڪري سگهو ٿا. پوء وراثت ڇا آهي؟ بلڪل سادي نموني، وراثت ٻن طبقن جي وچ ۾ تعلق آهي. انهن مان هڪ والدين بڻجي ٿو، ۽ ٻيو هڪ ٻار (نسل). ان کان علاوه، والدين طبقي کي شايد خبر ناهي ته ان جو اولاد آهي. ٻين لفظن ۾، اهو اولاد هجڻ سان ڪو خاص فائدو حاصل نٿو ڪري. پر وراثت هڪ اولاد کي ڪيترائي فائدا ڏئي ٿو. ۽ سڀ کان وڌيڪ اهم اهو آهي ته والدين طبقي جا سڀئي متغير ۽ طريقا اولاد ۾ ظاهر ٿيندا آهن ڄڻ ته والدين طبقي جو ڪوڊ نسلي طبقي ڏانهن نقل ڪيو ويو آهي. هي هڪ مڪمل طور تي صحيح وضاحت نه آهي، پر اهو وراثت جي آسان سمجهڻ لاء ڪافي ٿيندو. وراثت کي بهتر سمجهڻ لاءِ هتي ڪجهه مثال آهن. مثال 1: آسان ترين وراثت.
public class Parent {

}
چائلڊ ڪلاس کي ورثي ۾ ملي ٿو والدين ڪلاس کي Extensed keyword استعمال ڪندي .
public class Child extends Parent {

}
مثال 2: والدين طبقي جي متغيرن کي استعمال ڪندي.
public class Parent {

   public int age;
   public String name;
}
چائلڊ ڪلاس والدين طبقي جي عمر ۽ نالو متغير استعمال ڪري سگھن ٿا ڄڻ ته انھن کي والدين طبقي ۾ قرار ڏنو ويو ھو .
public class Child extends Parent {

   public void printInfo() {

     System.out.println(name+" "+age);
   }
}
مثال 3: والدين طبقي جا طريقا استعمال ڪندي.
public class Parent {

   public int age;
   public String name;

   public getName() {
      return name;
  }
}
چائلڊ ڪلاس والدين طبقي جي متغيرن ۽ طريقن کي استعمال ڪري سگھي ٿو ڄڻ ته انھن کي چائلڊ ڪلاس ۾ قرار ڏنو ويو آھي. هن مثال ۾، اسان استعمال ڪريون ٿا getName() طريقو.
public class Child extends Parent {

   public void printInfo() {

     System.out.println(getName()+" "+age);
   }
}
هي اهو آهي جيڪو ٻار طبقو گڏ ڪرڻ وارو ڏسڻ جهڙو آهي:
public class Child extends Parent{

   public int age;  // Inherited variable
   public String name;  // Inherited variable

   public getName() {  // Inherited method.
      return name;
  }
   public void printInfo() {

     System.out.println(getName()+" "+age);
   }
}

2. مٿان چڙهڻ جا طريقا

ڪڏهن ڪڏهن اهڙيون حالتون هونديون آهن جو اسان پنهنجي چائلڊ ڪلاس کي وارث بڻائيندا آهيون ڪجهه تمام ڪارآمد والدين طبقي سان گڏ، ان جي سڀني متغيرن ۽ طريقن سان، پر ڪجهه طريقا ڪم نٿا ڪن جيئن اسان چاهيون ٿا. يا بلڪل نه ته جيئن اسان انهن کي چاهيون ٿا. اسان هن صورتحال ۾ ڇا ڪري سگهون ٿا؟ اسان اهو طريقو ختم ڪري سگهون ٿا جيڪو اسان پسند نه ڪندا آهيون. اهو ڪرڻ بلڪل آسان آهي: اسان جي چائلڊ ڪلاس ۾، اسان صرف هڪ طريقي جو اعلان ڪريون ٿا ساڳئي دستخط سان، جيئن والدين طبقي ۾ طريقو، ۽ پوءِ ان ۾ پنهنجو ڪوڊ لکون ٿا. مثال 1: هڪ طريقو ختم ڪرڻ.
public class Parent {

   public String name;

   public void setName(String nameNew) {
       name = nameNew;
  }

   public getName() {
      return name;
  }
}
printInfo() طريقو ڏيکاريندو "لوقا، نه!!!"
public class Child extends Parent{

   public void setName(String nameNew) {
       name = nameNew + ", No!!!";
  }

   public void printInfo() {
      setName("Luke");
      System.out.println(getName());
   }
}
هي اهو آهي جيڪو ٻار طبقو گڏ ڪرڻ وارو ڏسڻ جهڙو آهي:
public Child extends Parent {

   public String name;  // Inherited variable

   public void setName(String nameNew)  // Overridden method instead of the inherited method {

       name = nameNew + ", No!!!";
   }
   public getName() {  // Inherited method.

      return name;
   }
   public void printInfo() {

     setName("Luke");
     System.out.println( getName());
   }
}
مثال 2: ڪجھ وراثت وارو جادو (۽ طريقو ختم ڪرڻ).
public class Parent {

   public getName() {
      return "Luke";
  }
   public void printInfo() {

     System.out.println(getName());
   }
}
public class Child extends Parent {

   public getName() {
      return "Luke, I am your father";
  }
}
هن مثال ۾، جيڪڏهن printInfoطريقو (پيرنٽ ڪلاس کان) چائلڊ ڪلاس ۾ ختم نه ڪيو ويو آهي، جڏهن هن طريقي کي چائلڊ اعتراض تي سڏيو ويندو، ان جو getName()طريقو سڏيو ويندو بدران والدين طبقي جي getName()طريقي جي.
Parent parent = new Parent ();
parent.printnInfo();
هي ڪوڊ اسڪرين تي "لوقا" ڏيکاري ٿو.
Child child = new Child ();
child.printnInfo();
هي ڪوڊ ڏيکاري ٿو "لوقا، مان توهان جو پيء آهيان" اسڪرين تي.
هي اهو آهي جيڪو ٻار طبقو گڏ ڪرڻ وارو ڏسڻ جهڙو آهي:
public class Child extends Parent {

   public getName() {
      return "Luke, I am your father";
   }
   public void printInfo() {

     System.out.println(getName());
   }
}

3. لسٽون

جيڪڏهن توهان اڃا تائين نه مليا آهن لسٽون (فهرست)، هتي هڪ مختصر جائزو آهي. توهان مڪمل معلومات حاصل ڪري سگهو ٿا Levels 6-7 CodeGym ڪورس جي . لسٽن ۾ صفن سان تمام گھڻو عام آھي:
  • توهان هڪ خاص قسم جي ڊيٽا جو تمام گهڻو ذخيرو ڪري سگهو ٿا؛
  • اهي توهان کي انهن جي انڊيڪس ذريعي شيون حاصل ڪرڻ جي اجازت ڏين ٿا؛
  • عنصر انڊيڪس 0 کان شروع ٿئي ٿو.
لسٽن جا فائدا: صفن جي برعڪس، لسٽون متحرڪ طور تي سائيز کي تبديل ڪري سگھن ٿيون. جڏهن هڪ فهرست ٺاهي ويندي آهي، ان جي سائيز 0 آهي. جيئن توهان هڪ فهرست ۾ شيون شامل ڪندا آهيو، ان جي سائيز وڌي ويندي آهي. هتي هڪ فهرست ٺاهڻ جو هڪ مثال آهي:
ArrayList<String> myList = new ArrayList<String>(); // Create a new ArrayList
زاويه بریکٹ ۾ قيمت ڊيٽا جي قسم کي ظاهر ڪري ٿو جيڪا فهرست محفوظ ڪري سگهي ٿي. هتي فهرست سان ڪم ڪرڻ لاء ڪجهه طريقا آهن:
ڪوڊ ڪوڊ جو مختصر بيان
ArrayList<String> list = new ArrayList<String>(); تارن جي نئين فهرست ٺاھيو
list.add("name"); فهرست جي آخر ۾ هڪ عنصر شامل ڪريو
list.add(0, "name"); فهرست جي شروعات ۾ هڪ عنصر شامل ڪريو
String name = list.get(5); ان جي انڊيڪس ذريعي هڪ عنصر حاصل ڪريو
list.set(5, "new name"); ان جي انڊيڪس ذريعي هڪ عنصر تبديل ڪريو
int count = list.size(); لسٽ ۾ عناصر جو تعداد حاصل ڪريو
list.remove(4); فهرست مان هڪ عنصر حذف ڪريو
توھان ھيٺ ڏنل مضمونن مان لسٽن بابت وڌيڪ سکو سگھو ٿا:
  1. ArrayList ڪلاس
  2. تصويرن ۾ ArrayList
  3. ArrayList مان هڪ عنصر کي ختم ڪرڻ

4. صفون

هڪ ميٽرڪس ڇا آهي؟ هڪ ميٽرڪس هڪ مستطيل ٽيبل کان وڌيڪ ڪجهه ناهي جيڪو ڊيٽا سان ڀريو وڃي ٿو. ٻين لفظن ۾، اهو هڪ ٻه-dimensional صف آهي. جئين توھان ڄاڻو ٿا، جاوا ۾ صفون شيون آھن. هڪ معياري هڪ-dimensional intصف هن طرح نظر اچي ٿو:
int [] array = {12, 32, 43, 54, 15, 36, 67, 28};
اسان ان کي هن طرح تصور ڪري سگهون ٿا:
0 1 2 3 4 5 6 7
12 32 43 54 15 36 67 28
مٿين قطار سيلز جي پتي کي ظاهر ڪري ٿو. ٻين لفظن ۾، نمبر 67 حاصل ڪرڻ لاء، توهان کي انڊيڪس 6 سان صف جي عنصر تائين رسائي جي ضرورت آهي:
int number = array[6];
اهو سڀ ڪجهه بلڪل سادو آهي. هڪ ٻه-dimensional array is a array of one-dimensional arrays. جيڪڏهن توهان هن بابت پهريون ڀيرو ٻڌي رهيا آهيو، روڪيو ۽ ان کي پنهنجي سر ۾ تصور ڪريو. هڪ ٻه-dimensional صف هن طرح نظر اچي ٿو:
0 هڪ - dimensional صف هڪ طرفي صف
1 هڪ طرفي صف
2 هڪ طرفي صف
3 هڪ طرفي صف
4 هڪ طرفي صف
5 هڪ طرفي صف
6 هڪ طرفي صف
7 هڪ طرفي صف
ڪوڊ ۾:
int [][] matrix = {
{65, 99, 87, 90, 156, 75, 98, 78}, {76, 15, 76, 91, 66, 90, 15, 77}, {65, 96, 17, 25, 36, 75, 54, 78}, {59, 45, 68, 14, 57, 1, 9, 63}, {81, 74, 47, 52, 42, 785, 56, 96}, {66, 74, 58, 16, 98, 140, 55, 77}, {120, 99, 13, 90, 78, 98, 14, 78}, {20, 18, 74, 91, 96, 104, 105, 77} }
0 0 1 2 3 4 5 6 7
65 99 87 90 156 75 98 78
1 0 1 2 3 4 5 6 7
76 15 76 91 66 90 15 77
2 0 1 2 3 4 5 6 7
65 96 17 25 36 75 54 78
3 0 1 2 3 4 5 6 7
59 45 68 14 57 1 9 63
4 0 1 2 3 4 5 6 7
81 74 47 52 42 785 56 96
5 0 1 2 3 4 5 6 7
66 74 58 16 98 140 55 77
6 0 1 2 3 4 5 6 7
120 99 13 90 78 98 14 78
7 0 1 2 3 4 5 6 7
20 18 74 91 96 104 105 77
قيمت 47 حاصل ڪرڻ لاء، توهان کي ميٽرڪس عنصر ڏانهن اشارو ڪرڻو پوندو [4] [2].
int number = matrix[4][2];
توهان شايد محسوس ڪيو هوندو ته ميٽرڪس ڪوآرڊينيٽس ڪلاسيڪل مستطيل ڪوآرڊينيٽ سسٽم (Cartesian coordinate system) کان مختلف آهن. جڏهن توهان ميٽرڪس تائين رسائي حاصل ڪندا آهيو، توهان پهريون ڀيرو y همراه بيان ڪيو ۽ پوء x همعصر. رياضي ۾، اهو رواج آهي ته x جي همراهن کي پهرين بيان ڪيو وڃي، يعني (x، y). توهان شايد حيران ٿي رهيا آهيو: "خير، ڇو نه توهان جي ميٽرڪس جي نمائندگي کي گھمايو ۽ پوء (x، y) استعمال ڪندي عناصر تائين رسائي حاصل ڪريو؟ ائين ڪرڻ سان ميٽرڪس جو مواد تبديل نه ٿيندو". ها، ڪجھ به تبديل نه ٿيندو. پر پروگرامنگ جي دنيا ۾، قبول ٿيل مشق ميٽريس تائين رسائي آهي "پهرين y، پوء x طرفان". توھان کي ھن کي صحيح طريقي سان قبول ڪرڻ گھرجي. هاڻي اچو ته ميٽرڪس کي اسان جي انجڻ ( Gameڪلاس) ۾ پروجيڪٽ ڪرڻ بابت ڳالهايو. جئين توهان کي خبر آهي، انجڻ ۾ ڪيترائي طريقا آهن جيڪي مخصوص همراهن تي راند جي ميدان جي سيلن کي تبديل ڪن ٿا. مثال طور، setCellValue(int x, int y, String value)طريقو. اهو هڪ مخصوص سيل سيٽ ڪري ٿو همراهڪن سان (x، y) قدر پيٽرولر جي برابر. توهان شايد محسوس ڪيو هوندو ته هي طريقو پهريون ڀيرو x وٺندو آهي، جيئن ڪلاسيڪل ڪوآرڊينيٽ سسٽم ۾. انجڻ جا ٻيا طريقا به ساڳيءَ طرح ڪم ڪن ٿا. جڏهن راندين کي ترقي ڪندي، اهو اڪثر ڪري اسڪرين تي ميٽرڪس جي حالت کي ٻيهر پيدا ڪرڻ ضروري هوندو. اسان اهو ڪيئن ٿا ڪريون؟ پهرين، توهان کي لوپ ۾ سڀني ميٽرڪس عناصر ذريعي ٻيهر ڪرڻ جي ضرورت آهي. ٻيو، انهن مان هر هڪ لاء ڊسپلي جو طريقو ڪال ڪريو، REVERSED ڪوآرڊينيٽ استعمال ڪندي. مثال طور:
private void drawScene() {
    for (int i = 0; i < matrix.length; i++) {
        for (int j = 0; j < matrix[i].length; j++) {
            setCellValue(j, i, String.valueOf(matrix[i][j]));
        }
    }
}
قدرتي طور تي، ڦيرڦار ٻنهي طرفن ۾ ڪم ڪري ٿو. توھان پاس ڪري سگھوٿا (i، j) کي setCellValueطريقي سان ۽ ھڪ ئي وقت وٺي سگھوٿا عنصر [j][i] ميٽرڪس مان. همراهن کي ريورس ڪرڻ ٿورو مشڪل لڳي سگهي ٿو، پر توهان کي ان کي ياد رکڻ جي ضرورت آهي. ۽ هميشه، جيڪڏهن توهان کي ڪنهن به پريشاني سان منهن ڏيڻ گهرجي، توهان کي ڪاغذ جو هڪ ٽڪرو ۽ قلم هٿ ڪرڻ گهرجي، ميٽرڪس کي ڇڪيو، ۽ ميٽرڪس ۾ شامل عملن کي ٻيهر پيدا ڪرڻ گهرجي.

5. بي ترتيب نمبر

توهان بي ترتيب نمبر جنريٽر سان ڪيئن ڪم ڪندا آهيو؟ ڪلاس جو طريقو Gameبيان ڪري ٿو getRandomNumber(int). هود جي تحت، اهو Randomjava.util پيڪيج مان ڪلاس استعمال ڪري ٿو، پر توهان جي بي ترتيب نمبر جنريٽر سان ڪم ڪرڻ جو طريقو تبديل نٿو ٿئي. getRandomNumber(int)انٽيجر کي دليل طور وٺي ٿو. هي نمبر مٿيون حدون هوندو جيڪو جنريٽر واپس ڪري سگهي ٿو. هيٺين حد 0 آهي. اهم! جنريٽر ڪڏهن به مٿئين حد نمبر کي واپس نه ڪندو. مثال طور، جيڪڏهن توهان ڪال ڪريو ٿا getRandomNumber(3)، اهو بي ترتيب طور 0، 1، يا 2 موٽندو. جيئن توهان ڏسي سگهو ٿا، اهو 3 واپس نه ٿو ڪري سگهي. هن طريقي سان جنريٽر استعمال ڪرڻ بلڪل آسان آهي، پر ڪيترن ئي ڪيسن ۾ انتهائي اثرائتو آهي. فرض ڪريو ته توهان کي ڪنهن حد ۾ بي ترتيب نمبر حاصل ڪرڻ جي ضرورت آهي: تصور ڪريو ته توهان کي حد ۾ ٽن عددي نمبر جي ضرورت آهي [100..999]. جيئن توهان اڳ ۾ ئي ڄاڻو ٿا، گهٽ ۾ گهٽ واپسي نمبر 0 آهي. تنهنڪري توهان کي 100 شامل ڪرڻ جي ضرورت پوندي. پر هن صورت ۾، توهان کي خيال رکڻو پوندو ته مٿين حد کان وڌي نه وڃي. حاصل ڪرڻ لاءِ 999 کي وڌ ۾ وڌ بي ترتيب قدر حاصل ڪرڻ لاءِ، getRandomNumber(int)طريقي کي دليل 1000 سان سڏيو. پر ھاڻي اسان کي ياد آھي ته اسان نتيجي ۾ 100 شامل ڪري رھيا آھيون: ان جو مطلب آھي ته مٿئين حد کي 100 کان گھٽ ڪيو وڃي. ٻين لفظن ۾، ڪوڊ کي حاصل ڪريو اسان جو بي ترتيب ٽي عددي نمبر هن طرح نظر ايندو:
int number = 100 + getRandomNumber(900);
پر هن طريقيڪار کي آسان ڪرڻ لاء، انجڻ اهو getRandomNumber(int, int)طريقو مهيا ڪري ٿو جنهن جو پهريون پيٽرولر واپسي لاء گهٽ ۾ گهٽ نمبر آهي. هن طريقي کي استعمال ڪندي، پوئين مثال کي هن ريت لکي سگهجي ٿو:
int number = getRandomNumber(100, 1000);
بي ترتيب انگ اکر حاصل ڪرڻ لاءِ استعمال ڪري سگھجن ٿا بي ترتيب صف جي عنصر:
String [] names = {"Sarah", "Val", "Sergey"};
String randomName = names[getRandomNumber(names.length)]
ڪجهه واقعن کي ڪجهه امڪان سان پيدا ڪرڻ. انسانن لاءِ، صبح جي شروعات ڪجھ ممڪن منظرن سان ٿئي ٿي: اوور ننڊ - 50٪ موقعو؛ وقت تي جاڳيو - 40٪ موقعو؛ هڪ ڪلاڪ اڳ جاڳيو - 10٪ موقعو. تصور ڪريو ته توھان لکي رھيا آھيو صبح جو نتيجو جنريٽر. توھان کي ھڪڙي خاص امڪان سان واقعا پيدا ڪرڻ جي ضرورت آھي. هن کي ڪرڻ لاء، توهان کي ٻيهر استعمال ڪرڻ جي ضرورت آهي بي ترتيب نمبر جنريٽر. مختلف لاڳو ڪرڻ ممڪن آهن، پر سڀ کان آسان هيٺين الگورتھم تي ٻڌل هجڻ گهرجي:
  1. هڪ نمبر ٺاهڻ لاء استعمال ڪيل حدون مقرر ڪريو؛
  2. هڪ بي ترتيب نمبر ٺاهي؛
  3. حاصل ڪيل نمبر تي عمل ڪريو.
انهي صورت ۾، وڌ ۾ وڌ 10 ٿيندو. getRandomNumber(10)طريقي کي ڪال ڪريو ۽ تجزيو ڪيو ته اسان واپس ڪري سگھون ٿا. اهو 10 نمبر واپس ڪري سگهي ٿو (0 کان 9 تائين)، هر هڪ ساڳئي امڪان سان - 10٪. هاڻي اسان کي سڀني ممڪن نتيجن کي گڏ ڪرڻ جي ضرورت آهي ۽ انهن کي اسان جي ممڪن واقعن تي نقشو ڪرڻ گهرجي. توهان جو تصور شايد تمام گهڻو ممڪن مجموعن تي سوچي سگھي ٿو، پر هتي سڀ کان وڌيڪ واضح آهي: "جيڪڏهن بي ترتيب نمبر رينج ۾ آهي [0..4]، اسان وٽ "Overslept" واقعو آهي؛ جيڪڏهن نمبر حد ۾ آهي [5] ..8]، اسان وٽ "وقت تي جاڳڻ" واقعو آهي؛ ۽ جيڪڏهن انگ 9 آهي، ته پوء اسان وٽ "اڄ ڪلاڪ اڳ جاڳڻ" واقعو آهي. اهو تمام آسان آهي. حد ۾ 5 نمبر آهن [0 ..4]، جن مان هر هڪ 10٪ جي امڪان سان واپس ٿي سگهي ٿو، مجموعي طور تي 50٪ لاء؛ اتي 4 نمبر آهن رينج ۾ [5..8]، سٺو، ۽ 9 صرف هڪ نمبر آهي جيڪو ظاهر ٿئي ٿو. 10٪ جو امڪان. هي سڄو سليڪ ڊيزائن ڪوڊ ۾ اڃا به آسان نظر اچي ٿو:
int randomNumber = getRandomNumber(10);
if (randomNumber < 5) {
    System.out.println("Overslept");
} else if (randomNumber < 9) {
    System.out.println("Woke up on time");
} else {
    System.out.println("Woke up an hour early");
}
عام طور تي، بي ترتيب نمبر استعمال ڪرڻ جا ڪيترائي طريقا آهن. توهان صرف پنهنجي تخيل تائين محدود آهيو. پر اهي تمام مؤثر طور تي استعمال ڪيا ويا آهن جيڪڏهن توهان کي بار بار ڪجهه نتيجو حاصل ڪرڻ جي ضرورت آهي. پوء نئون نتيجو اڳئين کان مختلف ٿيندو. ڪجهه امڪان سان، يقينا. اهو سڀ ڪجهه هاڻي لاء آهي! جيڪڏهن توهان "راندين" سيڪشن بابت وڌيڪ سکڻ چاهيو ٿا، هتي ڪجهه مفيد دستاويز آهن جيڪي مدد ڪري سگهن ٿيون:
تبصرا
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION