Remplissage tableau [Fermé]

Signaler
-
Messages postés
93
Date d'inscription
dimanche 11 janvier 2009
Statut
Membre
Dernière intervention
30 mai 2020
-
Salut

comment on peut creer une methode public voidremplirCode() qui permet de remplir les cases d'un tableau de 13 case a traver le clavier par des entiers entre 0 et 9 Doit -on utuliser un boucle do while dans un boucle for?

1 réponse

Messages postés
93
Date d'inscription
dimanche 11 janvier 2009
Statut
Membre
Dernière intervention
30 mai 2020
4
Salut!

Essaie de faire des questions plus ou moins claires!
Si j'ai bien compris:
"Comment peut-on creer une methode public appelée "public void remplirCode()" qui permet de remplir les cases d'un tableau de 13 cases a travers le clavier par des entiers entre 0 et 9?"

Donc si tu veux absolument une fonction void. Il te suffit de passer en paramètre le tableau (du coup, ça fait: void remplirCode(int[ ] monTableau)" ). Tout est référencer en java.
Si non, tu peux aussi retourner par ta fonction un tableau int[ ]. Ce qui fait:" int[ ] remplirCode()"

"Doit-on utiliser un boucle do while dans un boucle for?"
Pas du tout! A moins que tu comptes faire une double boucle.

Il faut bien faire la différence entre un for, un do while et un while:
Le while : Avant de rentrer dans la boucle, on regarde si la condition est remplie.
Le do while: Comme le précédent sauf que la condition est vérifiée à chaque fin de boucle.

Le for fonctionne de la même manière que le while dans le sens qu'il commence par regarder si la condition est remplie. La grosse différence de ta boucle, c'est que tu peux initialiser une valeur et ajouter une opération à la fin.
En pseudo code, la boucle for s'écrit:
POUR compteur DE début à fin
Instruction 1
FIN POUR
Instruction 2


for(int i=0;i<tab.length;i++){
          //Instructions
}
Messages postés
93
Date d'inscription
dimanche 11 janvier 2009
Statut
Membre
Dernière intervention
30 mai 2020
4
Je t'ai fait deux versions!
La première est une gestion des exceptions très basique, elle est tel quel, je l'aurais écrit en c (mise à part que les booleans n'existe pas, j'aurais utiliser un int).
Ca met en évidence la gestion des boucles et d'une variable boolean (la variable error)

La seconde est une gestion d'exceptions classique à utiliser en Java et en général en orienté objet. C'est beaucoup plus propre. A noter, que pour bien faire, j'aurais du créer une class personnalisée qui hérite d'Exception pour gérer que l'exception envoyée si le nombre n'est pas entre 0 et 9.

Hésite pas, si tu as besoin de plus de précision sur le code.

package applicationtest;

public class ApplicationTest {

    /**
     * @param args the command line arguments
     */
    
    public static int tailleTab = 5;
    
    public static void main(String[] args) {
        
        int[] myTab = new int[tailleTab];
        remplirCodeV1(myTab);
        
        if(myTab!=null)
        {
            for(int i=0; i<myTab.length;i++)
                System.out.println(myTab[i]);
        }
        
        myTab = new int[tailleTab];
        remplirCodeV2(myTab);
        if(myTab!=null)
        {
            for(int i=0; i<myTab.length;i++)
                System.out.println(myTab[i]);
        }
    }
    


Version 1: Gestion des exceptions comme en c.
public static void remplirCodeV1(int[] code){ 

        Scanner sc = new Scanner (System .in); 
        boolean error = false;
        for(int i=0; i<code.length;i++){ 
            int tmp=0;
            do{

                System.out.print("Entrez la case "+(i+1)+" du tableau: ");
                String s = sc.nextLine(); //On récupère la caractère encodé

                if(!s.matches("\\d+")){
                    error=true;
                    System.err.println("Entrez un chiffre!!");
                    System.err.println("Réentrez cette case !");
                }
                else{
                    tmp=Integer.parseInt(s);
                    if(tmp<0 || tmp>9){
                        error=true;
                        System.err.println("Le chiffre doit être entre 0 et 9");
                        System.err.println("Réentrez cette case !");
                    }else  
                        error=false;
                }
            }while(error);
            code[i]=tmp;
        }
    }
    


Version 2: Gestion des exceptions classiques.
    public static void remplirCodeV2(int[] code){ 

           Scanner sc = new Scanner (System .in); 
            for(int i=0; i<code.length;i++){ 
                try{
                    System.out.print("Entrez la case "+(i+1)+" du tableau: ");
                    String s = sc.nextLine(); //On récupère la caractère encodé
                    int tmp=Integer.parseInt(s);
                    if(tmp<0 || tmp>9)
                        throw new Exception();
                    code[i]=tmp;
                }
                catch(NumberFormatException e ){
                    System.err.println("Erreur "+e.toString());
                    System.err.println("Réentrez cette case !");
                    i--;
                }
                catch (Exception e) {
                   System.err.println("Le chiffre doit être entre 0 et 9");
                   System.err.println("Réentrez cette case !");
                   i--;
               }

            }  
        
    }
    
}
juste une remarrque pour la derniere version :

                catch(NumberFormatException e ){
                    System.err.println("Erreur "+e.toString());
                    System.err.println("Réentrez cette case !");
                    i--;
                }
                catch (Exception e) {
                   System.err.println("Le chiffre doit être entre 0 et 9");
                   System.err.println("Réentrez cette case !");
                   i--;
               }

pourquoi quelle est la besoin de creer 2 format de catch Exception ?!
la seule catch (Exception e)

ne seras pas suffisante !!
Messages postés
93
Date d'inscription
dimanche 11 janvier 2009
Statut
Membre
Dernière intervention
30 mai 2020
4
Ca fonctionnerait, mais ça t'empêche de connaitre l'exception précise renvoyé.
Comme je le disais, pour bien faire, j'aurais du implémenter une classe personnelle qui hérite d'exception.
Mon deuxième catch récupérerai n'importe quelle exception autre que la NumberFormatException.
Donc oui, ça fonctionne mais c'est une mauvaise gestion
D'accord c'est claire :)

On continue, cette partie aussi facile mais comme je te dis je suis ainsi entrain d'apprendre les base .

et Si maintenant je veut tester si le produit venir du turkey et j'affiche le message "c'est produit est de turkey "

ou b1

"c'est produit est pas de turkey"

avec un produit de turkey celui qui correspond a un code barre commence par
'869 '

------> Donc ici le principe est de tester code[0] =8 passer tester le suivant
Sinon je sort et j'affiche "ce produit pas de turkey"

---------------------------------------------------------------------------------------------------------------

public void payscode(){
int i =0;
if (code[0]==6){

..........................
Messages postés
93
Date d'inscription
dimanche 11 janvier 2009
Statut
Membre
Dernière intervention
30 mai 2020
4
Tu mets ton if dans ta boucle et tu parcours seulement les 3 premières cases, si c'est le cas, tu fais un System.out.println()