Comparaison d'entiers dans un tableau dynamique

Résolu
prudya Messages postés 5 Date d'inscription   Statut Membre Dernière intervention   -  
 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.
A voir également:

1 réponse

KX Messages postés 16761 Date d'inscription   Statut Modérateur Dernière intervention   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
prudya Messages postés 5 Date d'inscription   Statut Membre Dernière intervention  
 
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 16761 Date d'inscription   Statut Modérateur Dernière intervention   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
prudya Messages postés 5 Date d'inscription   Statut Membre Dernière intervention  
 
merci infiniment.
0
prudya Messages postés 5 Date d'inscription   Statut Membre Dernière intervention  
 
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 16761 Date d'inscription   Statut Modérateur Dernière intervention   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