Comparaison d'entiers dans un tableau dynamique

Résolu
prudya Messages postés 8 Statut Membre -  
 pudya -
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.

1 réponse

  1. KX Messages postés 19031 Statut Modérateur 3 020
     
    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
    1. prudya Messages postés 8 Statut Membre
       
      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
    2. KX Messages postés 19031 Statut Modérateur 3 020
       
      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
    3. prudya Messages postés 8 Statut Membre
       
      merci infiniment.
      0
    4. prudya Messages postés 8 Statut Membre
       
      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
    5. KX Messages postés 19031 Statut Modérateur 3 020
       
      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