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

Collection et Stream Java Discussion :

Tableau minimum besoin d'eclaircisements


Sujet :

Collection et Stream Java

  1. #1
    Membre à l'essai
    Homme Profil pro
    Assistant aux utilisateurs
    Inscrit en
    Juillet 2011
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Assistant aux utilisateurs

    Informations forums :
    Inscription : Juillet 2011
    Messages : 17
    Points : 13
    Points
    13
    Par défaut Tableau minimum besoin d'eclaircisements
    Bonjour, je suis tout nouveau tout frais en programmation..., j'en suis seulement aux bases, mais je m'y colle sérieusement
    le but de mon post est que j'ai un certain problème (ou un problème certain c'est selon...) avec un les tableaux et la façon de les parcourir.Je sais que cette question a du être poser une tonne de fois.
    ce que j'aimerais savoir c'est est mon erreur est quelle sont celles à éviter dans pareil cas.
    Voilà mon programme doit trouver le minimum dans une series d'entiers saisis au clavier, afficher la série et afficher le min.
    Merci de l'aide
    PS. SVP eviter les reponses du genre "bouton recherche" ou "Google...". Car après tous ça j'ai encore des zones d'ombres

    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
    /**
     * @(#)Minimum.java
     *
     * Minimum application
     *
     * @author
     * @version 1.00 2011/7/23
     */
     import java.util.Scanner;
    public class Minimum {
     
        public static void main(String[] args) {
    		int i,j;
    		int min=0;
        	Scanner sc=new Scanner(System.in);
        	int tab[]=new int [4];
     
        	for(i=0;i<tab.length-1;i++){
        		System.out.println("Svp saisir le chiffre numéro "+(i+1) +" en entier: ");
        		int nbre=sc.nextInt();
    			tab[i]=nbre;
    			if(tab[i]<tab[i+1]){
    				min=tab[i];
    			}
     
    			}
    			System.out.println("les chiffres sont " +tab[0]+",  "+tab[1]+",  "+tab[2]);
    			System.out.println("le minimum est: "+min);
    		}
    }

  2. #2
    Modérateur
    Avatar de wax78
    Homme Profil pro
    Chef programmeur
    Inscrit en
    Août 2006
    Messages
    4 075
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chef programmeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2006
    Messages : 4 075
    Points : 7 981
    Points
    7 981
    Par défaut
    C'est quoi le problème en fait ?

    Sinon,

    1) initialise min a une grosse valeur (min=Integer.MAX_VALUES);
    2) change le if (tab[i]<tab[i+1]) par if (tab[i]<min) min=tab[i]; ?
    (Les "ça ne marche pas", même écrits sans faute(s), vous porteront discrédit ad vitam æternam et malheur pendant 7 ans)

    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Membre à l'essai
    Homme Profil pro
    Assistant aux utilisateurs
    Inscrit en
    Juillet 2011
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Assistant aux utilisateurs

    Informations forums :
    Inscription : Juillet 2011
    Messages : 17
    Points : 13
    Points
    13
    Par défaut
    Citation Envoyé par wax78 Voir le message
    C'est quoi le problème en fait ?

    Sinon,

    1) initialise min a une grosse valeur (min=Integer.MAX_VALUES);
    2) change le if (tab[i]<tab[i+1]) par if (tab[i]<min) min=tab[i]; ?
    Wax,
    j'avais envisagé d'initialiser mon min à grosse valeur sauf qu'en même temps je me disais que côté esthétique ça n'étais pas fameux.
    aurais-tu une proposition ou une autre façon plus clean de le faire?

  4. #4
    Membre expérimenté Avatar de Trademark
    Profil pro
    Inscrit en
    Février 2009
    Messages
    762
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 762
    Points : 1 396
    Points
    1 396
    Par défaut
    Salut et bienvenu dans le monde de la programmation

    Si j'étais toi j'ajouterai ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Scanner sc=new Scanner(System.in);
    System.out.print("Combien d'élément voulez-vous entrer ? ");
    int nb_element =  sc.nextInt()  ; // Tu devrais également vérifier que l'utilisateur entre une taille supérieure à 1 et lui redemander dans le cas contraire.
    int tab[]=new int [nb_element];
    Ca permet une plus grande souplesse que de coder "salement" et en dur la taille dans le code.

    Ensuite pour ne pas utiliser de "grosse valeur" il suffit simplement de prendre comme minimum la première valeur entrée par l'utilisateur (ne regarde pas le code ci-dessous si tu veux t'entrainer d'abord pour avoir TON code) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    System.out.println("Svp saisir le chiffre numéro 1 en entier: ");
    tab[0] = sc.nextInt(); // Quel interêt de passer par nbre ?
    int min = tab[0] ;
    for(int i=1; i<tab.length ; i++){ // Pourquoi faisais-tu tab.length -  1 ?
      System.out.println("Svp saisir le chiffre numéro "+(i+1) +" en entier: ");
      tab[i] = sc.nextInt(); // Quel interêt de passer par nbre ?
      if(min > tab[i])
        min = tab[i];
    }
    Et pour finir je te conseille de faire une boucle au lieu de ça (vu que dans ce que je te propose la taille est variable) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    System.out.println("les chiffres sont " +tab[0]+",  "+tab[1]+",  "+tab[2]);
    En tout cas je te souhaite beaucoup d'amusement en programmation

  5. #5
    Membre à l'essai
    Homme Profil pro
    Assistant aux utilisateurs
    Inscrit en
    Juillet 2011
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Assistant aux utilisateurs

    Informations forums :
    Inscription : Juillet 2011
    Messages : 17
    Points : 13
    Points
    13
    Par défaut
    Citation Envoyé par Trademark Voir le message
    Salut et bienvenu dans le monde de la programmation

    Si j'étais toi j'ajouterai ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Scanner sc=new Scanner(System.in);
    System.out.print("Combien d'élément voulez-vous entrer ? ");
    int nb_element =  sc.nextInt()  ; // Tu devrais également vérifier que l'utilisateur entre une taille supérieure à 1 et lui redemander dans le cas contraire.
    int tab[]=new int [nb_element];
    Ca permet une plus grande souplesse que de coder "salement" et en dur la taille dans le code.

    Ensuite pour ne pas utiliser de "grosse valeur" il suffit simplement de prendre comme minimum la première valeur entrée par l'utilisateur (ne regarde pas le code ci-dessous si tu veux t'entrainer d'abord pour avoir TON code) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    System.out.println("Svp saisir le chiffre numéro 1 en entier: ");
    tab[0] = sc.nextInt(); // Quel interêt de passer par nbre ?
    int min = tab[0] ;
    for(int i=1; i<tab.length ; i++){ // Pourquoi faisais-tu tab.length -  1 ?
      System.out.println("Svp saisir le chiffre numéro "+(i+1) +" en entier: ");
      tab[i] = sc.nextInt(); // Quel interêt de passer par nbre ?
      if(min > tab[i])
        min = tab[i];
    }
    Et pour finir je te conseille de faire une boucle au lieu de ça (vu que dans ce que je te propose la taille est variable) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    System.out.println("les chiffres sont " +tab[0]+",  "+tab[1]+",  "+tab[2]);
    En tout cas je te souhaite beaucoup d'amusement en programmation
    Merci Trademark, le monde de la prog est pour moi une enigme, moi qui viens d'un autre monde qui est le support technique et réseau.
    J'ai encore du mal avec la chose abstraite...
    Bref,
    Pas mal le truc de faire saisir le nombre d'éléments à saisir avant de l'inclure comme taille du tableau.
    pour ta question sur le table.length-1, en fait vu que je fixé la taille du tableau à l'avance et que j'initialise ià0 je doit le faire tourner jusqu'a tab.length-1 pour qu'il s'arrete tout bonnement au bon stop.
    ton explication est simplement parfaite Mr.Trademark

  6. #6
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    Sinon, le plus simple reste d'utiliser une ArrayList<Integer> pour stocker vos valeur et d'utiliser Collections.min(laListe) pour avoir le minimum

    Inutile de réinventer la roue à chaque fois.

  7. #7
    Membre expérimenté Avatar de Trademark
    Profil pro
    Inscrit en
    Février 2009
    Messages
    762
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 762
    Points : 1 396
    Points
    1 396
    Par défaut
    Citation Envoyé par tchize_ Voir le message
    Sinon, le plus simple reste d'utiliser une ArrayList<Integer> pour stocker vos valeur et d'utiliser Collections.min(laListe) pour avoir le minimum

    Inutile de réinventer la roue à chaque fois.
    En fait ce que tu viens de dire pourrait faire débat mais à mon sens, quand on commence à apprendre la programmation, il est inutile de se barder dès le départ de concepts que de toutes façons il ne comprendra pas tout de suite.

    En plus, d'un point de vue algorithmique, ça serait quand même bien malheureux qu'il ne sache même pas coder une bête fonction "minimum".

    Je ne critique pas ton idée, pour un programmeur un tout petit peu plus avancé, ça aurait été parfait mais pour un débutant, la première chose à faire est de comprendre les principes sous-jacent de ces concepts.

    J'espère que tu as compris mon point de vue

  8. #8
    Membre confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2008
    Messages
    328
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Mexique

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juin 2008
    Messages : 328
    Points : 459
    Points
    459
    Par défaut
    Salut,

    Une autre manière simple :

    -saisir les entiers dans le tableau,
    -trier le tableau.

    Et c'est tout, l'élément 0 contient le mini, l'élement taille du tableau -1 le maxi

    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
       import java.util.Scanner;
       import java.util.Arrays;
     
       public class MiniMax {
     
          public static void main(String[] args) {
             int i;
             Scanner sc=new Scanner(System.in);
             int tab[]=new int [8];
     
             for(i=0;i<tab.length;i++){
                System.out.print("Svp saisir le chiffre numéro "+(i+1) +" en entier: ");
                //Ne pas oublier de "catcher" (InputMismatchException si non numéqique ou hors des limites
             	                               // des valeurs mini/maxi d'un int)
                int nbre=sc.nextInt();
                tab[i]=nbre;
             }
     
             System.out.println("\nles chiffres saisis sont:\n");
             for(i = 0; i <tab.length;i++){
                System.out.println(tab[i]);
             }
     
             Arrays.sort(tab); //Tri du tableau en ordre croissant (pas de tri décroissant possible)
             System.out.println("\nles chiffres après tri sont:\n");
             for(i = 0; i <tab.length;i++){
                System.out.println(tab[i]);
             }
     
             System.out.println("\nle minimum est: "+tab[0]);
             System.out.println("le maximum est: "+tab[tab.length -1]);
          }
       }
    Cordialement,

    Dan

  9. #9
    Membre à l'essai
    Homme Profil pro
    Assistant aux utilisateurs
    Inscrit en
    Juillet 2011
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Assistant aux utilisateurs

    Informations forums :
    Inscription : Juillet 2011
    Messages : 17
    Points : 13
    Points
    13
    Par défaut
    Citation Envoyé par Trademark Voir le message
    En fait ce que tu viens de dire pourrait faire débat mais à mon sens, quand on commence à apprendre la programmation, il est inutile de se barder dès le départ de concepts que de toutes façons il ne comprendra pas tout de suite.

    En plus, d'un point de vue algorithmique, ça serait quand même bien malheureux qu'il ne sache même pas coder une bête fonction "minimum".

    Je ne critique pas ton idée, pour un programmeur un tout petit peu plus avancé, ça aurait été parfait mais pour un débutant, la première chose à faire est de comprendre les principes sous-jacent de ces concepts.

    J'espère que tu as compris mon point de vue
    Messieurs voue êtes géniaux, merci pour toutes les reponses.
    En fait comme l'a dit Trademark j'y suis encore à apprendre à marcher...
    Mon prochain pas sera les listes, mais avant je voudrait bien maitriser les tableaux et les boucles et compteurs pour bien continuer par la suite. Est-ce que ces facon de faire sont un peu revolus?
    Encore une fois merci pour les reponses et les encouragements

  10. #10
    Membre expérimenté Avatar de Trademark
    Profil pro
    Inscrit en
    Février 2009
    Messages
    762
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 762
    Points : 1 396
    Points
    1 396
    Par défaut
    Citation Envoyé par danimo Voir le message
    Salut,

    Une autre manière simple :

    -saisir les entiers dans le tableau,
    -trier le tableau.
    C'est une manière simple parce que, une fois de plus, ce n'est pas toi qui implémente le tri. De plus en terme de complexité, ta solution c'est un peu comme sortir le framework symphony pour coder le site de ta grand-mère (en exagérant bien sur ).

    Tu as un tri en O(n*log(n)) alors qu'une recherche du minimum et du maximum ne demande que du O(n). Enfin ma fois...

    Citation Envoyé par usualSuspect Voir le message
    Est-ce que ces facon de faire sont un peu revolus?
    Non et à mon sens elles ne le seront jamais. Il ne faut pas oublier que l'informatique est une science à part entière et que les concepts de listes, tableaux, graphes, ... sont nos outils principaux.

    D'autre part, une fois que tu as acquis ce savoir, il t'est beaucoup plus aisé d'utiliser n'importe quelle implémentation et variante de ces concepts et ce, dans n'importe quelle langage. On peut faire une analogie avec un mécano, une fois qu'il sait les composants généraux qu'abritent une voiture (les concepts), il peut aller travailler dans n'importe quelle garage (nos langages de programmation). Bien que, pour saisir tous les détails intrinsèques à la marque de la voiture, il faut de la pratique et de l'expérience (comme pour apprendre un langage).

    Ceux qui ne se posent jamais la question du "comment ça marche en dessous ?" ne savent jamais comment réagir à un bug sans essayer tout et n'importe quoi dans le désespoir. Et puis c'est tellement mieux de programmer quand on sait ce qu'on fait

    Une fois de plus, prends bien ton temps pour assimiler chaque concept et bonne chance

  11. #11
    Membre à l'essai
    Homme Profil pro
    Assistant aux utilisateurs
    Inscrit en
    Juillet 2011
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Assistant aux utilisateurs

    Informations forums :
    Inscription : Juillet 2011
    Messages : 17
    Points : 13
    Points
    13
    Par défaut
    Citation Envoyé par Trademark Voir le message
    Une fois de plus, prends bien ton temps pour assimiler chaque concept et bonne chance
    Des heures de plaisirs quoi
    Encore merci à tous et a un prochaine post...

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. tableau mutlidim, besoin de précision
    Par tuxout dans le forum Général JavaScript
    Réponses: 19
    Dernier message: 25/08/2006, 11h36
  2. [Swing] JFormattedTextField : besoin d'eclaircisement
    Par Invité dans le forum AWT/Swing
    Réponses: 11
    Dernier message: 06/05/2006, 00h10
  3. Réponses: 3
    Dernier message: 05/12/2005, 02h30
  4. besoin d'aide sur tableau dynamique
    Par littlesquall dans le forum C
    Réponses: 16
    Dernier message: 02/11/2005, 02h50
  5. Besoin d'aide lié à un fichier xml et un tableau a charger..
    Par jjs dans le forum Bases de données
    Réponses: 2
    Dernier message: 28/07/2005, 14h03

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