IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage Java Discussion :

Avancement d'une boucle en %


Sujet :

Langage Java

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2009
    Messages
    44
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2009
    Messages : 44
    Par défaut Avancement d'une boucle en %
    à supprimer

  2. #2
    Membre Expert Avatar de Ivelios
    Homme Profil pro
    Développeur Java
    Inscrit en
    Juillet 2008
    Messages
    1 031
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 031
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    public class NewClass {
     
        public static void main (String[] args){
            double x = 261;
            double pas = x/10;
            System.out.println("Pas de : "+pas);
            double temp=0;
     
            for(int i=0;i<x;i++){
     
     
                if(i>temp){
                    double a = (temp/pas)*10;//On recupère le pourcentage
     
                    //Si le pourcentage est par exemple 89%, on arrondi à 90%
                    a /= 10;
                    a = (int) (a+.5);
                    a *= 10;
     
                    //Affichage
                    System.out.println((int)a+"%"+" | temp = "+temp);
     
                    //On rajoute 10%
                    temp +=pas;
     
                }
     
                //Condition final
                if(i==x-1){
                    System.out.println("100% | temp = "+temp);
                }
     
            }
        }
    }
    Affichage : pour X = 261
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    Pas de : 26.1
    0% | temp = 0.0
    10% | temp = 26.1
    20% | temp = 52.2
    30% | temp = 78.30000000000001
    40% | temp = 104.4
    50% | temp = 130.5
    60% | temp = 156.6
    70% | temp = 182.7
    80% | temp = 208.79999999999998
    90% | temp = 234.89999999999998
    100% | temp = 261.0
    Si c'est bien ça que tu demande?

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2009
    Messages
    44
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2009
    Messages : 44
    Par défaut
    Exactement, je suis content d'avoir réussi à me faire comprendre Ton algo est nickel, sauf X qui est double, temp je ne l'affiche pas, je n'affiche que le taux en %.

    Un seul cas qui ne marche pas : quand le nombre X est <10 , mais il n'y pas grand chose à changer pour rectifier ça, je regarderai ça demain, là je vais aller me coucher

    Bonne nuit et encore merci

  4. #4
    Membre du Club
    Inscrit en
    Avril 2008
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 8
    Par défaut
    Citation Envoyé par jujusous3 Voir le message
    Bonjour à tous, j'ai besoin de votre aide :

    J'ai une bouecle qui va s'exécuter X fois. Je voudrais qu'à exécution(tour de boucle) j'ai un taux d'avancement sur 100 qui s'affiche.
    Exemple sur X=10 : 0% 10% 20% 30% 40% 50% 60% 70% 80% 90% 100% (le pas=100/10=10 donc +10 à chaque tour).

    Mais ça ne marche pas à tous les coups :

    Avec X=17 par exemple, le pas=100/17=5,88888… : je n'arrive jamais à 100% car le pas sera toujours tronqué

    Ensuite, si le nombre X est supérieur à 100, par exemple avec X=128 : le pas=100/128=0,78… , le pas va être tronquée aussi et j'aurais beaucoup trop de détails dans l'avancement.



    Ce que je voudrais c'est que peu importe le nombre X, le programme m'affiche seulement 11 nombres qui sont : 0% 10% 20% 30% 40% 50% 60% 70% 80% 90% 100% , qui me donneront donc un état sur l'accomplissement des X tours de boucles.

    J'essaie de nombreuses choses depuis ce midi mais il y a toujours un cas où ça ne marche pas…


    Si vous avez des questions n'hésitez pas !


    Merci merci merci d'avance ! En attendant je vais continuer d'essayer...

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2009
    Messages
    44
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2009
    Messages : 44
    Par défaut
    quel est l'intérêt de ton message à part flooder ?

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2009
    Messages
    44
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2009
    Messages : 44
    Par défaut
    Je retire ce que j'ai dit hier soir à propos d'exemple <10 qui ne marchait pas. Il faut que je mette mon X en double et là ça marche. Mais en y regardant de plus près, ce n'est pas exactement ce que je voulais obtenir, en fait ce que je voulais c'est que pour n'importe quel X, j'ai les 11 étapes (0%,10%,20%...100%) qui s'affiche, même pour un nombre comme 3 par exemple, avec ton code pour 3 j'obtient : 0% , 10% , 100%. Je me demandais si il ne serait pas possible d'afficher 0% 10% 20%...100% même pour 3, je conçois que ça soit difficile puisque qu'on a que trois étapes donc on ne peut créer que 3 trucs : 0, 10, 100 par exemple avec ton code, mais peut être peut t'on créer 3 trucs qui sont 0 | 10 20 30 40 50 | 60 70 80 90 100 ...

    Enfin au moins ton code marche dans tous les cas

  7. #7
    Membre Expert Avatar de Ivelios
    Homme Profil pro
    Développeur Java
    Inscrit en
    Juillet 2008
    Messages
    1 031
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 031
    Par défaut
    Salut jujusous3,
    Pour l'affichage des temp c'était juste une vérification pour voir que ça marchait bien

    Après pour un x<3, afficher les 11 "%" ... J'ai pas d'idée précise là tous de suite, c'est le matin aussi

    Il faudrait mettre une seconde condition pour le temp+=pas.

    A méditer...

  8. #8
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2009
    Messages
    44
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2009
    Messages : 44
    Par défaut
    C'est vrai que je chipote, c'est que dans ma tête je me dis que dans n'importe quel programme, quand il y a un chargement, même si c'est très court, on a un avancement de 0 à 100 dans tous les cas, ça avance juste plus ou moins vite...

  9. #9
    Membre Expert Avatar de Ivelios
    Homme Profil pro
    Développeur Java
    Inscrit en
    Juillet 2008
    Messages
    1 031
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 031
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    /**
     *
     * @author Ivelios
     */
    public class NewClass {
     
        public static void main (String[] args){
     
     
            double x = 3;
            double pas = x/10;
            System.out.println("Pas de : "+pas);
            double temp=0;
     
            int i = 0;
            double a  =0;
     
            while(i<=x){
     
                if(i>=temp){
                    a = (temp/pas)*10;//On recupère le pourcentage
     
                    //Si le pourcentage est par exemple 89%, on arrondi à 90%
                    a /= 10;
                    a = (int) (a+.5);
                    a *= 10;
     
                    //Affichage
                    System.out.println((int)a+"%"+" | temp = "+temp);
     
                    //On rajoute 10%
                    temp +=pas;
     
     
                }else{
                    i++;
                }  
     
            }
     
            //Parfois le dernier cas n'est pas pris en compte donc on l'ajoute si c'est le cas
            if((int) a!= 100){
                System.out.println("100% | temp = "+temp);
            }
     
     
        }
    }
    Je l'ai un peu modifié. ça devrais le faire maintenant
    Bon, j'vais prendre une douche moi... devant le pc dès le réveil sérieux faut vraiment que j'arrête ...

  10. #10
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2009
    Messages
    44
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2009
    Messages : 44
    Par défaut
    ^^Je me dis la même chose.

    Ton code marche nickel, je suis en train de l'adapter, parce que maintenant il n'exécute plus X fois la boucle, en fait j'ai un traitement à effectuer 3 fois, si j'utilise ta boucle, il me le fait 11 fois Plus titilleux tu meurt !

  11. #11
    Membre Expert Avatar de Ivelios
    Homme Profil pro
    Développeur Java
    Inscrit en
    Juillet 2008
    Messages
    1 031
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 031
    Par défaut
    En faite, tu peux faire beaucoup mais beaucoup plus simple...
    si x = 15 par exemple.
    Il te suffit de faire une boucle de 150 (15*10)
    dans un tableau tu calcul et tu range tes temp
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     int[] temp = {0,15,30,45,...,150}
    int indiceTab = 0;
    for(int i=0;i<=150;i++){
    if(i==temp[indiceTab]){
         System.out.println(indiceTab+"0%");
         indiceTab++;
    }
    }
    Après au lieu de te faire une boucle de 15 il t'en fait une de 150 => 10*plus de ressources mais bon... ça devrait prendre environ 0,0001ms de plus

  12. #12
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2009
    Messages
    44
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2009
    Messages : 44
    Par défaut
    C'est sur c'est plus courtMais ça sous entend que tu crée un tableau avec les nombres tout prêt, donc il faudra quand même faire une boucle pour créer le tableau avant non ?

    Enfin j'ai réussi à exécuter mon code 3 fois, même si ta boucle pour les % s'éxecute 11 fois. J'ai rajouté une boucle à l'intérieur

  13. #13
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2009
    Messages
    44
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2009
    Messages : 44
    Par défaut
    edit, j'ai rien dit, tout marche bien, il suffit de mettre le code qu'on veut exécuter X fois dans le else où il y a le i++. Et ça fonctionne nickel ! Merci infiniment !!!!!


    edit: je viens de voir qu'il existait une jProgressBar, ça serait compliquer si je voulais changer le code que tu m'a donné pour afficher les % sous forme de barre dans une petit boite de dialogue qui s'ouvre au lancement de la boucle ?

    J'hésite parce que là ça fonctionne bien en affichage texte donc je me demande si ça vaut le coup de tout rechanger pour l'afficher sous forme graphique avec une barre, bon c'est vrai que ça ferait beau mais bon...

  14. #14
    Membre Expert Avatar de Ivelios
    Homme Profil pro
    Développeur Java
    Inscrit en
    Juillet 2008
    Messages
    1 031
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 031
    Par défaut
    A mince, j'aurais du te poser plus de question sur ton problème, je t'aurais alors directement indiqué la JProgressBar...
    Bâ, tu peux utiliser un JProgressBar, ça fera plus joli et ça t'entrainera
    Comme ça tu sauras comment l'utiliser.

    ps : pense à

  15. #15
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2009
    Messages
    44
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2009
    Messages : 44
    Par défaut
    J'ai lu quelques exemples de JprogressBar, mais ce sont souvent des exemples compliqués, du genre on traite un grand nombre de fichier, on affiche le temps restant et le fichier en cours de traitement. Mais moi c'est beaucoup plus simple...enfin je vais essayer mais si j'y arrive pas rapidement tant pis, j'ai encore plein d'autres trucs à faire

    Merci encore pour ton aide

  16. #16
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2009
    Messages
    44
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2009
    Messages : 44
    Par défaut
    Bon j'ai essayé cette progressBar, mais je trouve vraiment aucun tuto simple, je ne veux pas regarder des fichiers dans un répertoire ni rien. Je veux juste afficher une barre, avec comme départ 0.

    Ensuite, je laisse le code qu'Ivelios m'a donné, et à chaque fois au lieu de faire un println, je fais un setValue+10 de la progressBar .

    C'est tout, non ?

    Mais je n'y arrive pas, j'ai mis ça dans la déclaration :

    JProgressBar progressBar;
    progressBar = new JProgressBar();
    progressBar.setMaximum(100);
    progressBar.setMinimum(0);
    progressBar.setStringPainted(true);
    progressBar.setVisible(true);
    progressBar.paint(progressBar.getGraphics());


    et à chaque fois que je fais un println, je fais progressBar.setValue((int)a);

Discussions similaires

  1. Réponses: 3
    Dernier message: 11/07/2014, 17h18
  2. Print l'avancée d'une boucle, écraser l'affichage précédent
    Par bougnbie dans le forum Général Python
    Réponses: 3
    Dernier message: 10/04/2014, 13h12
  3. Barre de progression dans une boucle : impossible de modifier son avancement
    Par piero-la-lune dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 21/01/2012, 12h24
  4. [XSLT] Faire une boucle sur une variable [i]
    Par PoT_de_NuTeLLa dans le forum XSL/XSLT/XPATH
    Réponses: 8
    Dernier message: 07/06/2010, 13h45
  5. Pause dans une boucle
    Par HT dans le forum Langage
    Réponses: 4
    Dernier message: 03/06/2003, 09h52

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo