Modding d'Hytale
Bases de Java

05 - Tableaux

Apprenez à stocker et gérer les collections de données en utilisant des tableaux.

Les tableaux vous permettent de stocker plusieurs valeurs du même type dans une seule variable. Pensez à un tableau comme une ligne de boîtes, chacune contenant un élément.

Créer des tableaux

Méthode 1 : Déclarer et initialiser séparément

int[] nombres;           // Déclaration
nombres = new int[5];    // Crée un tableau avec 5 espaces

Méthode 2 : Tout en une fois

int[] nombres = new int[5];

Méthode 3 : Avec des valeurs initiales

int[] nombres = { 10, 20, 30, 40, 50 };
Taille de tableau

Une fois que vous avez créé un tableau, sa taille est fixe. Vous ne pouvez pas rajouter ou supprimer des éléments plus tard !

int[] inventaire = new int[9];  // A toujours exactement 9 emplacements

Accès aux éléments du tableau

Les tableaux utilisent des nombres indices à partir de 0 :

String[] joueurs = { "Alice", "Bob", "Charlie" };

System.out.println(joueurs[0]); // "Alice"
System.out.println(joueurs[1]); // "Bob"
System.out.println(joueurs[2]); // "Charlie"

Représentation visuelle

Indice012
Valeur"Alice""Bob""Charlie"

Modifier les valeurs du tableau

int[] vie = { 100, 80, 90 };

vie[1] = 60;  // Change la vie de Bob et la met à 60

System.out.println(vie[0]); // 100
System.out.println(vie[1]); // 60
System.out.println(vie[2]); // 90

Longueur de tableau

Utilisez .length pour obtenir la taille d'un tableau

int[] scores = {45, 67, 89, 92, 55};
System.out.println(scores.length); // 5
Length n'est pas une méthode

Remarquez qu'il n'y a pas de parenthèses ! C'est array.length, et pas array.length().

Boucler à travers des tableaux

En utilisant la boucle for

String[] objets = { "Épée", "Bouclier", "Potion" };

for (int i = 0; i < objets.length; i++) {
    System.out.println(objets[i]);
}

En utilisant les boucles for améliorées (for-each)

String[] objets = { "Épée", "Bouclier", "Potion" };

for (String objet : objets) {
    System.out.println(objet);
}
Boucles for améliorées

La boucle for améliorée est plus simple et plus sûre, mais vous ne pouvez pas modifier le tableau ou connaitre l'indice actuel.

// Quand vous avez besoin de l'indice
for (int i = 0; i < objets.length; i++) {
    System.out.println(i + ": " + objets[i]);
}

// Quand vous avez juste besoin des valeurs
for (String objet : objets) {
    System.out.println(objet);
}

Tableaux multidimensionnels

Les tableaux peuvent contenir d'autres tableaux, formant des grilles :

int[][] grille = {
    { 1, 2, 3 },
    { 4, 5, 6 },
    { 7, 8, 9 }
};

System.out.println(grille[0][0]); // 1
System.out.println(grille[1][2]); // 6
System.out.println(grille[2][1]); // 8

Représentation visuelle

012
0123
1456
2789

Boucler sur des tableaux à 2 dimensions

int[][] grille = {
    { 1, 2, 3 },
    { 4, 5, 6 }
};

for (int ligne = 0; ligne < grille.length; ligne++) {
    for (int col = 0; col < grille[ligne].length; col++) {
        System.out.print(grille[ligne][col] + " ");
    }
    System.out.println();
}

Exemples pratiques

Système d'inventaire du joueur

String[] inventaire = new String[9]; // 9 emplacements dans la barre de raccourcis

// Ajouter des items
inventaire[0] = "Épée en diamant";
inventaire[1] = "Bouclier";
inventaire[8] = "Nourriture";

// Afficher l'inventaire
for (int i = 0; i < inventaire.length; i++) {
    if (inventaire[i] != null) {
        System.out.println("Emplacement " + i + ": " + inventaire[i]);
    } else {
        System.out.println("Emplacement " + i + ": Vide");
    }
}

Trouver le score le plus élevé

int[] scores = { 45, 92, 67, 88, 55, 71 };
int plusGrand = scores[0];

for (int i = 1; i < scores.length; i++) {
    if (scores[i] > plusGrand) {
        plusGrand = scores[i];
    }
}

System.out.println("Score le plus élevé : " + plusGrand);

Calculer la moyenne

double[] temperatures = { 23.5, 25.0, 22.8, 24.3, 26.1 };
double somme = 0;

for (double temp : temperatures) {
    somme += temp;
}

double moyenne = somme / temperatures.length;
System.out.println("Température moyenne : " + moyenne);

Grille de blocs (Tableau 2D)

String[][] terrain = new String[5][5];

// Remplir avec de l'herbe
for (int x = 0; x < 5; x++) {
    for (int z = 0; z < 5; z++) {
        terrain[x][z] = "herbe";
    }
}

// Placer un peu de pierre
terrain[2][2] = "pierre";
terrain[1][3] = "pierre";

// Afficher la grille
for (int x = 0; x < terrain.length; x++) {
    for (int z = 0; z < terrain[x].length; z++) {
        System.out.print(terrain[x][z] + " ");
    }
    System.out.println();
}

Opérations courantes sur les tableaux

Copier un tableau

int[] original = { 1, 2, 3, 4, 5 };
int[] copie = original.clone();

// Ou manuellement
int[] copie2 = new int[original.length];
for (int i = 0; i < original.length; i++) {
    copie2[i] = original[i];
}

Rechercher une valeur

String[] objets = { "Épée", "Bouclier", "Potion", "Arc" };
String cible = "Potion";
int indiceTrouve = -1;

for (int i = 0; i < objets.length; i++) {
    if (objets[i].equals(cible)) {
        indiceTrouve = i;
        break;
    }
}

if (indiceTrouve != -1) {
    System.out.println("Trouvé à l'indice : " + indiceTrouve );
} else {
    System.out.println("Pas trouvé");
}

Compter les occurrences

String[] blocs = { "pierre", "terre", "pierre", "herbe", "pierre" };
String rechercher = "pierre";
int compteur = 0;

for (String bloc : blocs) {
    if (bloc.equals(rechercher)) {
        compteur ++;
    }
}

System.out.println(rechercher + " apparaît " + compteur + " fois");

Limitations des tableaux

Taille fixe

Les tableaux ne peuvent pas s'agrandir ou se rétrécir. Si vous avez besoin de flexibilité, vous apprendrez les ArrayList plus tard !

int[] nombres = new int[5];
// On ne peut pas ajouter un 6e élément !

// Si vous avez besoin de plus d'espace, créez un nouveau tableau
int[] plusGrand = new int[10];
for (int i = 0; i < nombres.length; i++) {
    plusGrand[i] = nombres[i];
}