У цій статті будуть розглянуті (а більшою мірою, дані для самостійного аналізу) завдання на масиви. Качатимемо свої скіли в наступних напрямках:
Завдання на одновимірні масиви
Продовж послідовність
У даному ряді завдань вам потрібно буде:- Визначити закономірність, за якою формується та чи інша числова послідовність.
- Написати функцію, яка формує перші N елементів даної послідовності у вигляді цілісного масиву та виводить елементи масиву на екран.
1, 2, 3, 4, 5…
Крок 1: Визначити закономірність. Тут все просто - це ряд натуральних чисел. Крок 2: напишемо функцію, яка формуватиме перші N елементів даного ряду у вигляді масиву:
public class Main {
public static void main(String[] args) {
System.out.println(Arrays.toString(createArrayOfIntegers(10)));
// Output: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
}
public static int[] createArrayOfIntegers(int n) {
int[] array = new int[n];
for (int i = 1; i <= n; i++) {
array[i-1] = i;
}
return array;
}
}
Аналогічним чином необхідно написати функції, які б продовжабо такі послідовності:
A. 2, 4, 6, 8, 10...
B. 1, 3, 5, 7, 9...
C. 1, 4, 9, 16, 25...
D. 1, 8, 27, 64, 125...
E. 1, -1, 1, -1, 1, -1...
F. 1, -2, 3, -4, 5, -6...
G. 1, -4, 9, -16, 25....
H. 1, 0, 2, 0, 3, 0, 4....
I. 1, 2, 6, 24, 120, 720...
J. 1, 1, 2, 3, 5, 8, 13, 21…
Пошук елементів
У цьому ряді завдань необхідно знайти в готовому масиві елемент, який має якісь властивості. Наприклад, максимальний за значенням елемент. Для демонстрації напишемо код функції, яка приймає масив і визначає індекс максимального елемента в масиві, а потім виводить даний елемент разом з його індексом в консоль. Також продемонструю, як за допомогою класуjava.util.concurrent.ThreadLocalRandom
можна швидко згенерувати цілий масив заданої довжини, що складається з випадкових елементів:
public class Main {
public static void main(String[] args) {
int[] array = generateRandomIntArray(10);
findMax(array);
/*
Output:
Generated random array: [50551934, -551646189, 410352642, 1822778873, -1744293692, -1140287711, 878876868, -2116893120, -797503442, -703924530]
Max element is [1822778873] with index [3]
*/
}
public static int[] generateRandomIntArray(int n) {
int[] array = ThreadLocalRandom.current().ints().limit(n).toArray();
System.out.println("Generated random array: " + Arrays.toString(array));
return array;
}
public static void findMax(int[] array) {
int maxIndex = 0;
int max = array[maxIndex];
for (int i = 1; i < array.length; i++) {
if (array[i] > max) {
max = array[i];
maxIndex = i;
}
}
System.out.println(String.format("Max element is [%d] with index [%d]", max, maxIndex));
}
}
Тепер самі завдання. З масиву випадкових цілих елементів нам потрібно знайти:
- Максимум.
- Мінімум.
- Середнє арифметичне.
- Кількість елементів між максимальним та мінімальним елементом.
- Перше просте число.
- Останнє просте число.
- Кількість простих чисел у масиві.
Сортування
У цьому низці завдань необхідно відсортувати масив цілих елементів, використовуючи різні алгоритми сортування. Матеріалів у мережі з різних алгоритмів досить багато. Спробуйте спершу зрозуміти суть алгоритму, а потім спробуйте самостійно його реалізувати. Спочатку на папері (блок схема, псевдокод, як вам зручно), а потім у IDEA. Алгоритми для реалізації:- сортування бульбашкою;
- сортування вибором;
- сортування вставками;
- сортування злиттям.
Завдання на двовимірні масиви
Намалюй матрицю
У наступному ряді завдань необхідно малювати (виводити в консоль) двовимірні масиви (матриці), складені певним чином: вони повинні відповідати патерну заданому завданням. Наведу приклад. Нам необхідно побудувати і вивести на екран матрицюm*n
(де m
кількість рядків, а n
кількість елементів у рядку) виду:
1, 2, 3, 4
5, 6, 7, 8
9,10,11,12
Напишемо функцію, яка зробить все за нас, а також, наведемо функцію, яка буде гарно виводити матрицю в консоль (можливо, вона вам знадобиться):
public class Main {
public static void main(String[] args) {
createAndDrawMatrix(3, 4);
}
public static void createAndDrawMatrix(int m, int n) {
int[][] matrix = new int[m][n];
int value = 1;
for (int i = 0; i < m; i++) {
for (int j = 0; j < n; j++) {
matrix[i][j] = value;
value ++;
}
}
printMatrix(matrix);
}
public static void printMatrix(int[][] matrix) {
for (int[] array : matrix) {
for (int anInt : array) {
System.out.print(String.format("%3d", anInt));
}
System.out.println();
}
}
}
Тепер завдання: Вивести на екран матрицю m*n
виду: 4, 3, 2, 1 8, 7, 6, 5, 12,11,10, 9 ----------- 1, 4, 7 2, 5, 8 3, 6, 9 ----------- 9, 8, 7 6, 5, 4 3, 2, 1 ----------- 12,11,10, 9 8, 7, 6, 5, 4, 3, 2, 1
Пошук елементів
У цьому розділі необхідно реалізувати пошук різних елементів у різних частинах матриці: у певному стовпці або у певному рядку. Припустимо, у нас є матриця виду: -1 2 -3 4 -5 6 -7 8 -9 10 -11 12 -13 14 -15 16 -17 18 -19 20 -21 22 -23 24 -25 26 -27 28 -29 30 -31 32 -33 34 -35
Як приклад знайдемо кількість негативних елементів у третьому рядку:
public class Main {
public static void main(String[] args) {
int [][] matrix = {
{ -1, 2, -3, 4, -5, 6, -7},
{ 8, -9, 10, -11, 12, -13, 14},
{-15, 16, -17, 18, -19, 20, -21},
{ 22, -23, 24, -25, 26, -27, 28},
{-29, 30, -31, 32, -33, 34, -35}
};
findNegativeCountInRow(matrix, 3);
}
private static void findNegativeCountInRow(int[][] matrix, int rowNumber) {
int negativeCount = 0;
for (int element : matrix[rowNumber]){
if (element < 0) {
negativeCount ++;
}
}
System.out.println("Matrix: ");
printMatrix(matrix);
System.out.println(String.format("Has %d negative elements in #%d row ", negativeCount, rowNumber));
}
public static void printMatrix(int[][] matrix) {
for (int[] array : matrix) {
for (int anInt : array) {
System.out.print(String.format("%5d", anInt));
}
System.out.println();
}
}
}
В результаті виконання методу main, в консоль буде виведено:
Matrix:
-1 2 -3 4 -5 6 -7
8 -9 10 -11 12 -13 14
-15 16 -17 18 -19 20 -21
22 -23 24 -25 26 -27 28
-29 30 -31 32 -33 34 -35
Has 3 negative elements in #3 row
Тепер завдання. Для будь-якого непарного n
вивести матрицю n*n
виду:
1, -2, 3,
-4, 5, -6,
7, -8, 9
З цієї матриці вивести:
- усі негативні елементи;
- всі негативні елементи у рядку
i
; - всі негативні елементи у стовпці
j
; - всі елементи діагоналі (починаючи з верхнього лівого кута);
- всі елементи діагоналі (починаючи з нижнього лівого кута).
Морський бій
Останній розділ із зірочкою: без підказок та прикладів. Матриці ідеально підходять для програмування гри морського бою. Одним із етапів програмування цієї гри є розстановка кораблів на ігровому полі. Якщо ви вирішите ряд цих завдань, будьте впевнені, морський бій вам по зубах. Отже, дана матриця 10х10, що складається з нулів. Припустимо, що вона є полем для гри у морський бій. У цьому полі 0 - порожній осередок, 1 - корабель, або частина корабля. Написати функції, кожна з яких за правилами гри морський бій розставляє випадково:- 10 однопалубних кораблів;
- 10 двопалубних корбалів;
- 5 трипалубних кораблів;
- розставляє всі кораблі для гри в морський бій (4 однопалубні, 3 двопалубні, 2 трипалубні, 1 чотирипалубний).
ПЕРЕЙДІТЬ В ПОВНУ ВЕРСІЮ