Aide code java

Lerazo - Modifié le 24 avril 2024 à 17:43
KX Messages postés 16740 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 26 mai 2024 - 24 avril 2024 à 22:28

Bonjour,

Actuellement je m'entraine à faire du java et je rencontre un problème sur mon code :

import java.util.Arrays;

public class Main {
 public static void insertionTriee(int[] tableau, int note) {
   int index = 0;
   while (index < tableau.length && tableau[index] < note) {
      index++;
   }

// Décalage des éléments pour faire de la place pour la nouvelle note
   for (int i = tableau.length - 1; i > index; i--) {
       tableau[i] = tableau[i - 1];
   }

   tableau[index] = note;
  }

  public static void main(String[] args) {
    int[] tableau = {1, 5, 9, 7};
    int note = 3;
    insertionTriee(tableau, note);
 
    System.out.println(Arrays.toString(tableau)); // Résultat: [1, 3, 5, 9, 7]
  }
}

pour le résumé c'est un code qui permet d'ajouter une valeur dans le tableau de sorte à ce que le tableau reste dans l'ordre croissant, dans l'exemple ici le tableau est [1, 5, 9, 7] et je veux ajouter la valeur 3, donc le tableau final devrait ressembler à [1, 3, 5, 9, 7].
Cependant en sortie j'ai [1, 3, 5, 9], le 7 n'a pas été pris en compte.

Si une âme charitable est prêt à m'aider ça serait d'une grande aide

1 réponse

KX Messages postés 16740 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 26 mai 2024 127
24 avril 2024 à 22:28

Bonjour,

Un tableau ne peut pas changer de taille.

Pour faire ce que tu veux tu dois créer un nouveau tableau de taille + 1 et recopier tout ce qu'il contenait avant + l'insertion, puis renvoyer le nouveau tableau comme résultat.

public static int[] insertionTriee(int[] tableau, int note) {
    int[] result = new int[tableau.length + 1];

    int index = 0;
    while (index < tableau.length && tableau[index] < note) {
        result[index] = tableau[index];
        index++;
    }

    // Décalage des éléments pour faire de la place pour la nouvelle note
    for (int i = tableau.length; i > index; i--) {
        result[i] = tableau[i - 1];
    }

    result[index] = note;

    return result;
}

Remarque : ta méthode main utilise de manière incorrecte l'insertionTriee puisque le tableau de départ n'est pas trié, donc le résultat ne peut pas être un tableau trié, même si l'insertion se passe au bon endroit.

public static void main(String[] args) {
    int[] tableau = {1, 5, 7, 9};
    int note = 3;
    tableau = insertionTriee(tableau, note);

    System.out.println(Arrays.toString(tableau)); // Résultat: [1, 3, 5, 7, 9]
}

0
Rejoignez-nous