Remplissage tableau

Fermé
krelly - 5 nov. 2018 à 16:52
aure2015 Messages postés 93 Date d'inscription dimanche 11 janvier 2009 Statut Membre Dernière intervention 30 mai 2020 - 13 nov. 2018 à 19:06
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

aure2015 Messages postés 93 Date d'inscription dimanche 11 janvier 2009 Statut Membre Dernière intervention 30 mai 2020 5
6 nov. 2018 à 21:07
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
}
0
aure2015 Messages postés 93 Date d'inscription dimanche 11 janvier 2009 Statut Membre Dernière intervention 30 mai 2020 5
6 nov. 2018 à 21:10
Mais si je peux me permettre, il serait peut être plus didactique de commencer avec un langage basique tel que le c!
0
En faite je suis entrain de m'entrainer sur java et j'aime bien comprendre d'une facon basique et ne laissez pas les chose en flou

ici

"Chaque case doit contenir des entiers entre 0 et 9" et la saisie se fait par clavier ( "Classe scanner")

donc

public void remplirCode(int[ ] code){

for(int i=0; i<code.length;i++){

Scanner sc = new Scanner (System .in);


........

Vous pouvez ainsi m'aider a compléter cette partie de code

je te remercie enormement
0
aure2015 Messages postés 93 Date d'inscription dimanche 11 janvier 2009 Statut Membre Dernière intervention 30 mai 2020 5
8 nov. 2018 à 14:43
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--;
               }

            }  
        
    }
    
}
0
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 !!
0
aure2015 Messages postés 93 Date d'inscription dimanche 11 janvier 2009 Statut Membre Dernière intervention 30 mai 2020 5
9 nov. 2018 à 17:47
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
0