Partage
  • Partager sur Facebook
  • Partager sur Twitter

Java cast ou lecture ?

je ne sais plus si il faut le caster ou simplement le lire

Sujet résolu
    26 janvier 2022 à 10:31:07

    Bonjour,
    j'ai un problème de conversion ou lecture de données.
    J'ai un Arraylist<Integer> qui contient des valeurs qui sont des indices (ou l'endroit précis d'une valeur contenu dans un simple tableau de CHAR) 

    Exemple : 
    char tChar[] = new char[]{a,b,c,d,e,f};
    cela correspond donc en indice a {0,1,2,3,4,5}

    mon Arraylist contient les valeurs {1,4} après une série de trie mon but étant d'arriver a afficher les valeurs char de mon tableau tChar a partir de ces indices
    Le résultat attendu est : b,e 

    Mais je ne parviens pas a le caster et je viens vers vous pour m'aider a trouver la solution
    que cela fait un moment que je pédale dans la semoule et je suis en train de m'arracher le peu de cheveux qu'il me reste sur la tête.

    Pour info, j'ai utilisé un Arraylist parce qu'il n'est pas définie en taille et que je peu avoir plusieurs valeur en fonction de ma recherche afin de le remplir 

    Si une personne peu m'aider SVP ou me mettre sur la voie merci d'avance


    • Partager sur Facebook
    • Partager sur Twitter
    Je suis ici pour apprendre ! je cherche juste à être orienté pas que l'on me mâche le travail, mais je n'ai pas 10 ans expérience en dev, donc essayer d'être un minimum pédagogue merci
      26 janvier 2022 à 14:24:59

      Quelques questions et remarques:

      Pourquoi avoir besoin d'une collection alors que tu connais d'avance le nombre d'indice, le même que le nombre de char, tu parles de tri, ce qui implique que les éléments sont triés, et pas ignores.

      Quelle est ta définition de 'cast' ?

      La notation hongroise n'est pas recommandée en java, et sinon ce serait arr pour array et non t comme préfixe.

      • Partager sur Facebook
      • Partager sur Twitter
        27 janvier 2022 à 9:11:17

        bonjour,
        dans ma collection dont les valeur sont 1,4 comme l'exemple susmentionné suite a un trie effectué en Hamon dont les indices de cette collection sont 0,1 sachant que c'est valeur peuvent être différente de 1,4 exemple 4,1,3 en fonction du trie effectué en Hamon et d'autre action préalablement effectué.
        le tri est bien effectué ceux qui me permet d'en ressortir les valeur contenu ma collection.
        jusque ici tous va bien,
        là ou cela coince c'est que ces fameuses valeur contenu dans cette collection qui corresponde au indice de mon tableau de char TChar dont je vais avoir besoin pour refaire une manip dessus mais sur la valeur réelle c'est a dire la valeur Char toujours par rapport a mon exemple qui correspond a (b,e) 

        -tableau de char tChar est un tableau a contenu fixe c'est toujours les même valeurs quoi qu'il arrive
        -j'ai un texte qui lui est aléatoire dont je trie et recherche certaine valeur contenu dans tChar et que je vais placer dans une collection puisque je ne connais pas la taille qu'il peu avoir en fonction du résultat du trie d'où l'utilisation de la collection
        -une foi que j'ai fait ce trie je vais devoir faire des changement sur c'est valeurs contenu dans cette collection seulement il faut que je sache a quoi correspond les indices contenu dans ma collection puisque ce sont juste des indices numérique alors que moi je veut faire la modification sur la valeur char
        -donc je suis oblige de lire la collection en castant ces valeur numérique pour savoir a quoi elle correspondent dans mon tableau de char tChar

        je sais c'est tordu, mais j'ai pas le choix je suis parti en me repérant sur les indices du tChar parce que cela étais plus simple a réalisé pour moi mais là du coup je sèche

        donc je cherche a lire ma collection ATri<Integer> par rapport a mon tableau tChar afin d'en afficher les valeur char 
        voila donc pour moi c'est bien un cast qu'il faut effectué tous en effectuant une lecture des 2 tableau simultané (la collection ATri et le tChar)

        un cast c'est changer un format de valeur int par exemple en valeur String


        • Partager sur Facebook
        • Partager sur Twitter
        Je suis ici pour apprendre ! je cherche juste à être orienté pas que l'on me mâche le travail, mais je n'ai pas 10 ans expérience en dev, donc essayer d'être un minimum pédagogue merci
          27 janvier 2022 à 12:16:42

          Bonjour,

          Transformer un int en String, ce n'est pas un cast. Ca se fait via une méthode.

          Pour ton problème, c'est simple.

          for (int index : ATri) {
              char c = tChar[index];
              // faire des trucs avec c
          }

          Pas besoin de cast.

          • Partager sur Facebook
          • Partager sur Twitter
            27 janvier 2022 à 12:18:23

            cyril-3-4 a écrit:

            je sais c'est tordu, mais j'ai pas le choix je suis parti en me repérant sur les indices du tChar parce que cela étais plus simple a réalisé pour moi mais là du coup je sèche


            Quant tu constates toi-même que

            1. c'est tordu

            2. tu pensais que c'est plus simple, mais en fait non

            3. et que tu sèches

            la conclusion logique serait que tu reprennes sur des bases plus saines. Quand c'est mal parti, faut pas s'obstiner, tu vas te fatiguer pour rien.

            ---

            En fait, c'est juste que tu t'embrouilles la tête entre

            • les indices du tableau de caractères
            • ton ArrayList d'indices dans ce tableau
            • et probablement les indices de l'ArrayList
            et probablement en y ajoutant malencontreusement une notion de "casting" parce que tu voudrait passer d'un entier (contenu dans l'ArrayList) à un caractère. Probablement dans le but de l'afficher parce que tu nous parles de String.  A témoin :
            > je cherche a lire ma collection ATri<Integer> par rapport a mon tableau tChar afin d'en afficher les valeur char
            La range-based-for-loop montrée par @Brubru777 est un bon moyen de simplifier, en faisant abstraction au moins de la notion d'indice qui servirait à parcourir l'ArrayList. Parce que
            for (int i = 0; i < ATri.size(); i++) {   // ne faites pas ça
                int index = Atri.get(i);
                char c = tChar[index];
                ...
            }
            
            ça c'est la première idée qui vient quand on a un prof qui n'a jamais entendu parler de java8 (on en est à java17) et qui a passé son temps à vous bassiner avec la boucle for à la C (c'est le cas de le dire).
            Bref, faut dissocier les problèmes, et utiliser les mécanismes adéquats fournis par le langage pour éviter de se perdre dans les détails.

            -
            Edité par michelbillaud 27 janvier 2022 à 12:36:33

            • Partager sur Facebook
            • Partager sur Twitter
              27 janvier 2022 à 12:53:49

              Comme dit précédemment, le cast est une conversion du type d'un seul objet en mémoire, ce que toi tu veux faire est une conversion de format de donnée, donc d'une nouvelle affectation de mémoire pour ce nouvel objet, ce n'est plus un cast.

              ex de cast

              int v = 65;

              print((char)v); //affiche A

              Pour le reste, je n'ai pas lu entièrement, les fautes et le manque de ponctuation rendent ton texte difficile a lire, ce serait bien de passer par un correcteur et de faire un effort sur la présence de majuscules, la ponctuation et la forme.

              Enfin on utilise souvent le terme tri en informatique dans le sens de mettre les élément dans un ordre, pour séparer des éléments voulu de ceux a éliminer, on préfèrera filtrer.

              • Partager sur Facebook
              • Partager sur Twitter
                27 janvier 2022 à 13:48:18

                Pour etre complet, outre ce premier cast qui sert à forcer des conversions entre types natifs (entiers, flitrants, caracteres...), il y a la conversion des références.

                Par exemple

                Objet o = ....
                
                String s = (String) o;
                if (s != null) {
                   // c'est une chaine


                PS : On utilisait ça abondamment il y a longtemps, quand la généricité n'avait pas encore été introduite (Java 1.5, 2004).

                Vector v = new Vector();
                v.add("abcd");           // String
                v.add(1);                // Integer
                

                et bien sûr on en retrouve des traces dans les tutoriels sur Internet, comme de toutes les vieilles cochonneries à ne plus utiliser.

                -
                Edité par michelbillaud 27 janvier 2022 à 14:25:00

                • Partager sur Facebook
                • Partager sur Twitter
                  27 janvier 2022 à 14:36:25

                  Merci a vous pour vos réponse le problème est résolu
                  avec :
                  for (int index : ATri) {
                      char c = tChar[index];
                      System.out.println(tChar[index]);
                  }

                  ou ceci

                  for (int i = 0; i < ATri.size(); i++) {  
                      int index = Atri.get(i);
                      char c = tChar[index];
                      System.out.println(tChar[index]);
                  }
                  

                  sachant que j'utilise la première solution.
                  Et désolé pour les fautes d'orthographe et ponctuation, je m'appliquerais au besoin si l'occasion ce représente

                  • Partager sur Facebook
                  • Partager sur Twitter
                  Je suis ici pour apprendre ! je cherche juste à être orienté pas que l'on me mâche le travail, mais je n'ai pas 10 ans expérience en dev, donc essayer d'être un minimum pédagogue merci

                  Java cast ou lecture ?

                  × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                  × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                  • Editeur
                  • Markdown