Дії із двома масивами. Частина ІІ

Конкатенація (об’єднання) двох масивів.
У роботі програміста часто виникає потреба об’єднувати данні, частіше за все програмісту приходиться писати код програми де необхідно об’єднати два масиви.
Уявіть що ви зайшли до комори і побачили наступну картину: стоїть два неповні ящики яблук, а вам треба поставити ящик груш, та ящики із яблуками займають все місце у коморі. Що ви будете робити? Звичайно ви перекладайте (об’єднаєте) яблука у один ящик і таким чином, у вас вивільниться місце для груш.
Приблизно це відбудиться і у коді програми.
Комора – це пам’ять комп’ютера;
Яблука, груші – це масиви із певними даними;
Ваші дії – це оптимізація простору.
Задача. Маємо два масиви:
int [] x = {3,2,7,-5,9,-3,-8,1};       // яблука length = 8
int [] y = {6,4,9,3,7};                // яблука length = 5
як видно із умови, масиви мають певну довжину та певні значення. Наша задача об’єднати масиви в один.
Оголосимо новий масив:
int [] result;
Виділимо місце під масив у пам’яті комп’ютера. Для цього використаємо властивість
result = new int [x.length+y.length];
тепер перепишемо елементи масиву х до масиву result за допомогою циклу:
for(int i = 0; i < x.length;i++){
result [i] = x [i];
}
Тепер залишилось додати до масиву result елементи із масиву у.
Якщо ми просто створимо новий цикл, то як ми зможемо записати чи вказати з якого саме індексу, номеру елементу, у масиві result на потрібно записувати елементи масиву у. Для того щоб до масиву даних result додати елементи із іншого масиву (масив у) необхідно застосувати різницю індексів.
Так як наш масив складається із двох довжин інших масивів то очевидно, що ми можемо застосувати різницю цих індексів.
x.length+y.length = 8+5;
в свою чергу x.length =  х0 + х1 + х2 + х3 + х4 + х5 + х6 + х7 ;
тоді y.length = у0 + у1 + у2 + у3 + у4;
очевидно result. Length = х0 + х1 + х2 + х3 + х4 + х5 + х6 + х7 + у0 + у1 + у2 + у3 + у4; Значить нам потрібно від загальної довжини масиву result відняти довжину масиву х. Але! Цикл for(){} не знає яка довжина кінцева. Його початкове значення індексу дорівнює нулю!! Тому ми різницю індексів замінимо на суму.
for(int i = 0; i < y.length;i++){
result [i+x.length] = y [i];
}
Залишилось переглянути масив result . Для цього створимо ще один цикл:
for(int i = 0; i < result.length;i++){
System.out.print(result[i]+", ");

}


Деконкатенація масиву.
(Розбиття одного масиву на два інших)
Маємо масив цілих чисел  int [] x = {3,2,7,-5,9,-3,-8,1};        // length = 8
Задача відокремити у два різних масиви додатні і від’ємні числа.
Щоб написати програмний код для реалізацій даної задачі необхідно знати скільки у даному масиві додатніх чисел, це допоможе нам визначити довжину нового масиву. Для цього треба за допомогою циклу переглянути та порахувати кількість додатніх елементів у масиві – подумали ви… і ви були б правими!!! Але комп’ютер вважає число 0 додатнім числом! Тому краще і правильніше шукати кількість від’ємних чисел. Тому шукаємо від’ємні числа:
public static void main(String[] args) {
             int [] x = {3,2,7,-5,9,-3,-8,1};
             int neg = 0;
             for(int i = 0; i < x.length;i++){
                    if(x[i] < 0){
                           neg++;
                           System.out.print(x[i]+", ");
                    }
             }
             System.out.println();
             System.out.println(neg);
             }
Отже маємо кількість від’ємних чисел (довжина масиву від’ємних чисел). Значить можемо вирахувати завдяки поняттю «Різниця індексів» довжину іншого масиву, масиву додатніх чисел.
Створюємо масиви для додатніх та від’ємних чисел:
int [] poz = new int [x.length - negative];

int [] neg = new int [negative];
А тепер спробуйте самостійно дописати код програми.





Комментарии

Популярные сообщения из этого блога

Матриці