Debutant java probleme de methode

Résolu/Fermé
Utilisateur anonyme - 8 mars 2011 à 01:26
 Utilisateur anonyme - 11 mars 2011 à 15:18
Bonjour,
je suis débutant en java.
j'ai créer une méthode qui doit trouvé les valeurs minimales d'un tableau.
le probleme c'est que ma méthode doit compter le nombre d'occurence minimale,et la je bloque.
exemple je saisie 1, 1,4,5,10,1,23,1
je doit afficher la valeur minimale donc 1 la ca passe dans la méthode.
mais je n arrive pas a compter le nombre d'occurence minimale
donc dans cet exemple la valeur minimale est de 1, et contient 4 occurences.

Voici ma méthode:
// méthode minimum
static int MinimumTableau(int[] tab, int NbValeurs)
{
int minimum = tab[0];
for (int i=0 ; i<NbValeurs ; i++)
if (tab[i] < minimum) minimum = tab[i];
return minimum;
}

Si quelqu'un peut m'aiguiller j'en serait tres reconnaissant.
Merci d'avance.


A voir également:

6 réponses

Utilisateur anonyme
9 mars 2011 à 07:07
Salut,

Si tu triais ton tableau en utilisant sort de la classe Arrays ce serait un jeu d'enfant, la valeur (ou les valeurs, 1 dans ton exemple) la (ou les) plus petite(s) se trouvant au début du tableau.

Il te suffirait après ce tri de lire ton tableau dont le premier élément [0] est la plus petite des valeur, d'ajouter 1 à un compteur (les occurences), de lire ensuite l'élément suivant, de le cumuler s'il est égal, sinon de sortir de la boucle...

Si tu ne trouves pas comment faire ce tri n'hésite pas...

Cordialement,

Dan
1
chico200987 Messages postés 791 Date d'inscription mardi 6 avril 2004 Statut Membre Dernière intervention 30 juillet 2018 143
9 mars 2011 à 07:12
Effectivement c'est astucieux, le reste en decoulerait sans plus de traitement..
0
Mouais Danimo il aime po réinventer la roue ;-)
0
Utilisateur anonyme
9 mars 2011 à 08:13
Oh que si Arth et plus souvant qu'à mon tour et loin de moi l'idée de critiquer ce qui est dit plus haut...

Cordialement,

Dan
0
Utilisateur anonyme
9 mars 2011 à 18:18
Merci pour toutes vos réponces je vais encore méditer le truc mais j ai trouvé la solution grace
a chico200987 , bien que encore un probleme que je cite:
nom generique "valeur" pour la semantique.

je vais revoir tout ca se soir en tout cas ca marche, et je posterais mon code si ca peut aider quelqu'un ou si je peut encore paufiner quelques truc. (et je mettrais le post en résolut)

merci pour vos propositions j'y refléchit ca fait juste deux semaines que j'ai commencé a apprendre java (jviens plutot du php) et ca me permet d'élargir mes connaissances.
0
chico200987 Messages postés 791 Date d'inscription mardi 6 avril 2004 Statut Membre Dernière intervention 30 juillet 2018 143
10 mars 2011 à 11:59
Le "nom générique "valeur" pour la sémantique" etait juste de remplacer le nom de ta troisième variable que tu as donne dans ta fonction OccurenceTableau, tu as mis "minimum" alors que tu peux tres bien l'utiliser pour calculer le maximum..

C'est pas du tout une erreur, mais plus un problème de sémantique c'est a dire de sens, valeur passerait mieux puisque c'est une valeur que tu passes en paramètre ;)
0
Salut,

Le sujet étant résolu, je te donne cet exemple qui permet, dans un premier temps de saisir puis de calculer la taille du tableau qui contiendra les valeurs saisies.

On suppose qu'on entre au moins une valeur et que si on entre plusieurs valeurs elles sont bien séparées par une virgule et pas de virgule après la dernière valeur.

Il faudrait aussi détecter le clique du bouton <Annuler>

Ensuite, le tableau étant créé, nous affichons son contenu puis procédons au tri du tableau que nous affichons trié (pour constater que c'est bien trié)

Enfin il reste à obtenir la valeur minimale ainsi que le nombre d'occurences de cette valeur minimale.

J'ai laissé vonlontairement de coté la possibilité d'utiliser split, ou StringTokenzer et choisi substring...

Voici le code;
   import java.util.Arrays;  

   public class PlusPetiteValeurTableau 
   {  
    
      public static void main(String[] args) 
      { 
         String valSaisies = ""; 
       
         valSaisies = (String)javax.swing.JOptionPane.showInputDialog 
                  (null, "Saisir les valeurs séparées par une virgule:", 
                  "SAISIE D'UNE CHAÎNE DE CARACTÈRES", 
                  javax.swing.JOptionPane.PLAIN_MESSAGE,null,null,null); 
         int nbreVal = 0; 
         String valSv = valSaisies;        
         System.out.println("valSaisies: " + "\"" + valSaisies + "\""); 
        int index = 0; 
         do 
         { 
            index = valSaisies.indexOf(","); 
            nbreVal++; 
            valSaisies = valSaisies.substring(index + 1); // reste de la saisie 
         } 
            while(index >0); 
       
         System.out.println("Nombre de valeurs = " + nbreVal); 
          
         int leTableau[] = new int[nbreVal]; 
          
         valSaisies = valSv; 
         int i = 0; 
         for(i = 0; i <nbreVal; i++) 
         { 
            index = valSaisies.indexOf(","); 
            if(index >0) 
            { 
               leTableau[i] = Integer.parseInt(valSaisies.substring(0, index)); 
               valSaisies = valSaisies.substring((index + 1)); 
               System.out.println("Reste de valSaisies: " + "\"" + valSaisies); 
            } 
         } 
         leTableau[i-1] = Integer.parseInt(valSaisies); //la dernère valeur n'étant pas suivie de ',' 
                                                         //et le i++ étant déjà fait 
         System.out.println("\n\nLe tableau avant tri:"); 
             
         for(i = 0; i <leTableau.length; i++) 
            System.out.println(leTableau[i]); 
             
         Arrays.sort(leTableau); //Tri du tableau en ordre croissant 
             
         System.out.println("\n\nLe tableau suite au tri:"); 
             
         for(i = 0; i <leTableau.length; i++) 
            System.out.println(leTableau[i]); 
             
         int occur = 0; 
         int mini = 0; 
         for(i = 0; i <leTableau.length; i++) 
         { 
// la valeur mini est forcément l'élément zero 
            if(i == 0) 
            { 
               mini = leTableau[i]; 
               occur++; //incrémentation des occurence (il y en a au minimum une) 
            } 
            else 
               if(leTableau[i] == mini) 
                  occur++; //incrémentation 
               else 
                  break; 
         } 
         System.out.println("\nLa plus petite valeur " + mini 
            + " existe " + occur + " fois dans le tableau."); 
      } 
   } 

Le seul println qui devrait rester est le dernier ci-dessus, les autres montrent seulement le déroulement du programme en fonction de ce qui a éte saisi...

Cordialement,

Dan
1
Utilisateur anonyme
11 mars 2011 à 15:18
Ca va surrement m'aider à comprendre pour la suite....
encore un grand merci a tous...
0
tu veut faire ca dans la même méthode ??
0
arth Messages postés 9374 Date d'inscription mardi 27 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2016 1 291
8 mars 2011 à 07:53
J'aurais dit comme Stof, difficile de compter les occurrences si tu ne sais pas quel est le minimum du tableau avant de l'avoir définitivement trouvé.

Donc deux fonctions c'est mieux comme ça.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Utilisateur anonyme
8 mars 2011 à 15:51
Cool pour vos réponses:

donc si j ai bien compris je récupere la variable minimum qui résulte de la méthode minimum, et grace a une autre méthode je reparcourt le tableau et je compte le nombre d'occurence que j ai.(en réalité je doit le faire pour le minimum et le maximum)

maintenant faut que je le mette en pratique et ca va pas etre du gateau.
merci bcps....
0
chico200987 Messages postés 791 Date d'inscription mardi 6 avril 2004 Statut Membre Dernière intervention 30 juillet 2018 143
8 mars 2011 à 16:00
Essaie de pondre quelque chose, on essaiera de te guider point par point pour mieux que tu comprennes

Tu sais ce que tu as a faire, deux voire trois fonctions, une pour le minimum, une pour le maximum (sachant qu'une peut faire les deux avec un booleen par exemple..) et une derniere qui comptera l'occurence d'un chiffre quel qu'il soit..

Une fois le min/max trouve, tu appelles ta derniere fonction qui prend en parametre le nombre trouve et qui renvoit le nombre d'occurrences..
0
Utilisateur anonyme
9 mars 2011 à 00:22
slt,
je bloque total sur les occurrences.
j ai bien compris ce que chico200987 a voulu m'expliquer, je cite:
Une fois le min/max trouve, tu appelles ta dernière fonction qui prend en paramètre le nombre trouve et qui renvoi le nombre d'occurrences..

Mais je voit pas du tout comment faire pour que le nombre pris en paramètre soit le maximum et le minimum.
de plus d'âpres les cours que j'ai je ne sait pas comment faire pour compter le nombre d'occurrence. du coup j ai un code plus qu'incorrect et qui en plus vu du pied que je suis parti, aurait besoin de deux méthodes occurrence (une pour le minimum une pour le maximum).

Voici le code pondu mais ce n'est pas du joli joli... tout est faux sur la fonction nombres d'occurrences (minimum)

voici mon code:

import javax.swing.*;
public class devoir1_4 {
public static void main(String[] args) {

int i, NbValeurs = Integer.parseInt (JOptionPane.showInputDialog (null,"Nombre de valeurs dans le tableau : "));
int[] Tableau = new int[NbValeurs];
for (i=0; i < NbValeurs; i++)
Tableau[i] = Integer.parseInt (JOptionPane.showInputDialog (null,"Saisir la valeur n°" + i + " : "));

int minimum;
int maximum;
int occurence;

// valeur minimale
minimum = MinimumTableau(Tableau, NbValeurs);
occurence = OccurenceTableau(Tableau, NbValeurs, minimum);
System.out.println("La valeur minimum est: " + minimum + " (" + occurence + " occurences)");

// valeur maximum
maximum = MaximumTableau(Tableau, NbValeurs);
System.out.println("La valeur maximum est: " + maximum);
}

// méthode minimum
static int MinimumTableau(int[] tab, int NbValeurs)
{
int minimum = tab[0];
for (int i=0 ; i<NbValeurs ; i++)
if (tab[i] < minimum) minimum = tab[i];
return minimum;
}

// méthode maximum
static int MaximumTableau(int[] tab, int NbValeurs)
{
int maximum = tab[0];
for (int i=0 ; i<NbValeurs ; i++)
if (tab[i] > maximum) maximum = tab[i];
return maximum;
}

// tentative de méthode nombre d'occurences minimum
static int OccurenceTableau(int[] tab, int NbValeurs, int minimum)
{
int occurence = tab[0];
for (int i=0 ; i<NbValeurs ; i++)
if (tab[i] == minimum) minimum = occurence++;
return occurence;
}
}

Si quelqu'un peut m'aiguiller sans faire le travail a ma place (que je comprenne bien le truc) cela serait sympa car je nage un peu et j ai beau relire mes cours mais pour ce dernier point je ne trouve absolument aucun indice.


merci d'avance....
0
chico200987 Messages postés 791 Date d'inscription mardi 6 avril 2004 Statut Membre Dernière intervention 30 juillet 2018 143
9 mars 2011 à 00:50
Alors c'est pas pour le plaisir de te contredire, mais je dirais que tout est (presque) juste !

Je ne decele qu'une seule erreur (grossiere certes..).

Effectivement ton nombre d'occurences qui ne va pas. Reprenons la definition d'une occurence, c'est le nombre de fois qu'une valeur apparait dans ton tableau. C'est donc un compteur, et qui dit compteur, dit initialisation a ... ?

Tu peux reutiliser la meme fonction OccurenceTableau telle quelle ensuite sans rien changer, il faudrait juste changer le nom "minimum" en un nom generique jor "valeur" pour la semantique..

Et tu peux ensuite reutiliser la variable occurence pour calculer le nombre d'occurences pour le nombre max ou alors en creer deux distinctes type occurenceMin et occurenceMax (dans ton main j'entends non pas dans ta fonction OccurenceTableau)

Tu vois le bout du tunnel tu n'es vraiment pas loin ;)
0
Utilisateur anonyme
9 mars 2011 à 00:53
super, je vais mediter un peut et je devrait trouver se fameux bout de tunnel.
jtiens au jus merci bcps....
0
chico200987 Messages postés 791 Date d'inscription mardi 6 avril 2004 Statut Membre Dernière intervention 30 juillet 2018 143
9 mars 2011 à 01:43
Derien :)
0