Comparaison d'entiers dans un tableau dynamique

Résolu/Fermé
prudya Messages postés 5 Date d'inscription samedi 6 mai 2017 Statut Membre Dernière intervention 8 octobre 2018 - 6 mai 2017 à 14:48
 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.
A voir également:

1 réponse

KX Messages postés 16733 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 31 janvier 2024 3 015
6 mai 2017 à 18:10
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 ?
0
prudya Messages postés 5 Date d'inscription samedi 6 mai 2017 Statut Membre Dernière intervention 8 octobre 2018
Modifié le 7 mai 2017 à 17:59
voici, le code pour illustrer. dans ce cas, j'ai ordonné les valeurs, je souhaite avoir uniquement la plus petite des sommes que j'ai obtenu.

import java.util.ArrayList;
import java.util.Collections;

public class demande {
  

 /**


* @param args

*/
 public static void main(String[] args){
     
   ArrayList<Integer> coll = new ArrayList<Integer>();
   coll.add(0,1);
   coll.add(1,2);
   coll.add(2,2);
   coll.add(3,3);
   coll.add(4,4);
    coll.add(5,2);
    coll.add(6,1);
    
      
    /*Object obj = Collections.min(coll);
    System.out.println(obj);*/
     
        
    Collections.sort(coll);
    System.out.println(coll);
    
    /*coll.remove(10);
    System.out.println(coll);*/
    
    //calcul du total
    int a =7;
    int som=0;
    
    for(int i=0; i<coll.size();i++)
    {
              
          som=som+coll.get(i);
          
          if(som>a){
            
            Object Som = Collections.min(coll);
            System.out.println(som);
          
          }
    }
 }
}

le résultat donne:
[1, 1, 2, 2, 2, 3, 4]
8
11
15


alors que je veux obtenir 8. en outre, si je change la valeur de a, je peux avoir un autre résultat.
merci. je ne suis qu'un débutant
0
KX Messages postés 16733 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 31 janvier 2024 3 015
7 mai 2017 à 18:08
Une fois que tu as
if (som>a)
tu peux arrêter ta boucle avec
break
, comme ça tu n'affiches pas les sommes suivantes.

Avec quelques améliorations au passage, ça donne ceci :

import java.util.*;

public class Demande {
    public static void main(String[] args) {
        List<Integer> coll = Arrays.asList(1, 2, 2, 3, 4, 2, 1);
        Collections.sort(coll);
        System.out.println(coll);

        int a = 10;

        int som = 0;
        for (Integer n : coll) {
            som += n;
            if (som > a)
                break;
        }
        System.out.println(som);
    }
}
0
prudya Messages postés 5 Date d'inscription samedi 6 mai 2017 Statut Membre Dernière intervention 8 octobre 2018
7 mai 2017 à 18:51
merci infiniment.
0
prudya Messages postés 5 Date d'inscription samedi 6 mai 2017 Statut Membre Dernière intervention 8 octobre 2018
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.
0
KX Messages postés 16733 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 31 janvier 2024 3 015
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]
0