JavaRush /Блоги Java /Random-TG /Чизе дар бораи массивҳо дар Java

Чизе дар бораи массивҳо дар Java

Дар гурӯҳ нашр шудааст
Салом! Пештар, дар вақти омӯзиш, мо бо an objectҳои ягона (ё намудҳои ибтидоӣ) кор мекардем. Аммо агар ба мо на бо як an object, балки бо тамоми коллектив кор кардан лозим бошад-чй? Масалан, мо мехохем руйхати рузи таваллуди хамаи коргарони корхонаамонро тартиб дихем. Он бояд 30 сатрро дар шакли формат дошта бошад: «Андрей Peterов, 25 январ». Дар ин ҷо сохтори махсуси додаҳо, массив ба мо кӯмак мекунад. Агар шумо массивро бо an objectҳои ҳаёти воқеӣ муқоиса кунед, сохтори он ба хазинаи бонкӣ бо ячейкаҳо хеле монанд аст: Чизе дар бораи массивҳо дар Java - 1Массив инчунин аз ҳуҷайраҳо иборат аст. Шумо метавонед дар ҳар як ҳуҷайра чизе гузоред. Дар ин ҳолат, барои дастрасӣ ба мундариҷа шумо бояд рақами ҳуҷайраро донед. Массив чунин сохта мешавад:
public class Main {

   public static void main(String[] args) {

       String [] birthdays = new String[10]; // array of Java strings

   }
}
Дар ин ҷо мо массиви аз 10 ячейка сохтаем. Шумо метавонед фавран ба баъзе хусусиятҳои массив диққат диҳед:
  1. Он маълумотро дар намуди ба таври қатъӣ муайяншуда нигоҳ медорад. Агар мо дар аввал массиви сатр офаридем String, мо наметавонем чизи дигареро дар он нигоҳ дорем. Навъи маълумот ҳангоми сохтани массив муайян карда мешавад. Ин аст он чизе, ки онро аз сейф фарқ мекунад, ки дар он муштарӣ ҳар чизеро, ки мехоҳад, нигоҳ дошта метавонад.
  2. Массив метавонад маълумоти навъҳои ибтидоиро (масалан, int), сатрҳоро ( String) ё an objectҳои як синф нигоҳ дорад. Аниқтараш, ҳатто худи an objectҳо не, балки ба ин an objectҳо пайванданд.
  3. Андозаи массив бояд ҳангоми эҷод муайян карда шавад. Шумо наметавонед онро баъдтар муайян кунед ё андозаи онро пас аз офариниш тағир диҳед.
Java нишон медиҳад, ки массив бо истифода аз қавсҳои мураббаъ []дар ҳар ду тарафи ифода сохта мешавад. Онҳо метавонанд пеш аз номи тағирёбандаи истинод ё баъд аз он нишон дода шаванд - он ба ҳар ду роҳ кор хоҳад кард:
//Java arrays of strings, two syntaxes
String [] birthdays = new String[10];
String birthdays [] = new String[10];
Агар шумо хоҳед, ки чизеро ба массив нависед, шумо бояд рақами чашмакеро, ки дар он арзиш навишта мешавад, муайян кунед. Рақамҳои ячейкаи массив аз 0 оғоз мешаванд. Аз сифр сар кардан як таҷрибаи маъмул дар барномасозӣ аст. Чӣ қадаре ки шумо ба он тезтар одат кунед, ҳамон қадар беҳтар аст :) Чизе дар бораи массивҳо дар Java - 2Яъне, агар шумо хоҳед, ки дар ячейкаи аввали массив каме арзиш гузоред , он чунин сурат мегирад:
public class Main {

   public static void main(String[] args) {

       String birthdays [] = new String[10];
       birthdays[0] = "Lena Eliseeva, March 12";
   }
}
Ҳоло дар ячейкаи аввали массивамон, ки зодрӯзи ҳамкоронро дар бар мегирад, сатри зодрӯзи Лена дорад. Бо муқоиса, шумо метавонед арзишҳои дигарро илова кунед:
public class Main {

   public static void main(String[] args) {

       String birthdays [] = new String[10];
       birthdays[0] = "Lena Eliseeva, March 12";
       birthdays[1] = "Kolya Romanov, May 18";
       birthdays[7] = "Olesya Ostapenko, January 3";
   }
}
Лутфан қайд кунед: мо рӯзи таваллуди Олесяро ба ҳуҷайраи ҳаштум илова кардем (оё шумо фаромӯш кардаед, ки чаро ҳуҷайраи рақами 7 ҳаштум аст?). Гарчанде ки ҳамаи ҳуҷайраҳои дигар пур карда намешаванд. Зарур нест, ки арзишҳоро ба массив бо тартиб нависед - чунин маҳдудият вуҷуд надорад. Аз тарафи дигар, агар шумо бо тартиб нависед, пайгирии шумораи ячейкаҳои озод ва ишғолшуда хеле осонтар мешавад ва дар массив ягон «сӯрохӣ» намемонад. Агар шумо хоҳед, ки мундариҷаи ячейкаи массивро гиред, ба монанди ячейкаи бонкӣ, шумо бояд рақами онро бидонед. Ин чунин анҷом дода мешавад:
public class Main {

   public static void main(String[] args) {

       String birthdays [] = new String[10];
       birthdays[0] = "Lena Eliseeva, March 12";
       birthdays[1] = "Kolya Romanov, May 18";
       birthdays[7] = "Olesya Ostapenko, January 3";

       String olesyaBirthday = birthdays[7];
       System.out.println(olesyaBirthday);
   }
}
Натиҷаи консол:

Олеся Остапенко, 3 января
Мо як тағирёбанда офаридем Stringва ба компилятор гуфт: "Дар массив чашмаки дорои индекси 7-ро пайдо кунед birthdaysва арзиши дар он ҷо нигоҳ дошташударо ба тағирёбанда таъин кунед String olesyaBirthday." Вай маҳз ҳамин тавр кард.

Дарозии массиви Java

Ҳангоми кор бо массив шумо метавонед дарозии онро бо истифода аз хосияти махсуси - length.
public class Main {

   public static void main(String[] args) {

       String birthdays [] = new String[10];
       birthdays[0] = "Lena Eliseeva, March 12";
       birthdays[1] = "Kolya Romanov, May 18";
       birthdays[7] = "Olesya Ostapenko, 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] = "Lena Eliseeva, March 12";
       birthdays[1] = "Kolya Romanov, May 18";
       birthdays[2] = "Vika Ignatova, July 12";
       birthdays[3] = "Denis Kozlov, September 7";
       birthdays[4] = "Maxim Maslennikov, November 9";
       birthdays[5] = "Roman Baranov, August 14";
       birthdays[6] = "Valery Pyatkina, April 1";
       birthdays[7] = "Olesya Ostapenko, January 3";
       birthdays[8] = "Kostya Gurko, October 19";
       birthdays[9] = "Seryozha Naumov, May 3";

       for (int i = 0; i < birthdays.length; i++) {
           System.out.println(birthdays[i]);
       }
   }
}
Дар давра мо тағирёбандаеро эҷод мекунем i, ки дар аввал ба сифр баробар аст. Дар ҳар як гузариш мо ячейкаи дорои индекси iро аз массиви худ мегирем ва арзиши онро дар консол чоп мекунем. Давра 10 такрор мекунад ва қиматҳои i аз 0 то 9 афзоиш меёбанд - танҳо мувофиқи индексҳои ячейкаҳои массиви мо! Ҳамин тариқ, мо ҳамаи арзишҳоро аз консол чоп мекунем.Дар birthdays[0]асл birthdays[9] , роҳҳои сохтани массив ба таври гуногун мавҷуданд. Масалан, массиви рақамҳоро 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

Массиви an objectҳои Java

Шумо аллакай шунидаед, ки массивҳои an objectҳо ва массивҳои ибтидоӣ дар хотира ба таври гуногун нигоҳ дошта мешаванд. Масалан, массиви се an objectро гирем 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("Hippopotamus");
       cats[2] = new Cat("Philip Markovich");
   }
}
Дар ин ҷо чанд чизро фаҳмидан лозим аст:
  1. Дар мавриди примитивҳо, массивҳои Java бисёр арзишҳои мушаххасро нигоҳ медоранд (ба монанди рақамҳо int). Дар мавриди an objectҳо, массив истинодҳои зиёдеро нигоҳ медорад. Массив catsаз се чашмак иборат аст, ки ҳар яки онҳо истинод ба an objectро дар бар мегирад Cat. Ҳар як истинод ба суроғае дар хотира ишора мекунад, ки дар он an object нигоҳ дошта мешавад.
  2. Элементҳои массив дар хотира дар як блок нигоҳ дошта мешаванд. Ин барои дастрасии бештар самаранок ва зудтар ба онҳо анҷом дода мешавад. Ҳамин тариқ, пайванд catsба блоки хотира ишора мекунад, ки дар он ҳама an objectҳо - унсурҳои массив нигоҳ дошта мешаванд. A cats[0]- ба суроғаи мушаххас дар дохor ин блок.
Чизе дар бораи массивҳо дар Java - 3Фаҳмидани он муҳим аст, ки массив на танҳо an objectҳоро нигоҳ дошта метавонад, балки худаш an object аст.

Массиви массивҳо ё массиви дученака

Дар асоси ин, мо бо саволе рӯ ба рӯ мешавем, ки оё мо метавонем, масалан, на массиви сатрҳо ё рақамҳо, балки массивҳоро эҷод кунем? Ва ҷавоб хоҳад буд - бале, мо метавонем! Массив метавонад ҳама гуна an objectҳоро дар дохor худ нигоҳ дорад, аз ҷумла массивҳои дигар. Чунин массив ду-ченака номида мешавад. Агар шумо онро дар расм тасвир кунед, он ба ҷадвали муқаррарӣ хеле монанд хоҳад буд. Масалан, мо мехоҳем массиверо созем, ки 3 массиви рақамҳоро intбо ҳар як ҳуҷайраи 10 нигоҳ дорад. Он чунин хоҳад буд: Чизе дар бораи массивҳо дар Java - 4Ҳар як сатр массиви рақамҳоро ифода мекунад int. Массиви якум ададҳои аз 1 то 10, дуюм - аз -1 то -10, сеюм - маҷмӯи ададҳои тасодуфиро дар бар мегирад. Ҳар яке аз ин массивҳо дар ячейкаи массиви дученакаи мо нигоҳ дошта мешаванд. Оғоз кардани массиви дученака дар code чунин менамояд:
public static void main(String[] args) {
   Cat[][] cats = new Cat[3][5];
}
Массиви гурбаҳои дученакаи мо 3 массиви 5 ҳуҷайраро нигоҳ медорад. Агар мо хоҳем, ки an objectи худро дар ячейкаи сеюми массиви дуюм ҷойгир кунем, мо инро чунин мекунем:
public static void main(String[] args) {
   Cat[][] cats = new Cat[3][5];
   cats[1][2] = new Cat("Fluff");
}
[1]ба массиви дуюм ишора мекунад ва [2]ба чашмаки сеюми ин массив ишора мекунад. Азбаски массиви дученака аз якчанд массив иборат аст, барои гузаштан аз он ва чопи ҳамаи арзишҳо ба консол (ё пур кардани ҳама ячейкаҳо), ба мо як ҳалқаи дукаратаи лона лозим аст:
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) мо тавассути тамоми чашмакҳои ҳар як массив такрор мекунем. Дар натиҷа, an object cats[0][0](массиви якум, ячейкаи якум) дар консол аввал нишон дода мешавад ва an objectи дуюм cats[0][1](массиви якум, ячейкаи дуюм) хоҳад буд. Вақте ки массиви аввал тамом мешавад, , cats[1][0], cats[1][1]ва cats[1][2]ғайра бароварда мешавад. Дар омади гап, оғозкунии зуд барои массивҳои дученака низ дастрас аст:
int[][] numbers = {{1,2,3}, {4,5,6}, {7,8,9}};
Одатан, мо массиви дученакаро numbersҳамчун - менависем int[3][3], аммо ин усул ба мо имкон медиҳад, ки қиматҳоро фавран муайян кунем. Чаро массиви дученака лозим шуда метавонад? Хуб, масалан, бо ёрии он шумо метавонед бозии машҳури "Киштии ҷангӣ"-ро ба осонӣ дубора эҳё кунед: Чизе дар бораи массивҳо дар Java - 5Сохтори майдони бозӣ дар "Киштии ҷангӣ" чунин аст, ки онро ба осонӣ тавсиф кардан мумкин аст: массиви дученака аз 10 массив, ҳар яки он 10 ҳуҷайра. . Шумо ду чунин массивро эҷод мекунед - барои худ ва рақиби шумо:
int [][] seaBattle = new int[10][10];
int [][] seaBattle2 = new int[10][10];
Шумо бо баъзе арзишҳо (масалан, рақамҳо ё аломатҳо *) ячейкаҳоеро, ки киштиҳои шумо дар онҳо ҷойгиранд, пур мекунед ва пас шумо ва рақиби шумо бо навбат ба рақамҳои ҳуҷайра занг мезанед:
  • ҷанги баҳрӣ[6][5]!
  • Гузашта! seaBattle2[6][6]!
  • Маҷрӯҳ!
  • seaBattle2[6][7]!
  • Маҷрӯҳ!
  • seaBattle2[6][8]!,
  • кушта шуд!

Захираҳои иловагӣ дар бораи массивҳо

Мехоҳед дар бораи массивҳо маълумоти бештар гиред? Лутфан ба мақолаҳои зер нигаред. Дар ин мавзӯъ бисёр маълумоти ҷолиб ва муфид вуҷуд дорад.
  1. Массивҳо дар Java - мақолаи муфассал дар бораи массивҳо, эҷод, оғозкунӣ ва истифодаи онҳо. Бо мисолхо.
  2. Синфи Arrays ва истифодаи он - мақола баъзе усулҳои синфро тавсиф мекунадArray
  3. Массивҳо аввалин лексияи JavaRush мебошад, ки ба массивҳо бахшида шудааст.
  4. Массивҳои бисёрченака - мақолаи муфассал дар бораи массивҳои бисёрченака бо мисолҳо.
  5. Массиви дарозии сифрро баргардонед, на нул - Муаллифи барномасозии муассир Ҷошуа Блох дар бораи чӣ гуна беҳтар баргардонидани массивҳои холӣ нақл мекунад.
Бо ин шиносоии аввалини мо бо массивҳо анҷом меёбад, аммо ин танҳо ибтидои ҳамкорӣ бо онҳост. Дар лексияҳои зерин мо роҳҳои ҷолиби истифодаи онҳоро мебинем ва инчунин мефаҳмем, ки Java чӣ гуна функсияҳои дарунсохтро барои кор бо ин сохтори додаҳо қулайтар дорад :)
Шарҳҳо
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION