Menu

Comparaison d'entiers dans un tableau dynamique [Résolu]

prudya 5 Messages postés samedi 6 mai 2017Date d'inscription 8 mai 2017 Dernière intervention - 6 mai 2017 à 14:48 - Dernière réponse :  pudya
- 10 mai 2017 à 18:49
bonjour à tous,
je souhaiterais comparer des entiers d'un tableau dynamique tel sorte que le minimum de leur somme soit supérieur à une constante donnée ( type entier).
merci de m'aider.
Afficher la suite 

9 réponses

Répondre au sujet
KX 15374 Messages postés samedi 31 mai 2008Date d'inscriptionModérateurStatut 25 avril 2018 Dernière intervention - 6 mai 2017 à 18:10
0
Utile
8
Bonjour,

"comparer des entiers d'un tableau dynamique tel sorte que le minimum de leur somme soit supérieur à une constante"
Ça ne veut pas dire grand chose... Une comparaison ça permet de savoir entre deux valeurs laquelle est inférieure/égale/supérieure à l'autre. Mais ça ne va pas calculer une somme. Et c'est quoi le minimum d'une somme ?

Bref, tu n'aurais pas un exemple pour illustrer ce que tu veux faire ?
De plus tu parles de "tableau dynamique" à quoi ça correspond dans ton code ?
prudya 5 Messages postés samedi 6 mai 2017Date d'inscription 8 mai 2017 Dernière intervention - 7 mai 2017 à 22:30
dans ce cas, en utilisant la méthode remove(), je ne peux supprimer qu'un entier de l'indice donné. Cependant, je veux supprimer les entiers dont la somme est supérieure ou égale à a. ( le résultat de la question précédente). Afin de pouvoir y insérer d'autres entiers.

merci.
KX 15374 Messages postés samedi 31 mai 2008Date d'inscriptionModérateurStatut 25 avril 2018 Dernière intervention - 7 mai 2017 à 22:48
Il n'est jamais bon de modifier les données que l'on a en entrée, il vaut mieux calculer une liste de résultat à côté :

List<Integer> result = new ArrayList<>();
int som = 0;
for (Integer n : coll) {
    som += n;
    if (som > a)
        break;
    result.add(n);
}
System.out.println(som); // 11
System.out.println(result); // [1, 1, 2, 2, 2]
prudya 5 Messages postés samedi 6 mai 2017Date d'inscription 8 mai 2017 Dernière intervention - 8 mai 2017 à 02:16
merci. cependant si le résultat de la somme est 11, alors les entiers [1, 1, 2, 2, 2, 3] qui permettent d'obtenir cette somme (1+1+2+2+2+3 =11) doivent être supprimés du tableau. Ainsi, on doit avoir le tableau suivant [4], qui ne contient que l'entier 4.
j'ai remplacé add(n) par remove(n), dans la solution proposée. j'obtiens un tableau vide ([]).
Que faire?

merci pour toutes les précédentes propositions qui sont d'une très grande utilité.
KX 15374 Messages postés samedi 31 mai 2008Date d'inscriptionModérateurStatut 25 avril 2018 Dernière intervention - 8 mai 2017 à 11:35
Penses à bien expliquer ton problème à l'avenir, tu vois l'importance des exemples qui permettent de vérifier les résultats, parce que sinon on est obligé de faire des allers-retours avant d'arriver à la réponse que tu voulais...

for (int n : coll) {
    if (som < a) {
        som += n;
    } else {
        result.add(n);
    }
}
Commenter la réponse de KX