CodeGym /جاوا بلاگ /Random-SD /صفن بابت ڪجهه
John Squirrels
سطح
San Francisco

صفن بابت ڪجهه

گروپ ۾ شايع ٿيل
سلام اڳ ۾ توهان جي تربيت ۾، اسان ڪم ڪيو آهي اڪيلو شيون (۽ ابتدائي قسمون). پر ڇا جيڪڏهن اسان کي صرف هڪ بدران شين جي مڪمل گروپ سان ڪم ڪرڻ جي ضرورت آهي؟ مثال طور، چئو ته اسان اسان جي ڪمپني ۾ سڀني ملازمن جي جنم ڏينهن جي فهرست ٺاهڻ چاهيون ٿا. ان ۾ 30 تارن تي مشتمل ھئڻ گھرجي جنھن کي ھيٺ ڏنل فارميٽ ڪيو ويو آھي: "Sarah Huffman, January 25" اسان ھڪ خاص ڊيٽا ڍانچي مان فائدو وٺنداسين جنھن کي aray سڏيو ويندو آھي . جيڪڏهن اسان هڪ صف جو هڪ حقيقي شئي سان ڀيٽ ڪريون ٿا، ته اهو هڪ بئنڪ والٽ سان بلڪل ملندڙ جلندڙ آهي جنهن ۾ حفاظتي ذخيرو خانن سان گڏ آهي: صفن بابت ڪجهه - 1هڪ صف پڻ "باڪس" تي مشتمل آهي. توهان هر دٻي ۾ ڪجهه (هڪ عنصر) وجهي سگهو ٿا. هڪ عنصر تائين رسائي حاصل ڪرڻ لاء، توهان کي ڄاڻڻ جي ضرورت آهي ان جي باڪس نمبر (انڊيڪس). هن طرح هڪ صف ٺاهي وئي آهي:

public class Main {

   public static void main(String[] args) {

       String [] birthdays = new String[10];
      
   }
}
هتي اسان هڪ صف ٺاهيندا آهيون جيڪا 10 عناصر رکي ٿي. توھان فوري طور تي صفن جي ڪجھ خصوصيتن کي نوٽ ڪري سگھو ٿا:
  1. اهو هڪ چڱي طرح بيان ڪيل ڊيٽا جي قسم جي عناصر کي ذخيرو ڪري ٿو . جيڪڏهن اسان هڪ String array ٺاهي سگهون ٿا، اسان ان ۾ ٻيو ڪجهه به ذخيرو نٿا ڪري سگهون. ڊيٽا جو قسم بيان ڪيو ويو آهي جڏهن صف ٺاهي وئي آهي . هي اهو آهي جتي اهو مختلف آهي حفاظتي ذخيرو باڪس کان (جنهن ۾ هڪ گراهڪ ذخيرو ڪري سگهي ٿو جيڪو هو چاهي ٿو).

  2. ان جي سائيز کي بيان ڪيو وڃي جڏهن صف ٺاهي وئي آهي . توهان ان کي بعد ۾ ظاهر نه ڪري سگهو ٿا يا ان جي سائيز کي ترتيب ڏيڻ کان پوء تبديل ڪري سگهو ٿا .
حقيقت اها آهي ته اسان هڪ صف ٺاهي رهيا آهيون اظهار جي ٻنهي پاسن تي چورس بریکٹ طرفان اشارو ڪيو ويو آهي. اهي حوالو متغير جي نالي کان اڳ يا بعد ۾ بيان ڪري سگھجن ٿيون. ڪنهن به طريقي سان ڪم ڪندو:

String [] birthdays = new String[10];
String birthdays [] = new String[10];
جيڪڏھن توھان ڪجھھ لکڻ چاھيو ٿا ھڪڙي صف ۾، توھان کي باڪس جي انڊيڪس بيان ڪرڻ جي ضرورت آھي جتي قيمت لکيو ويندو. هڪ صف ۾ خانن کي 0 کان شروع ڪندي ڳڻيو ويندو آهي. صفر کان شروع ٿيندڙ ڳڻپ پروگرامنگ ۾ هڪ تمام عام رواج آهي. جيترو جلدي توهان ان کي استعمال ڪيو، بهتر :) ان جو مطلب آهي، جيڪڏهن توهان پهرين باڪسصفن بابت ڪجهه - 2 ۾ ڪجهه قدر رکڻ چاهيو ٿا ، توهان هي ڪريو ٿا:

public class Main {

   public static void main(String[] args) {

       String birthdays [] = new String[10];
       birthdays[0] = "Jana Russell, March 12";
   }
}
هاڻي جينا جي سالگره اسان جي ملازم جي سالگره جي صف جي پهرين سيل ۾ محفوظ ڪئي وئي آهي: توهان ساڳئي طريقي سان ٻيا قدر شامل ڪري سگهو ٿا:

public class Main {

   public static void main(String[] args) {

       String birthdays [] = new String[10];
       birthdays[0] = "Jana Russell, March 12";
       birthdays[1] = "Landon Chan, May 18";
       birthdays[7] = "Rosie Mills, January 3";
   }
}
نوٽ ڪريو ته اسان روزي جي سالگرهه کي اٺين باڪس ۾ شامل ڪيو آهي (توهان اهو نه وساريو آهي ته باڪس نمبر 7 اٺين باڪس ڇو آهي، ڇا توهان؟) . توهان ڏسي سگهو ٿا ته اسان ٻين سڀني سيلن کي نه ڀريو آهي. اسان کي آرڊر ۾ قدر لکڻ جي ضرورت ناهي. اهڙي ڪا ضرورت ناهي. يقينن، ترتيب ۾ عناصر لکڻ ان کي وڌيڪ آسان بڻائي ٿو اهو ٽريڪ رکڻ لاءِ ته ڪيترا باڪس آزاد آهن ۽ ڪيترا قبضو ٿيل آهن، ۽ اهو صف کي ”سوراخ“ ٿيڻ کان روڪي ٿو. جيڪڏھن توھان چاھيو ٿا حاصل ڪريو مواد مان ھڪڙي دٻي مان، پوءِ (جھڙوڪ حفاظتي ذخيرو خاني سان) توھان کي ان جو نمبر ڄاڻڻ گھرجي. اهو ڪيئن ڪيو ويو آهي:

public class Main {

   public static void main(String[] args) {

       String birthdays [] = new String[10];
       birthdays[0] = "Jana Russell, March 12";
       birthdays[1] = "Landon Chan, May 18";
       birthdays[7] = "Rosie Mills, January 3";

       String rosieBirthday = birthdays[7];
       System.out.println(rosieBirthday);
   }
}
ڪنسول آئوٽ پُٽ: روزي ملز، جنوري 3 اسان ھڪ متغير ٺاھيو ۽ گڏ ڪرڻ واري کي ٻڌايو: ” سالگره جيString صف ۾ انڊيڪس 7 سان باڪس ڳولھيو ، ۽ اُتي موجود قدر کي متغير rosieBirthday کي تفويض ڪريو “. ۽ اهو بلڪل ائين ئي ٿيو. جڏهن صفن سان ڪم ڪري رهيا آهيون، اسان آساني سان ڳولي سگهون ٿا انهن جي ڊيگهه هڪ خاص ملڪيت استعمال ڪندي: length . String

public class Main {

   public static void main(String[] args) {

       String birthdays [] = new String[10];
       birthdays[0] = "Jana Russell, March 12";
       birthdays[1] = "Landon Chan, May 18";
       birthdays[7] = "Rosie Mills, January 3";

       int birthdaysLength = birthdays.length;
       System.out.println(birthdaysLength);
   }
}
ڪنسول آئوٽ پُٽ: 10 نوٽ: lengthپراپرٽي صفن جي سائيز کي محفوظ ڪري ٿي، نه ته مڪمل ٿيل خانن جو تعداد. اسان جي صف صرف 3 قدرن کي ذخيرو ڪري ٿي، پر اسان ان جي سائيز کي 10 طور ظاهر ڪيو جڏهن اسان ان کي ٺاهيو. ۽ اھو اھو ئي قدر آھي جيڪو lengthفيلڊ موٽائي ٿو. اهو ڪم ۾ ڇو ايندو؟ خير، فرض ڪريو ته توهان سڀني جنم ڏينهن جي فهرست ڏيکارڻ چاهيو ٿا (تصديق ڪرڻ لاءِ ته ڪو به وساري نه ويو آهي). توھان ھي ڪري سگھو ٿا ھڪڙي سادي لوپ ۾:

public class Main {

   public static void main(String[] args) {

       String birthdays [] = new String[10];
       birthdays[0] = "Jana Russell, March 12";
       birthdays[1] = "Landon Chan, May 18";
       birthdays[2] = "Jeremiah Leonard, July 12";
       birthdays [3] = "Kenny Russo, September 7";
       birthdays[4] = "Tommie Barnes, November 9";
       birthdays [5] = "Roman Baranov, August 14";
       birthdays [6] = "Chanice Andersen, April 1";
       birthdays[7] = "Rosie Mills, January 3";
       birthdays [8] = "Keenan West, October 19";
       birthdays [9] = "Abraham McArthur, May 3";

       for (int i = 0; i < birthdays.length; i++) {
           System.out.println(birthdays[i]);
       }
   }
}
لوپ ۾، اسان variable جو اعلان ڪريون ٿا i، جيڪو شروع ڪيو ويو آهي صفر. هر پاس تي، اسان عنصر حاصل ڪندا آهيون انڊيڪس i سان اسان جي صف مان ۽ ان جي قيمت ڏيکاري. لوپ 10 ورهاڱي ڪندو، ۽ آئون 0 کان 9 تائين وڌائيندس- ۽ انگ اسان جي صف جي عنصرن جا اشارا ٿيندا! نتيجي طور، اسين سڀ قدر ڏيکارينداسين سالگره[0] کان جنم ڏينهن تائين [9] اصل ۾، ٻيو طريقو آهي ته توهان هڪ صف ٺاهي سگهو ٿا. مثال طور، توھان s جي ھڪڙي ترتيب ٺاھي سگھوٿا intھن طرح:

public class Main {

   public static void main(String[] args) {
       int numbers [] = {7, 12, 8, 4, 33, 79, 1, 16, 2};
   }
}
هن ٽيڪنڪ کي "شارٽ کٽ شروعاتي" سڏيو ويندو آهي. اهو ڪافي آسان آهي، ڇاڪاڻ ته اسان هڪ ئي وقت هڪ صف ٺاهيندا آهيون ۽ ان کي قدرن سان ڀريندا آهيون. اسان کي صف جي سائيز کي واضح طور تي بيان ڪرڻ جي ضرورت ناهي: شارٽ کٽ جي شروعات سان، فيلڊ lengthخودڪار طريقي سان سيٽ ڪيو ويندو آهي.

public class Main {

   public static void main(String[] args) {
       int numbers [] = {7, 12, 8, 4, 33, 79, 1, 16, 2};
       System.out.println(numbers.length);
   }
}
ڪنسول آئوٽ: 9 ھاڻي، ٿورڙو ٿورڙو ته ڪيئن ميموري ۾ arrays محفوظ ٿيل آھن. اچو ته چئون ته اسان وٽ ٽن Catشين جو هڪ صف آهي:

public class Cat {

   private String name;

   public Cat(String name) {
       this.name = name;
   }

   public static void main(String[] args) {

       Cat[] cats = new Cat[3];
       cats[0] = new Cat("Thomas");
       cats[1] = new Cat("Behemoth");
       cats[2] = new Cat("Lionel Messi");
   }
}
توھان کي ھتي ڪجھ شيون سمجھڻ جي ضرورت آھي:
  1. primitives جي صورت ۾، هڪ صف مخصوص قدرن جو هڪ سيٽ محفوظ ڪري ٿو (مثال طور ints). شين جي صورت ۾، هڪ صف حوالن جو هڪ سيٽ محفوظ ڪري ٿو .
    صف catsٽن عناصر تي مشتمل آهي، جن مان هر هڪ اعتراض جو حوالوCat آهي . حوالن مان هر هڪ ميموري ايڊريس ڏانهن اشارو ڪري ٿو جتي لاڳاپيل اعتراض ذخيرو ٿيل آهي.

  2. ميموري ۾ ھڪڙي بلاڪ ۾ آري عناصر ترتيب ڏنل آھن. اهو ڪيو ويو آهي انهن کي جلدي ۽ موثر طريقي سان رسائي حاصل ڪرڻ جي اجازت ڏيڻ لاءِ.
اهڙيء طرح، catsميموري جي بلاڪ جو حوالو ڏئي ٿو جتي سڀئي شيون (صف عناصر) ذخيرو ٿيل آهن. Cats[0]هن بلاڪ جي اندر هڪ مخصوص ايڊريس جو حوالو. صفن بابت ڪجهه - 3 اهو سمجهڻ ضروري آهي ته هڪ صف صرف شيون ذخيرو نٿو ڪري: اهو پاڻ هڪ اعتراض آهي. اهو اسان کي اهو سوال پيدا ڪري ٿو ته ڇا اسان نه رڳو تارن يا انگن جو سلسلو ٺاهي سگهون ٿا، پر صفن جي صفن کي پڻ . ۽ جواب آهي ها، اسان ڪري سگهون ٿا! هڪ صف ڪنهن به شئي کي محفوظ ڪري سگهي ٿي، بشمول ٻين صفن سميت. اهڙي صف کي ٻه طرفي چئبو آهي . جيڪڏهن اسان ان کي بصري طور تي نمائندگي ڪندا هئاسين، اهو هڪ عام ٽيبل وانگر هوندو. فرض ڪريو، اسان 3 صفن جو هڪ صف ٺاهڻ چاهيون ٿا جيڪو هر هڪ 10 ints ذخيرو ڪري سگهي ٿو. اهو هن طرح نظر ايندو:
صفن بابت ڪجهه - 4
هر لڪير هڪ intصف جي نمائندگي ڪري ٿو. پهرين صف ۾ 1 کان 10 تائين انگ شامل آهن، ٻئي صف ۾ -1 کان -10 تائين، ۽ ٽيون - بي ترتيب نمبرن جو هڪ سيٽ. انهن صفن مان هر هڪ اسان جي ٻه-dimensional array جي خانن ۾ محفوظ ٿيل آهي. ڪوڊ ۾، هڪ ٻه-dimensional صف جي شروعات هن طرح نظر اچي ٿو:

public static void main(String[] args) {
   Cat[][] cats = new Cat[3][5];
}
اسان جي ٻه-dimensional array cats اسٽور 3 arrays سان گڏ 5 باڪس هر صف ۾. جيڪڏهن اسان ڪنهن شئي کي ٻئي صف جي ٽئين خاني ۾ رکڻ چاهيون ٿا ، ته اسين هي ڪنداسين:

public static void main(String[] args) {
   Cat[][] cats = new Cat[3][5];
   cats[1][2] = new Cat("Fluffy");
}
[1]ٻئي صف کي اشارو ڪري ٿو، ۽ [2]انهي صف جي ٽئين باڪس کي اشارو ڪري ٿو. ڇاڪاڻ ته هڪ ٻه-dimensional صف ڪيترن ئي arrays تي مشتمل آهي، ان جي ذريعي ٻيهر ڪرڻ ۽ ان جي سڀني قدرن کي ظاهر ڪرڻ لاء (يا ان جي سڀني عناصر کي آباد ڪرڻ) لاء، اسان کي هڪ نسٽڊ لوپ جي ضرورت آهي:

for (int i = 0; i < cats.length; i++) {
   for (int j = 0; j < cats[i].length; j++) {
       System.out.println(cats[i][j]);
   }
}
ٻاهرين لوپ ۾ (متغير i)، اسان پنهنجي ٻه طرفي سرن ۾ سڀني صفن کي ٻيهر ڏيون ٿا. اندروني لوپ (متغير j) ۾، اسان هر صف جي سڀني عنصرن مان گذري ٿو. نتيجي طور، cats[0][0] (پهريون صف، پهريون عنصر) ڏيکاريو ويندو پھريون، بعد ۾ cats[0][1] (پهرين صف، ٻيو عنصر). پهرين صف ۾ وڃڻ کان پوءِ، اسان ڏيکارينداسين cats[1][0] , cats[1][1] , cats[1][2] , etc. رستي ۾، ٻه-dimensional arrays پڻ سپورٽ ڪندا مختصر هٿ جي شروعات:

int[][] numbers = {{1,2,3}, {4,5,6}, {7,8,9}};
عام طور تي، اسان ٻه-dimensional صف کي numbersهڪ طور اعلان ڪنداسين int[3][3]، پر هي شارٽ هينڊ اسان کي فوري طور تي قدر بيان ڪرڻ جي اجازت ڏئي ٿو. توهان کي ٻه-dimensional صف جي ضرورت ڇو آهي؟ چڱو، توهان مشهور "بيٽل شپ" راند کي آساني سان ٻيهر ٺاهڻ لاءِ هڪ استعمال ڪري سگهو ٿا: صفن بابت ڪجهه - 5 "بيٽل شپ" ۾، راند جي ميدان جي جوڙجڪ آساني سان بيان ڪري سگهجي ٿي: 10 صفن جي هڪ ٻه طرفي صف جنهن ۾ هر هڪ ۾ 10 عناصر شامل آهن. توھان انھن مان ٻن صفن کي ٺاھيو (ھڪڙو توھان لاءِ ۽ ھڪڙو توھان جي مخالف لاءِ)

int[][] battleshipBoard1 = new int[10][10];
int[][] battleshipBoard2 = new int[10][10];
ڪجھ قدر استعمال ڪريو (مثال طور نمبر يا علامت) عناصر کي آباد ڪرڻ لاءِ جيڪي توھان جي ٻيڙين جي جڳھ سان ملن ٿا، ۽ پوءِ مخصوص عناصر لاءِ ڪوآرڊينيٽس کي ڪال ڪندي موڙ وٺو:
  • ويڙهاڪ بورڊ1[0][2]!
  • مس! ويڙهاڪ بورڊ2[2][4]!
  • مارو!
  • ويڙهاڪ بورڊ2[2][5]!
  • مارو!
  • ويڙهاڪ بورڊ2[2][6]!,
  • غرق!
هي اسان جي صفن جو پهريون تعارف ختم ڪري ٿو، پر اهو صرف انهن سان اسان جي رابطي جي شروعات آهي. هيٺين سبقن ۾، اسين دلچسپ طريقا ڏسندا سين جيڪي استعمال ڪري سگھجن ٿا، ۽ اھو پڻ سکو ته ڪھڙا بلٽ ان فنڪشن جاوا اسان کي ھن ڊيٽا ڍانچي سان وڌيڪ آسانيءَ سان ڪم ڪرڻ جي اجازت ڏئي ٿو :)
تبصرا
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION