Simplifier l'écriture en Java

Résolu/Fermé
persepolis7 Messages postés 58 Date d'inscription mercredi 10 janvier 2018 Statut Membre Dernière intervention 16 janvier 2019 - Modifié le 21 févr. 2018 à 14:06
persepolis7 Messages postés 58 Date d'inscription mercredi 10 janvier 2018 Statut Membre Dernière intervention 16 janvier 2019 - 21 févr. 2018 à 20:16
Bonjour !

Je suis entrain de voir les tableaux avec Java, et je trouve que mon écriture est trop longue... je crois qu'il faut utiliser .length et des var pour incrémenté mais comme tout mon tableau est en String.. Si quelqu'un pouvait m'expliquer comment faire ça me ferait gagner du temps :)
Merci,


Ah ! Une autre question peut ont donner des entiers et chaines de caractères dans un même tableau ?

                      ? tableau_2_types [][] = { {0, 1, 2} , {"ab", "cd", "ef"} };


//Voici mon roman détaillé :)))

String animaux_Nombres[][] = {
    {"Chat", "Chien", "Elephant", "Tigre", "Ours"},
    {"10", "11", "12", "13", "14", "15","16"} 
                                   };
  
  String reponse_1;
  String reponse_2;
                String reponse_3;
  String type_reponse[] = {"oui", "non"};
  
  do {
  
  System.out.print("Entre un animal : ");
  reponse_1 = sc.nextLine();
  System.out.print("Entre un nombre : ");
  reponse_2 = sc.nextLine();
  
  if((reponse_1.equalsIgnoreCase(animaux_Nombres[0][0]) ||
     reponse_1.equalsIgnoreCase(animaux_Nombres[0][1]) || 
     reponse_1.equalsIgnoreCase(animaux_Nombres[0][2]) || 
     reponse_1.equalsIgnoreCase(animaux_Nombres[0][3]) || 
     reponse_1.equalsIgnoreCase(animaux_Nombres[0][4]))
      &&
     (reponse_2.equals(animaux_Nombres[1][0]) ||
     reponse_2.equals(animaux_Nombres[1][1]) || 
     reponse_2.equals(animaux_Nombres[1][2]) || 
     reponse_2.equals(animaux_Nombres[1][3]) || 
     reponse_2.equals(animaux_Nombres[1][4]) || 
     reponse_2.equals(animaux_Nombres[1][5]) || 
     reponse_2.equals(animaux_Nombres[1][6]))
     )
    {
   
   System.out.print(reponse_1+" et  "+reponse_2+" se trouvent dans le tableau");
  }


               // ET C'EST PAS FINI....


  else if((!reponse_1.equalsIgnoreCase(animaux_Nombres[0][0]) ||
     !reponse_1.equalsIgnoreCase(animaux_Nombres[0][1]) || 
     !reponse_1.equalsIgnoreCase(animaux_Nombres[0][2]) || 
     !reponse_1.equalsIgnoreCase(animaux_Nombres[0][3]) || 
     !reponse_1.equalsIgnoreCase(animaux_Nombres[0][4]))
      ||
     (!reponse_2.equals(animaux_Nombres[1][0]) ||
     !reponse_2.equals(animaux_Nombres[1][1]) || 
     !reponse_2.equals(animaux_Nombres[1][2]) || 
     !reponse_2.equals(animaux_Nombres[1][3]) || 
     !reponse_2.equals(animaux_Nombres[1][4]) || 
     !reponse_2.equals(animaux_Nombres[1][5]) || 
     !reponse_2.equals(animaux_Nombres[1][6]))
     )
    {
   
   System.out.print(reponse_1+" et  "+reponse_2+" ne se trouvent pas dans le tableau");
  }


               System.out.print("Voulez-vous réessayer ? oui/non : ");
        reponse_3 = sc.nextLine();
        System.out.println("\n");

        }while(reponse_3.equalsIgnoreCase(type_reponse[0]));
  
  System.out.println(" Aurevoir !");
A voir également:

1 réponse

KX Messages postés 16733 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 31 janvier 2024 3 015
21 févr. 2018 à 14:19
Bonjour,

Il faut utiliser des boucles, parce que là ton code ne fonctionne qu'avec 5 valeurs, mais il faut que ça puisse aussi fonctionner avec 4 valeur, 6 valeurs... ou 50000 valeurs !

Remarque : je ne comprends pas à quoi sert ton tableau mais si ce sont des données décorellées (ce qui semble être le cas), il faudrait plutôt avoir deux tableaux : un String[] et un int[]

String[] animaux = {"Chat", "Chien", "Elephant", "Tigre", "Ours"};
int[] nombres = {10, 11, 12, 13, 14, 15, 16};

boolean hasAnimal = false;
for (String animal : animaux) {
    if (reponse1.equalsIgnoreCase(animal))
        hasAnimal = true;
}
boolean hasNombre = false;
for (int nombre : nombres) {
    if (reponse2 == nombre))
        hasNombre = true;
}
if (hasAnimal && hasNombre) {
    // ...
}
1
persepolis7 Messages postés 58 Date d'inscription mercredi 10 janvier 2018 Statut Membre Dernière intervention 16 janvier 2019 1
Modifié le 21 févr. 2018 à 18:22
Je cherche à tester
si les deux valeurs entrée par l'utilisateur correspondent aux valeurs des sous-tableaux, si elles correspondent afficher du texte
tester si les deux valeurs entrée par l'utilisateur ne correspondent pas et afficher du texte
tester si une des deux valeurs entrée ne correspond pas aux valeurs des sous-tableaux, si une des deux ne correspond pas afficher du texte
puis redemandé si oui ou non il souhaite répéter l'action.

J'apprends à utiliser les tableaux multidimensionnelle d'où l'intérêt de d'utiliser deux String (je ne sais si un tableau bidimensionnelle peut comprendre de types de sous tableaux)

Je comprends pas l'ensemble de ton code :


String[] animaux = {"Chat", "Chien", "Elephant", "Tigre", "Ours"};
    int[] nombres = {10, 11, 12, 13, 14, 15, 16};
    String reponse1;
    int reponse2;
    
    System.out.println("Entre un animal :");
    reponse1 = sc.nextLine();
    System.out.println("Entre un nombre :");
    reponse2 = sc.nextInt();

    boolean hasAnimal = false;
//Pourquoi on utilise un boolean false ici ?

    for (String animal : animaux) {
//Je ne comprends pas la syntaxe pour l'instant, tu as crée la var animal pour stocké les valeurs du tableau animaux ?

        if (reponse1.equalsIgnoreCase(animal))
//Si reponse1 égale valeurs du tableau animaux ?

            hasAnimal = true;
//Pourquoi true 
    }

    boolean hasNombre = false;
//même questions que pour String
    for (int nombre : nombres) {
        if (reponse2 == nombre)
            hasNombre = true;
    }
    

          if (hasAnimal && hasNombre) {
     System.out.println(reponse1+" et "+reponse2+" se trouve dans le  tableau");
    }
    
    else if (hasAnimal && !hasNombre){
     System.out.println(reponse1+" se trouve dans le tableau mais "+reponse2+" ne se trouve pas dans le  tableau");
    }
    
    else if (!hasAnimal && hasNombre){
     System.out.println(reponse2+" se trouve dans le tableau mais "+reponse1+" ne se trouve pas dans le  tableau");
    }
0
KX Messages postés 16733 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 31 janvier 2024 3 015 > persepolis7 Messages postés 58 Date d'inscription mercredi 10 janvier 2018 Statut Membre Dernière intervention 16 janvier 2019
Modifié le 21 févr. 2018 à 19:22
"je ne sais si un tableau bidimensionnelle peut comprendre de types de sous tableaux"
En Java tous les objets héritent de la classe Object et tous les types primitifs peuvent être castés en objets, donc tu peux avoir un Object[][] qui contiendrait n'importe quels objets : des String, des int, etc.

Object[][] animauxNombres = {{"Chat", "Chien", "Elephant", "Tigre", "Ours"}, {10, 11, 12, 13, 14, 15, 16}}; 

Sachant qu'un tableau est également un objet, donc on pourrait faire un Object[] dont le premier élément est un String[] et le deuxième est un int[]

String[] animaux = {"Chat", "Chien", "Elephant", "Tigre", "Ours"};
int[] nombres = {10, 11, 12, 13, 14, 15, 16};
Object[] animauxNombres = { animaux, nombres };

Mais en pratique, on ne fait jamais ce genre de codes, Java est un langage objet, donc quand on a des données complexes on les structures dans des objets (j'imagine que tu n'as pas encore vu ça, mais tu verras plus tard qu'en fait se poser ce genre de questions n'a pas vraiment de sens), ce qui fait qu'un tableau en Java sera toujours utilisé uniquement avec un seul type de données dedans.

    boolean hasAnimal = false;
//Pourquoi on utilise un boolean false ici ?

    for (String animal : animaux) {
//Je ne comprends pas la syntaxe pour l'instant, tu as crée la var animal pour stocké les valeurs du tableau animaux ?

        if (reponse1.equalsIgnoreCase(animal))
//Si reponse1 égale valeurs du tableau animaux ?

            hasAnimal = true;
//Pourquoi true 
    }

Ce que je cherche à reproduire c'est ton code :
reponse_1.equalsIgnoreCase(animaux_Nombres[0][0]) ||
     reponse_1.equalsIgnoreCase(animaux_Nombres[0][1]) || 
     reponse_1.equalsIgnoreCase(animaux_Nombres[0][2]) || 
     reponse_1.equalsIgnoreCase(animaux_Nombres[0][3]) || 
     reponse_1.equalsIgnoreCase(animaux_Nombres[0][4])

Oublions le double tableau pour l'instant, ça simplifie ton code comme ceci :
reponse1.equalsIgnoreCase(animaux[0]) ||
     reponse1.equalsIgnoreCase(animaux[1]) || 
     reponse1.equalsIgnoreCase(animaux[2]) || 
     reponse1.equalsIgnoreCase(animaux[3]) || 
     reponse1.equalsIgnoreCase(animaux[4])

La boucle for-each (qui est la plus utilisée en Java) s'écrit
for (Type variable : tableau)

Elle est équivalente à faire
for (int i=0; i<tableau.length; i++) { Type variable = tableau[i];

Sauf que dans la plupart des cas (et notamment ici) l'indice
i
n'a aucune importance, c'est pour ça que la boucle for-each est plus pratique (ainsi que d'autres avantages).

Mais on pourrait très bien le faire quand même avec une boucle for :

boolean hasAnimal = false;
for (int i = 0; i < animaux.length; i++) {
    String animal = animaux[i];
    if (reponse1.equalsIgnoreCase(animal))
        hasAnimal = true;
}

Ce que tu veux faire avec tes
||
c'est juste dire que si la réponse est égal à un animal alors ta réponse c'est
true
, donc si le tableau est vide par exemple, la réponse doit être false (il n'y a aucune valeur du tableau qui est égale), donc au départ je mets
boolean hasAnimal = false;
.
Puis je regarde une à une les valeurs des animaux, avec le même test equalsIgnoreCase qu'avant, et s'il y en a une qui est égale, je fait
hasAnimal = true;
ce qui sera mon résultat final, sauf si j'en ai trouvé aucun, dans ce cas la réponse sera false puisque la valeur de départ n'a pas changée.

Remarque : si tu veux tu peux remettre ton double tableau avec
for (String animal : animauxNombres[0])
même si je pense toujours - au delà du simple exercice de faire un double tableau - que cela n'a pas de sens ici.
0
persepolis7 Messages postés 58 Date d'inscription mercredi 10 janvier 2018 Statut Membre Dernière intervention 16 janvier 2019 1
21 févr. 2018 à 20:16
Merci pour toutes ces réponses détaillé, je pense avoir bien compris ! :)
0