JAVA - exception d'un caractère dans un scan

bebel75 Messages postés 2 Statut Membre -  
 danimo -
Bonjour,

Je suis débutant en Java ...
Voila j'ai un tableau que je veux remplir à l'initialisation d'étoile (*) ... des données seront ultérieurement rentrées dedans par les utilisateurs ... et je veux que ma fonction regardes si toutes les données du tableau sont similaires à l'exception du * ... y a pas qq chose du genre -{*} comme en math ?
comment faire ? D'avance, merci


static boolean test(char [] [] tableau) {

for (int i=0; i<3; i++){
    if (tableau[i][0] == tableau[i][1] && tableau[i][0] == tableau[i][2]) return true;}
 
return false;
}

2 réponses

  1. danimo
     
    Salut,

    TABLEAU À 2 DIMENSIONS (RAPPEL)

    utilisation d'un tableau à dimensions char [][] tableau ...:

    - le premier [] doit contenir un numéro d'élément, donc une valeur de 0 à n (n < longueur du tableau).
    -le deuxième [] doit contenir un numéro de dimension, donc pour un tableau à 2 dimensions, 0 ou 1.

    exemple.

             char [][] tableau = {
             {'a',    // elt 1 (1ier elt) de la dimension 1 >> [0][0]
                'a'}, // elt 1 (1ier elt) de la dimension 2 >> [0][1]
                   
             {'b',    // elt 2 (2eme elt) de la dimension 1 >> [1][0]
                'b'}, // elt 2 (2eme elt) de la dimension 2 >> [1][1]
                   
             {'c',    // elt 3 (3eme elt) de la dimension 1 >> [2][0]
                'a'}, // elt 3 (1ier elt) de la dimension 2 >> [2][1]
                   
             {'d',    // elt 4 (4eme elt) de la dimension 1 >> [3][0]
                'd'}, // elt 4 (4eme elt) de la dimension 2 >> [3][1]
                   
             {'e',    // elt 5 (5eme elt) de la dimension 1 >> [4][0]
                'b'}, // elt 5 (5eme elt) de la dimension 2 >> [4][1]
             };
                   
                   // Affichage:
             System.out.println("");
             for(int i = 0; i < tableau.length; i++)
             {
                System.out.print("element " + (i+1) + " de la dim. 1: " + tableau[i][0]);
                System.out.println("");
                System.out.println("element " + (i+1) + " de la dim. 2: " + tableau[i][1] + "\n");
             }
             
             for(int i = 0; i < tableau.length; i++)
             {
      // le test ci-dessous
      // if (tableau[i][0] == tableau[i][1]) && tableau[i][0] == tableau[i][2])
      // est impossible >> tableau[i][2] >> dimension 3 pour un tableau à 2 dimensions
                
                if (tableau[i][0] == tableau[i][1]) // && tableau[i][0] == tableau[i][2])
                {
                   System.out.println("i: " + i + " true");
                }
                else
                   System.out.println("i: " + i + " false");
             }
    


    Maintenant pour que l'on puisse t'aider à traiter ton cas:

    -il faudrait qu'on sache ce que tu entends par "si toutes les données du tableau sont similaires"
    -similaires à quoi ?
    -pourquoi initialiser à *
    -quel type de données doivent entrer les utilisateurs sachant qu'ils ne peuvent qu'entrer des données qui doivent correspondre au type du tableau (char, String, int etc)
    -tente d'être plus précis sur ce que tu dois faire
    -un tableau de char n'est peut-être pas le bon choix mais peut-être que si
    -unidimensionnel ou multidimensionnel
    -et encore une fois: tout dépend de ce que tu dois faire, de ce que tu à le droit d'utiliser (si c'est un exo)

    Cordialement,

    Dan
    0
  2. danimo
     
    Re,

    Supposons que tu veuilles savoir si par exemple un String contient le caractère *
    (Il y a, comme très souvent, plusieurs méthodes pour le savoir),
    en voici une:

    int ind = 0;
             String unString = "";
          
          
             unString = "* le gaulois";
          //ou
             //unString = "Asterix le gaulois";
            
             ind = unString.indexOf("*");
             if (ind == -1)
                System.out.println("\nunString \"" + unString + "\" ne contient pas d'*");
             else
                System.out.println("\nunString \"" + unString + "\" contient au moins un *");
    


    Dan
    0
    1. bebel75
       
      Bonjour,

      Merci en fait j'ai un tableau Morpion 3*3 initialisé avec des * dans les 9 cases.

      J'ai crée une fonction qui va scanner le tableau pour voir si j'ai une ligne de O ou de X ... en revanche je ne veux pas que la fonction me découvre une ligne de * ....

      c'est pour cela que je cherche qq chose de léger qui decouvre si 3 cases sont identiques EXCEPTE du caractere *


      J'espere avoir été clair. D'avance, merci.
      0
      1. danimo > bebel75
         
        Salut,

        Bon voici un petit exemple.

        La méthode suivante permet de savoir s'il n'y a pas d'* dans l'un des 8 cas possibles de jeu:
        -3 lignes (ligne1, ligne2, ligne3)
        -3 colonnes (colon1, colon2, colon3)
        -1 diagonale / (diago1)
        -1 diagonale \ (diago2)

        La méthode (une parmi d'autres):

        public static void suiteCouO(String suite, String nomSuite) // static car dans l'exemple qui suit, le traitement est fait dans la méthode main(...)
        
              {
                 int nbreDeFois = 0; 
                 pattern = Pattern.compile("\\w"); //ce motif (\w) traite les lettres minus. et majus.
                                                   // et les chiffes 0 a 9, donc pas les *
                 matcher = pattern.matcher(suite);
                 while(matcher.find())
                 {
                    nbreDeFois++;
                 }
                 if(nbreDeFois == 3)  // car il faut 3 non * pour que le cas soit retenu
                    System.out.println("\nLa suite: " + suite + " (" + nomSuite + ") ne contient pas d'*");
              }
        


        On appelle cette méthode comme ceci:

        suiteCouO(un_des_8cas, "nom_du_cas");
        // exemple ...(ligne1, "ligne1"); ou ...(diago1, "diago1");
        


        L'exemple (c'est un programme à compiler et executer) pas très jojo mais je devais simuler quelques phases de jeu et détailler au maximum:

        import java.util.regex.*;
        
            public class Xyz
           {
           // utilisation d'un tableau de 2 dimensions	
              
           // exemples:
           //String[][] tablo1 = new String[2][3]; // penser à une table de 2 lignes et 3 colonnes
           //String[][] tablo2 = new String[3][3]; // penser à une table de 3 lignes et 3 colonnes
                 
              private static String [][] tableau = new String[3][3];
           //le 1ier [3] indique le nombre de lignes, c'est en fait la longueur de la 1ere dimension.
           //le 2ième [3] indique le nombre de colonnes, c'est en fait la longueur de la 2eme dimension.
           
              private static String ligne1; // cas 1
              private static String ligne2; // cas 2
              private static String ligne3; // cas 3
              private static String colon1; // cas 4
              private static String colon2; // cas 5
              private static String colon3; // cas 6
              private static String diago1; // cas 7
              private static String diago2; // cas 8
                
              private static Pattern pattern;
              private static Matcher matcher;
           
               public static void initialiserTableau(String valInit)
              {
                 for(int i = 0; i < tableau.length; i++)
                 {
                    tableau[i][0] = valInit; // ligne 1 colonne 0
                    tableau[i][1] = valInit; // ligne i colonne 1
                    tableau[i][2] = valInit; // ligne i colonne 2
                 }
              }
           
               public static void afficherTableau()
              {
                 System.out.println("\n");
                 for(int i = 0; i < tableau.length; i++)
                 {
                    System.out.print("Ligne" + (i+1) + " " + tableau[i][0]); // ligne i colonne 0
                    System.out.print(tableau[i][1]); // ligne i colonne 1
                    System.out.println(tableau[i][2]); // ligne i colonne 2
                 }
              }
           
               public static void developperTableau()
              {
              // les 8 cas possibles:
              // -3 lignes de 3 cases
              // -3 colonnes de 3 cases
              // -1 diagonale (/) de 3 cases
              // -1 diagonale (\) de 3 cases
              
                 ligne1 = "";
                 ligne2 = "";
                 ligne3 = "";
                 for(int i = 0; i < tableau.length; i++)
                 {
                    ligne1+= tableau[0][i];
                    ligne2+= tableau[1][i];
                    ligne3+= tableau[2][i];
                 }
                 //System.out.println("\nLigne 1: " + ligne1);
                 suiteCouO(ligne1, "ligne1");
                 
                 //System.out.println("Ligne 2: " + ligne2);
                 suiteCouO(ligne2, "ligne2");
                 //System.out.println("Ligne 3: " + ligne3);
                 suiteCouO(ligne3, "ligne3");
                 
                 colon1 = "";
                 colon2 = "";
                 colon3 = "";
                 for(int i = 0; i < tableau.length; i++)
                 {
                    colon1+= tableau[i][0];
                    colon2+= tableau[i][1];
                    colon3+= tableau[i][2];
                 }
                 //System.out.println("\nColonne 1: " + colon1);
                 suiteCouO(colon1, "colon1");
                 //System.out.println("Colonne 2: " + colon2);
                 suiteCouO(colon2, "colon2");
                 //System.out.println("Colonne 3: " + colon3);
                 suiteCouO(colon3, "colon3");
                 
                 //diago1 (/)
                 //diago2 (\)
                 diago1 = tableau[2][0] + tableau[1][1] + tableau[0][2];
                 diago2 = tableau[2][2] + tableau[1][1] + tableau[0][0];
                 //System.out.println("\nDiagonale 1: " + diago1);
                 suiteCouO(diago1, "diago1");
                 //System.out.println("Diagonale 2: " + diago2);
                 suiteCouO(diago2, "diago2");
                 
              }
           
               public static void suiteCouO(String suite, String nomSuite)
              {
                 int nbreDeFois = 0; 
                 pattern = Pattern.compile("\\w"); //ce motif (\w) traite les lettres minus. et majus.
                                                   // et les chiffes 0 a 9, donc pas les *
                 matcher = pattern.matcher(suite);
                 while(matcher.find())
                 {
                    nbreDeFois++;
                 }
                 if(nbreDeFois == 3)
                    System.out.println("\nLa suite: " + suite + " (" + nomSuite + ") ne contient pas d'*");
              }
           
               public static void main(String args[])
              {
              //init. du tableau à "*";
                 initialiserTableau("*");
              
              //affichage du tableau apres init.
                 afficherTableau();
                 
              //simulation de l'entrée d'un "x" en ligne i colonne 0
                 tableau[1][0] = "x"; // ligne 1 colonne 0
              	//affichage du tableau apres modif.
                 afficherTableau();
                 developperTableau();
              	
              //simulation de l'entrée d'un "o" en ligne i colonne 1
                 tableau[1][1] = "o"; // ligne 1 colonne 1
              	//affichage du tableau apres modif.
                 afficherTableau();
                 developperTableau();
              	   
              //simulation de l'entrée d'un "x" en ligne i colonne 2
                 tableau[1][2] = "x"; // ligne 1 colonne 2
                 //affichage du tableau apres modif.
                 afficherTableau();
                 developperTableau();
                 
                 tableau[0][0] = "o"; // ligne 0 colonne 0
                 afficherTableau();
                 developperTableau();
                 
                 tableau[2][0] = "x"; // ligne 2 colonne 0
                 afficherTableau();
                 developperTableau();
                 
                 tableau[2][2] = "o"; // ligne 0 colonne 0
                 afficherTableau();
                 developperTableau();
                 
              	
              }
           }
        
        Cordialement,
        
        Dan
        
        0