IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Collection et Stream Java Discussion :

Inversion tableau( bad operand type)


Sujet :

Collection et Stream Java

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Escrimeur
    Inscrit en
    Août 2014
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Angola

    Informations professionnelles :
    Activité : Escrimeur

    Informations forums :
    Inscription : Août 2014
    Messages : 10
    Points : 6
    Points
    6
    Par défaut Inversion tableau( bad operand type)
    Bonjour peuple de la Terre
    .
    J'ai écrit un programme qui:
    remplit un tableau à deux dimensions avec les coordonnées [colonnes,lignes]
    l'affiche
    Inverse la valeur des coordonnées colonnes horizontalement
    le ré-affiche.
    Alors ça marche mais ce code est autant optimisé qu'un piano est aérodynamique.
    Et pis j'voulais faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    tableau_2D[compteur_col][compteur_lig]="["+compteur_col-compteur_col*2+7+"]["+compteur_lig+"]";
    Mais Java il dit ça: bad operand types for binary operator, pourtant compteur_col c'est du int en plus quand je fais compteur_col+compteur_col ça marche sans soucis!
    Si vous m'aidez vous irez au paradis, si vous ne m'aidez pas vous serez transformé en friteuse.



    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    import javax.swing.*;
     import java.util.ArrayList;
     
    public class exo_12 {
     
        public static void main(String[] args) 
        	{
        		String[][] tableau_2D=new String [8][6];
        		int compteur_col=0,compteur_lig=0;
     
     
        		//On rempli les emplacements du tableau avec les coordonées correspondantes.
        		for(compteur_col=0;compteur_col<8;compteur_col++)
        		{
        			for(compteur_lig=0;compteur_lig<6;compteur_lig++)
        			{
        				tableau_2D[compteur_col][compteur_lig]="["+compteur_col+"]["+compteur_lig+"]";
        			}
        		}
     
        		//On affiche le tableau.
        		for(compteur_col=0;compteur_col<8;compteur_col++)
        		{
        			for(compteur_lig=0;compteur_lig<6;compteur_lig++)
        		    {
        		      System.out.println(tableau_2D[compteur_col][compteur_lig]);
        		    }
        		}
     
        		for(compteur_col=0;compteur_col<8;compteur_col++)
        		{
        			for(compteur_lig=0;compteur_lig<6;compteur_lig++)
        			{
        				//On crée une variable qui par un calcul digne des plus grand astro-celésto-mathématiciens renvoi la valeur en symétrie horizontale de la case.
        				int clodo_strat=compteur_col-compteur_col*2+7;
        			tableau_2D[compteur_col][compteur_lig]="["+clodo_strat+"]["+compteur_lig+"]";
        		    }
        		}
     
        		//On affiche le tableau avec les valeurs des colonnes inversé horizontalement.
        		for(compteur_col=0;compteur_col<8;compteur_col++)
        		{
        			for(compteur_lig=0;compteur_lig<6;compteur_lig++)
        			{
        		System.out.println(tableau_2D[compteur_col][compteur_lig]);
        			}
     
                }
     
                               }
                                  }

  2. #2
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Salut,

    Quand tu écris ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    tableau_2D[compteur_col][compteur_lig]="["+compteur_col-compteur_col*2+7+"]["+compteur_lig+"]";
    Le compilateur se dit : tiens, on calcule un truc. je dois traiter un calcul en tenant compte de la priorité des opérateurs,
    • donc j'ai le * qui est prioritaire par rapport à tous les autres opérateurs (+ et -), je le traite d'abord : ça fait du int * int, le compilo sait traiter et sait que ça fait du int
    • ensuite il traite le +, donc il regarde "["+compteur_col, et voit une concaténation de chaînes (parce que pour lui String + int ça fait du String)
    • ensuite il vois le -, et là le compilateur ne sait pas quoi en faire, parce que ça n'existe pas le signe - dans une opération de String avec un int.



    Je ne sais pas trop pourquoi tu aurais le message dont tu parles, mais j'obtiens bien un message qui dit que - n'est pas un opérateur valide pour les opérandes de type String et int.

    Tu as contourné le problème en faisant une variable intermédiaire, mais tu aurais pu utiliser des parenthèses pour forcer la priorité.
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Escrimeur
    Inscrit en
    Août 2014
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Angola

    Informations professionnelles :
    Activité : Escrimeur

    Informations forums :
    Inscription : Août 2014
    Messages : 10
    Points : 6
    Points
    6
    Par défaut
    Ah ouais je savais pas que la concaténation était prioritaire ! Tout s'explique, comme à la fin d'un épisode de scoobydoo.
    Mercy Jamy!

  4. #4
    Membre expérimenté Avatar de nchal
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2012
    Messages
    512
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2012
    Messages : 512
    Points : 1 656
    Points
    1 656
    Par défaut
    Bonjour

    En même temps, utiliser Java pour faire un exercice bidon et coder le tout en impératif, c'est moche, très moche. Autant faire du C ...
    Si tu fais des exercices simples, essaie au moins de respecter le principe objet le plus possible.

    Par exemple, évite de tout mettre dans un gros static main tout dégueu. Amuses toi à faire plusieurs objets (pas 10 non plus pour un truc comme ça), factorise au maximum ton code. Par exemple, tu utilises plusieurs fois la même boucle, pourquoi ne pas faire une méthode pour factoriser tout ça ? Évite aussi les magic number, y a rien pire pour foutre la merde à un moment donné.
    Et je vois que tu importes swing et ArrayList, mais tu ne les utilises pas. Déjà que Java c'est pas folichon niveau perf, mais si en plus, tu lui mets des bâtons dans les roues
    Si la réponse vous convient, un petit ça encourage.
    Avant tout nouveau post, pensez à : la FAQ, Google et la fonction Recherche
    Si vous devez poster, pensez à: Ecrire en français, la balise [CODE] (#) et surtout

  5. #5
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    En fait, ici, c'est plutôt par la règle d'associativité que le compilateur choisi le + (utilisé quand les opérateurs ont la même priorité, l'associativité left-to-right fait que la concaténation est faite d'abord).

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     System.out.println( 100 - 42 + "42" );
    compilera et affichera 5842.
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  6. #6
    Futur Membre du Club
    Homme Profil pro
    Escrimeur
    Inscrit en
    Août 2014
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Angola

    Informations professionnelles :
    Activité : Escrimeur

    Informations forums :
    Inscription : Août 2014
    Messages : 10
    Points : 6
    Points
    6
    Par défaut
    nchal effectivement j'aurais du factoriser tu fais bien de me le rappeler par contre c'est quoi un "magic number"?
    Au passage fais pas trop l'ancien, j'ai posté sur le forum débutant, répond avec humilité.
    Allez merci quand même t'as pas l'air d'être un mauvais bougre.

  7. #7
    Membre expérimenté Avatar de nchal
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2012
    Messages
    512
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2012
    Messages : 512
    Points : 1 656
    Points
    1 656
    Par défaut
    C'est bien tu m'as fait rire.
    Sinon un nombre magique, ça regroupe plusieurs choses mais en gros dans ton appli, au lieu de mettre 8 et 6 en taille de tableau, tu déclares des constantes et tu n'utilises que ces constantes dans ton code, ainsi si ce nombre doit changer pour une raison ou une autre, pas besoin d'aller fouiller dans le code, juste à changer une variable
    Si la réponse vous convient, un petit ça encourage.
    Avant tout nouveau post, pensez à : la FAQ, Google et la fonction Recherche
    Si vous devez poster, pensez à: Ecrire en français, la balise [CODE] (#) et surtout

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Utilisation d'un ArrayList : "bad operand type [...]"
    Par rco69 dans le forum Collection et Stream
    Réponses: 6
    Dernier message: 23/04/2015, 09h44
  2. Fichiers séquentiels et bad operand type
    Par Booniak dans le forum Entrée/Sortie
    Réponses: 7
    Dernier message: 31/08/2014, 21h11
  3. Tableau dynamique - 2 types
    Par _ChToM_ dans le forum VB 6 et antérieur
    Réponses: 11
    Dernier message: 03/10/2006, 18h51
  4. [POO] Usupported operand types
    Par Anduriel dans le forum Langage
    Réponses: 2
    Dernier message: 21/09/2006, 20h52
  5. Tableau de 2 types differents
    Par The_Undertaker dans le forum C++
    Réponses: 5
    Dernier message: 21/10/2005, 18h39

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo