W tym artykule rozważymy (i w większym stopniu umożliwimy niezależną analizę) problemy związane z tablicami. Będziemy doskonalić swoje umiejętności w następujących obszarach:
Zagadnienia dotyczące tablic jednowymiarowych
Kontynuuj sekwencję
W tej serii zadań będziesz musiał:- Określ wzór, według którego tworzona jest ta lub inna sekwencja liczbowa.
- Napisz funkcję, która tworzy pierwsze N elementów danej sekwencji w postaci tablicy liczb całkowitych i wyświetla elementy tablicy na ekranie.
1, 2, 3, 4, 5…
Krok 1: Zidentyfikuj wzór. Wszystko tutaj jest elementarne - to ciąg liczb naturalnych. Krok 2: napisz funkcję, która utworzy pierwsze N elementów danego wiersza w postaci tablicy:
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;
}
}
Podobnie należy napisać funkcje, które będą kontynuować następujące sekwencje:
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…
Wyszukaj elementy
W tej serii zadań konieczne jest znalezienie w gotowej tablicy elementu, który ma pewne właściwości. Na przykład element o maksymalnej wartości. Aby to zademonstrować, napiszmy kod funkcji, która pobiera tablicę i określa indeks maksymalnego elementu w tablicy, a następnie wysyła ten element wraz z jego indeksem do konsoli. Pokażę także, jak za pomocą tej klasyjava.util.concurrent.ThreadLocalRandom
można szybko wygenerować tablicę liczb całkowitych o zadanej długości, złożoną z losowych elementów:
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));
}
}
Teraz same zadania. Z tablicy losowych elementów całkowitych musimy znaleźć:
- Maksymalny.
- Minimum.
- Przeciętny.
- Liczba elementów pomiędzy elementami maksymalnymi i minimalnymi.
- Pierwsza liczba pierwsza.
- Ostatnia liczba pierwsza.
- Liczba liczb pierwszych w tablicy.
Sortowanie
W tej serii problemów należy posortować tablicę elementów całkowitych przy użyciu różnych algorytmów sortowania. W Internecie jest całkiem sporo materiałów na temat różnych algorytmów. Spróbuj najpierw zrozumieć istotę algorytmu, a następnie spróbuj go zaimplementować samodzielnie. Najpierw na papierze (schemat blokowy, pseudokod, co Ci pasuje), a potem w IDEA. Algorytmy realizacji:- sortowanie bąbelkowe;
- sortowanie przez wybór;
- sortowanie przez wstawianie;
- sortowanie przez scalanie.
Zagadnienia dotyczące tablic dwuwymiarowych
Narysuj macierz
W kolejnej serii zadań należy narysować (wyprowadzić do konsoli) dwuwymiarowe tablice (macierze) złożone w określony sposób: muszą one odpowiadać wzorowi określonemu w zadaniu. Dam ci przykład. Musimy zbudować i wyświetlić macierzm*n
(gdzie m
to liczba wierszy, a n
to liczba elementów w wierszu) postaci:
1, 2, 3, 4
5, 6, 7, 8
9,10,11,12
Napiszmy funkcję, która zrobi wszystko za nas, a także poda funkcję, która pięknie wyprowadzi macierz na konsolę (może Ci się przydać):
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();
}
}
}
Teraz zadania: Wyświetl macierz m*n
postaci: 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
Wyszukaj elementy
W tej sekcji należy zaimplementować wyszukiwanie różnych elementów w różnych częściach macierzy: w określonej kolumnie lub w określonym wierszu. Załóżmy, że mamy macierz postaci: -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
Dla przykładu znajdźmy liczbę elementów ujemnych w trzecim wierszu:
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();
}
}
}
W wyniku wykonania metody main na konsolę zostanie wyświetlony następujący komunikat:
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
Teraz zadania. Dla każdego nieparzystego n
wydrukuj macierz n*n
postaci:
1, -2, 3,
-4, 5, -6,
7, -8, 9
Z tej macierzy wyprowadź:
- wszystkie elementy negatywne;
- wszystkie elementy ujemne w ciągu
i
; - wszystkie elementy ujemne w kolumnie
j
; - wszystkie elementy ukośne (zaczynając od lewego górnego rogu);
- wszystkie elementy ukośne (zaczynając od lewego dolnego rogu).
Bitwa morska
Ostatnia sekcja oznaczona gwiazdką: brak wskazówek i przykładów. Matryce idealnie nadają się do programowania gry w bitwę morską. Jednym z etapów programowania tej gry jest rozmieszczenie statków na polu gry. Jeśli rozwiążesz wiele z tych problemów, możesz być pewien, że poradzisz sobie w walce morskiej. Zatem biorąc pod uwagę macierz 10x10 składającą się z zer. Załóżmy, że jest to pole do rozgrywania bitew morskich. W tym polu 0 to pusta komórka, 1 to statek lub część statku. Napisz funkcje, z których każda, zgodnie z zasadami gry w bitwę morską, losowo je rozmieści:- 10 statków jednopokładowych;
- 10 korbali dwupokładowych;
- 5 statków trójpokładowych;
- organizuje wszystkie statki do gry w bitwie morskiej (4 jednopokładowe, 3 dwupokładowe, 2 trzypokładowe, 1 czteropokładowy).
GO TO FULL VERSION