Cet article examinera (et, dans une plus large mesure, fournira une analyse indépendante) les problèmes impliquant les tableaux. Nous améliorerons nos compétences dans les domaines suivants :
Problèmes impliquant des tableaux unidimensionnels
Continuer la séquence
Dans cette série de tâches, vous devrez :- Déterminer le modèle selon lequel telle ou telle séquence numérique est formée.
- Écrivez une fonction qui forme les N premiers éléments d'une séquence donnée sous forme de tableau d'entiers et affiche les éléments du tableau à l'écran.
1, 2, 3, 4, 5…
Étape 1 : Identifiez le modèle. Ici, tout est élémentaire : c’est une série de nombres naturels. Étape 2 : écrire une fonction qui formera les N premiers éléments d'une ligne donnée sous forme de tableau :
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;
}
}
De même, il faut écrire des fonctions qui continueraient les séquences suivantes :
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…
Rechercher des éléments
Dans cette série de tâches, il est nécessaire de trouver un élément dans le tableau fini qui possède certaines propriétés. Par exemple, l'élément avec la valeur maximale. Pour le démontrer, écrivons le code d'une fonction qui prend un tableau et détermine l'index de l'élément maximum dans le tableau, puis affiche cet élément avec son index sur la console. Je vais également montrer comment, à l'aide de la classe,java.util.concurrent.ThreadLocalRandom
vous pouvez générer rapidement un tableau d'entiers d'une longueur donnée, composé d'éléments aléatoires :
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));
}
}
Maintenant les tâches elles-mêmes. À partir d’un tableau d’éléments entiers aléatoires, nous devons trouver :
- Maximum.
- Le minimum.
- Moyenne.
- Le nombre d'éléments entre les éléments maximum et minimum.
- Le premier nombre premier.
- Le dernier nombre premier.
- Le nombre de nombres premiers dans le tableau.
Tri
Dans cette série de problèmes, vous devez trier un tableau d’éléments entiers à l’aide de divers algorithmes de tri. Il existe de nombreux documents sur divers algorithmes sur Internet. Essayez d'abord de comprendre l'essence de l'algorithme, puis essayez de le mettre en œuvre vous-même. D'abord sur papier (schéma fonctionnel, pseudocode, tout ce qui vous convient), puis dans IDEA. Algorithmes de mise en œuvre :- tri à bulles ;
- tri par sélection ;
- tri par insertion;
- tri par fusion.
Problèmes impliquant des tableaux bidimensionnels
Dessine la matrice
Dans la prochaine série de tâches, il est nécessaire de dessiner (sortie sur la console) des tableaux bidimensionnels (matrices) composés d'une certaine manière : ils doivent correspondre au modèle spécifié par la tâche. Laisse moi te donner un exemple. Nous devons construire et afficher une matricem*n
(où m
est le nombre de lignes et n
est le nombre d'éléments dans la ligne) du formulaire :
1, 2, 3, 4
5, 6, 7, 8
9,10,11,12
Écrivons une fonction qui fera tout pour nous, et fournirons également une fonction qui affichera magnifiquement la matrice sur la console (vous la trouverez peut-être utile) :
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();
}
}
}
Maintenant tâches : Afficher une matrice m*n
du formulaire : 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
Rechercher des éléments
Dans cette section, il est nécessaire de mettre en œuvre une recherche de différents éléments dans différentes parties de la matrice : dans une colonne spécifique ou dans une ligne spécifique. Supposons que nous ayons une matrice de la forme : -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
A titre d'exemple, trouvons le nombre d'éléments négatifs dans la troisième ligne :
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();
}
}
}
À la suite de l'exécution de la méthode main, les éléments suivants seront affichés sur la console :
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
Maintenant les tâches. Pour tout impair, n
imprimez une matrice n*n
du formulaire :
1, -2, 3,
-4, 5, -6,
7, -8, 9
De cette matrice dériver :
- tous les éléments négatifs ;
- tous les éléments négatifs de la chaîne
i
; - tous les éléments négatifs dans la colonne
j
; - tous les éléments diagonaux (en commençant par le coin supérieur gauche) ;
- tous les éléments diagonaux (en commençant par le coin inférieur gauche).
Bataille navale
Dernière section avec un astérisque : pas de conseils ni d'exemples. Les matrices sont idéales pour programmer le jeu de bataille navale. L'une des étapes de programmation de ce jeu est le placement des navires sur le terrain de jeu. Si vous résolvez un certain nombre de ces problèmes, soyez assuré que vous serez en mesure de faire face au combat naval. Donc, étant donné une matrice 10x10 composée de zéros. Supposons qu'il s'agisse d'un terrain de bataille navale. Dans ce champ, 0 est une cellule vide, 1 est un navire ou une partie de navire. Écrivez des fonctions dont chacune, selon les règles du jeu de bataille navale, les place au hasard :- 10 navires à un seul pont ;
- 10 corbals à deux étages ;
- 5 navires à trois ponts ;
- dispose tous les navires pour le jeu de bataille navale (4 à un pont, 3 à deux ponts, 2 à trois ponts, 1 à quatre ponts).
GO TO FULL VERSION