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

avec Java Discussion :

Afficher des chars/int/double/.. sans String avec System.out.print


Sujet :

avec Java

  1. #1
    Membre à l'essai
    Homme Profil pro
    Autodidacte
    Inscrit en
    Décembre 2016
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Autodidacte

    Informations forums :
    Inscription : Décembre 2016
    Messages : 12
    Points : 14
    Points
    14
    Par défaut Afficher des chars/int/double/.. sans String avec System.out.print
    Salut 2 questions de débutant:


    Pourquoi quand j'execute ça:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    public class MainClass {
     
    	public static void main(String[] args) {
    		String chaine = "une chaine"; 
    		char tabCar [];
    		tabCar = chaine.toCharArray(); 
    		System.out.print(tabCar[1]+tabCar[4]);
    	}
    la console affiche "209" alors que je m'attendais plutot a "nc" ?

    Ducoup pour afficher "nc" j'ai rajouté ""+ ce qui donne:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    System.out.print(""+tabCar[1]+tabCar[4]);
    ça marche impec mais c'est pas très propre. Y'a-t-il un moyen plus propre/conventionnel de faire ? Et dans tous les cas comment se fait-il que ce ""+ change toute la donne dans ce cas présent ?


    Autre question, en parcourant les tutos débutants et forums j'ai l'impression qu'on conseil souvent cette syntaxe:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    String chaine = "une chaine"; 
    char tabCar []; 
    tabCar = chaine.toCharArray();
    Et pourquoi pas tout simplement:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    String chaine = "une chaine"; 
    char tabCar [] = chaine.toCharArray();
    Y'a-t-il un interet a déclarer la variable avant de la modifier ? J'ai l'impression que ça rajoute une ligne pour rien et que ça ne rend pas le code plus compréhensible, au contraire même. Je fais erreur ?


    Merci d'avance pour votre aide

  2. #2
    Expert éminent sénior

    Avatar de fearyourself
    Homme Profil pro
    Ingénieur Informaticien Senior
    Inscrit en
    Décembre 2005
    Messages
    5 121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Ingénieur Informaticien Senior
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2005
    Messages : 5 121
    Points : 11 877
    Points
    11 877
    Par défaut
    Citation Envoyé par Seloa Voir le message
    Y'a-t-il un moyen plus propre/conventionnel de faire ? Et dans tous les cas comment se fait-il que ce ""+ change toute la donne dans ce cas présent ?
    Dans le cas sans le "", tu fais un ajout entre deux caractères. La norme Java suit un peu la norme C/C++ et donc convertit les éléments à des entiers et ensuite fait la somme. Donc pour avoir une chaine de caractères tu dois mettre un "". Si tu fais cela, alors tu obtiens une concaténation de string avec un caractère et donc tu as bien:

    "" + 'n' + 'c' -> "n" + 'c' -> "nc"

    Remarque que l'ordre est important:
    'n' + 'c' + "" -> 209 + "" -> "209"

    Y'a-t-il un interet a déclarer la variable avant de la modifier ? J'ai l'impression que ça rajoute une ligne pour rien et que ça ne rend pas le code plus compréhensible, au contraire même. Je fais erreur ?
    Question de préférence dans ce cas de ce que je vois.

  3. #3
    Expert éminent sénior
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Points : 23 190
    Points
    23 190
    Billets dans le blog
    1
    Par défaut
    Salut,

    Citation Envoyé par Seloa Voir le message
    ça marche impec mais c'est pas très propre. Y'a-t-il un moyen plus propre/conventionnel de faire ?
    Perso je ne vois pas vraiment le problème à cela... mais tu peux aussi faire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    System.out.print(tabCar[1]);
    System.out.print(tabCar[4]);
    Ou bien encore :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    System.out.printf("%c%c", tabCar[1], tabCar[4]);


    Citation Envoyé par Seloa Voir le message
    Et dans tous les cas comment se fait-il que ce ""+ change toute la donne dans ce cas présent ?
    C'est le problème des opérateurs : le résultat varie selon plusieurs critères.

    Avec tabCar[1]+tabCar[4] tu fais une somme entre la valeur numérique de deux caractères.
    'c' est représenté par la valeur 99, et 'n' par la valeur 110, et donc la somme des deux donne la valeur 209... et vu que les calculs sur des char sont "transformé" en int, cela revient à appeler la méthode print(int) ce qui produit l'affichage de la valeur numérique au lieu du caractère correspondant.


    Lorsque tu rajoutes ""+ tu ne fais plus une somme mais une concaténation, et chaque élément est donc ajouté à la chaine, ce qui produit le bon affichage...


    Bref : faut faire gaffe avec les opérateurs car le type et l'ordre des éléments peut produire des résultats différents.
    (et encore les problèmes sont limité car il n'y a pas de surcharges d'opérateurs dans le langage)



    Citation Envoyé par Seloa Voir le message
    Y'a-t-il un interet a déclarer la variable avant de la modifier ? J'ai l'impression que ça rajoute une ligne pour rien et que ça ne rend pas le code plus compréhensible, au contraire même. Je fais erreur ?
    Non tu as tout à fait raison : il n'y a aucun intérêt à déclarer la variable avant, et c'est plus verbeux et moins compréhensible.

    C'est une vieille habitude venant de certains langage où il était nécessaire de déclarer les variables au début d'une fonction avant de les utiliser, mais c'est totalement inutile en Java.
    Au contraire même il est même préférable de les déclarer au dernier moment...


    a++

Discussions similaires

  1. Réponses: 1
    Dernier message: 05/01/2008, 20h09
  2. problème d'affichage avec System.out.print
    Par newmar dans le forum Langage
    Réponses: 7
    Dernier message: 05/11/2007, 16h31
  3. Comment afficher des images en .eps sans passer par un .dvi
    Par Fox213 dans le forum Tableaux - Graphiques - Images - Flottants
    Réponses: 7
    Dernier message: 08/06/2007, 12h18
  4. Réponses: 5
    Dernier message: 06/02/2007, 13h46
  5. Réponses: 4
    Dernier message: 06/05/2005, 13h37

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