Масиви. Частина-1. Одновимірні масиви

Масиви. Одновимірні масиви




1. Що таке масив? Призначення масивів у програмі

Масив – це набір (група) однотипних елементів, об’єднаних одним ім’ям. Масиви дозволяють зручно групувати інформацію та отримувати доступ до неї.

Масиви можуть бути одновимірними, двовимірними та багатовимірними.

Позиція елементу в масиві називається індексом. У мові Java позиція першого елементу в масиві починається з нуля.

Масив вважається одновимірним, якщо для визначення місцеположення елементу в масиві потрібно вказати значення одного індексу.

Масив вважається двовимірним, якщо для визначення місцеположення елементу в масиві потрібно вказати значення двох індексів.

 

2. Які типи даних можуть приймати елементи масиву?

Елементи масиву можуть бути будь-якого типу, допустимого в мові Java.

Цей тип визначає тип даних кожного з елементів, що складають даний масив.

Детальний опис примітивних типів даних можна знайти тут.

 

3. Як вигладає загальна форма опису одновимірного масиву?

Загальна форма опису одновимірного масиву:

тип ім’я_змінної[];

або

тип[] ім’я_змінної;

де

  • тип означає тип елементу масиву, що називається також базовим типом;
  • ім’я_змінної – назва масиву, за якою буде здійснюватись доступ до елементів масиву.

Після цього потрібно здійснити виділення пам’яті під масив. Загальна форма виділення пам’яті має вигляд:

ім’я_змінної = new тип[розмір];

де

  • тип – базовий тип елементів масиву;
  • розмір – кількість елементів масиву.

Виділення пам’яті для елементів масиву можна здійснювати одразу після його опису. У цьому випадку загальна форма опису масиву має вигляд:

тип ім’я_змінної[] = new тип[розмір];

або

тип[] ім’я_змінної = new тип[розмір];

При виділенні пам’яті елементи масиву заповнюються:

  • нульовими значеннями для числових типів;
  • значеннями false для логічного типу boolean;
  • пустими значеннями null для посилальних типів.

Отже, процес створення масиву проходить у два етапи:

  • оголошується змінна потрібного типу масиву;
  • з допомогою оператора new виділяється пам’ять для елементів масиву.

 

4. Приклад створення та використання одновимірного масиву з іменем d, в якому є 5 елементів типу int
// опис масиву з іменем d в якому елементи мають тип int
int d[];
d = new int[5]; // виділення пам'яті для 5 елементів типу int масиву d

// доступ до елементів масиву d
d[2] = -8; // у 3-й елемент масиву записати число -8
d[0] = -1000; // у 1-й елемент масиву записати число -1000
d[4] = 29;
d[5] = 300; // помилка - ArrayIndexOutOfBoundsException: 5

У даному прикладі створення масиву можна здійснювати різними способами.

Спосіб 1.

int d[];
d = new int[5];

Спосіб 2.

int[] d;
d = new int[5];

Спосіб 3.

int[] d = new int[5];

Спосіб 4.

int d[] = new int[5];

 

5. Приклад створення та використання одновимірного масиву f, що містить 10 елементів типу float.
float[] f; // масив з іменем f, елементи масиву мають тип float
f = new float[10]; // виділення пам'яті для 10 елементів масиву f

f[0] = 0.0f;
f[1] = 1.0f;
f[2] = 2.0f;
f[3] = 3f;
f[4] = 4.0f;
f[5] = 5.0f;

 

6. Приклад створення та використання одновимірного масиву x, в якому 20 елементів мають тип double.
// опис масиву x з 20 елементів типу double
double x[] = new double[20];

x[8] = -3.3998;
x[3] = -5.5; // x[3] = -5.5
x[3] = x[7]; // x[3] = 0.0

 

7. Приклад фрагменту коду занулення одновимірного масиву з іменем x, що містить 20 чисел типу double.

У даному прикладі занулюється масив дійсних чисел типу double.

double x[] = new double[20]; // опис масиву x з 20 елементів типу double
for (int i=0; i<x.length; i++)
    x[i] = 0.0;

 

8. Приклад обчислення суми елементів одновимірного масиву M, в якому є 50 дійсних чисел.
// обчислення суми елементів масиву
float[] M = new float[50];
float sum = 0; // шукана сума

// заповнення масиву даними
// ...

// цикл обчислення суми
for (int i=0; i<M.length; i++)
    sum = sum + M[i];

 

9. Приклад пошуку максимального значення в масиві зі 100 цілих чисел.
// пошук максимального значення
int[] A = new int[100]; // оголошення масиву
int max; // шукане значення

// заповнення масиву даними
// ...

// цикл пошуку максимального значення
max = A[0];
for (int i=1; i<A.length; i++)
    if (max < A[i])
        max = A[i];

 

10. Приклад сортування одновимірного масиву дійсних чисел методом вставки.
float M[] = new float[5]; // оголошення масиву з 5 елементів
float x; // допоміжна змінна

// ввід масиву M, заповнення значеннями
// ...

// цикл сортування методом вставки
for (int i=0; i<M.length-1; i++)
    for (int j=i; j>=0; j--)
        if (M[j]>M[j+1])
        {
            x = M[j];
            M[j] = M[j+1];
            M[j+1] = x;
        }

 

11. Як в Java здійснюється присвоєння одного масиву іншому? Метод clone().

Для копіювання масивів використовується метод clone() з бібліотеки Java.

Приклад присвоєння одного масиву іншому з використанням методу clone().

float[] f; // масив з іменем f, елементи масиву мають тип float
float f2[];
f = new float[5]; // виділення пам'яті для 5 елементів масиву f
f2 = new float[5]; // виділення пам'яті для масиву f2

f[0] = 0.0f;
f[1] = 1.0f;
f[2] = 2.0f;
f[3] = 3f;
f[4] = 4.0f;

// метод clone() - глибоке копіювання
f2 = f.clone(); // масиви f та f2 - різні масиви
f[2]=3.8f; // f2[2] = 3.8; f[2] = 2.0

Якщо написати:

f2 = f;

то обидві змінні f та f2 будуть вказувати на одну ділянку пам’яті.

 

12. Як здійснюється початкова ініціалізація одновимірного масиву?

В програмах на Java масиви можна ініціалізувати під час їх оголошення. У цьому випадку вказується список виразів, що розділяються символом кома ‘ , ‘. Цей список виразів береться у фігурні дужки.

Приклади ініціалізації масивів різних розмірностей та різних типів їх елементів.

// ініціалізація одновимірного масиву з 5 чисел типу double
double M[] = { 3.8, -2.55, 0.23, -11.45, 3.85 };

// ініціалізація одновимірного масиву з 5 чисел типу byte
byte[] B = { -1, 25, 44, -12, 14 };

// ініціалізація масиву з 10 елементів типу char
char C[] = { 'a', 'b', 'c', 'd', '5', ';', '9', 'N', '!', '

 

13. Приклад опису одновимірного масиву класів.

Нехай задано клас з іменем MyPoint. Потрібно описати об’єкт-змінну, що є масивом з 3 класів типу клас MyPoint.

// оголошення класу MyPoint
class MyPoint
{
    int x; // внутрішня змінна x
    int y; // внутрішня змінна y

    // реалізація методів класу
    public void SetXY(int xx, int yy)
    {
        x = xx;
        y = yy;
    }

    // методи класу
    public int GetX()
    { return x; }

    public int GetY()
    { return y; }
}

...

// використання масиву класів у програмі
// оголошення змінної типу масив класів MyPoint
MyPoint[] mp;

// виділення пам'яті для масиву класів
mp = new MyPoint[10];

// виділення пам'яті для кожного класу
for (int i=0; i<mp.length; i++)
    mp[i] = new MyPoint();

mp[0].SetXY(10, 20);
mp[1].SetXY(30, -100);
mp[2].SetXY(4, -345);

int d;
d = mp[2].GetY(); // d = -345
d = mp[0].GetX(); // d = 10
d = mp[1].GetY(); // d = -100

 

14. Приклад опису одновимірного масиву інтерфейсів.

Нехай задано клас з іменем MyPoint. Клас реалізує інтерфейс MyInterface. Потрібно описати об’єкт-змінну, що є масивом з 5 елементів типу інтерфейс MyInterface.

// оголошення інтерфейсу MyInterface
interface MyInterface
{
    void SetXY(int xx, int yy);
}

// оголошення класу MyPoint
class MyPoint implements MyInterface
{
    int x; // внутрішня змінна x
    int y; // внутрішня змінна y

    // реалізація методу інтерфейсу
    public void SetXY(int xx, int yy)
    {
        x = xx;
        y = yy;
    }

    // методи класу
    public int GetX()
    { return x; }

    public int GetY()
    { return y; }
}

...

// оголошення змінної типу масив класів MyPoint
MyPoint[] mp;

// виділення пам'яті для масиву класів
mp = new MyPoint[3];

// виділення пам'яті для кожного класу
for (int i=0; i<mp.length; i++)
    mp[i] = new MyPoint();

mp[2].SetXY(4, -345); // заповнити значеннями члени класу

int d = mp[2].GetY(); // d = -345

// опис змінної mi типу масив інтерфейсів MyInterface
MyInterface[] mi;

// виділення пам'яті під масив посилань на інтерфейси
mi = new MyInterface[5];
// виділення пам'яті під кожну змінну-інтерфейс
for (int i=0; i<mi.length; i++)
    mi[i] = new MyPoint();

// використання змінної mi
mi[0] = mp[2];  // mi[0] посилається на mp[2]
mi[0].SetXY(23, 35); // змінити mi[0] - означає змінити mp[2]
d = mp[2].GetY();    // d = 35

 

15. Приклад опису і використання одновимірного масиву рядків.

В мові Java для роботи з рядками введено особливий клас String. У даному прикладі продемонстровано операції:

  • оголошення масиву рядків та його ініціалізації;
  • копіювання масиву рядків в інший масив;
  • використання методу clone() для копіювання масивів рядків.
// оголошення та ініціалізація масиву рядків
String[] M1 =   {
                    "Text #1",
                    "Text #2",
                    "Text #3"
                };

// огололошення масиву M2
String[] M2;
M2 = new String[3];

// присвоїти один масив іншому
for (int i=0; i<3; i++)
    M2[i] = M1[i];

// присвоєння масивів з використанням методу clone()
String[] M3;
M3 = M1.clone();

 


Зв’язані теми