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 :

Question d'un tout nouveau!


Sujet :

avec Java

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2015
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 24
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Septembre 2015
    Messages : 3
    Points : 1
    Points
    1
    Par défaut Question d'un tout nouveau!
    Bonjour à tous et à toutes,
    C'est mon 1er message, désolé si je ne le poste pas au bon endroit ^^.
    Je me suis lancé récemment dans l'apprentissage du Java et là, c'est le drame !
    Je suis les cours de "Oppen classroom" (sous les précieux conseils d'un ami), hélas, sur ce forum personne ne répond à mon SOS c'est pourquoi je me permets de poster ici .
    Vous allez surement rire de mon problème mais, en tant que débutant, je ne comprends pas pourquoi cela ne fonctionne pas.
    Suivant les instructions du cours, j'arrive à une étape où je dois réaliser un convertisseur de degrés Farheneiht à Celsius et vice-versa.
    Hélas, après un travail acharné (ça fait bien au moins 2h) que j'essaye de comprendre le pourquoi du comment mais là je vais craquer ^^.

    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
    import java.util.Scanner;
     
    public class Autretest {
     
    	public static void main(String[] args) {       
    	do{
    		do{
     
    		System.out.print("Choisir: \n1-Celsius vers Farheneiht \n2-Fahrenheit vers Celsius\n");
    		Scanner sc=new Scanner(System.in);
    		int str=sc.nextInt();		
     
     
    		{{{
    		if(str==1)
     
    		{
    	    System.out.print("Chosir un nombre\n");
     
    		Scanner sc1=new Scanner(System.in);
    		int str1=sc1.nextInt();
    	    double résultat=((1.8)*str1)+32;
    	    System.out.print("Résulstat : "+résultat);
    	    Scanner scr=new Scanner(System.in);
    		int scz=scr.nextInt();
    		}System.out.print("Voulez vous recommencer?O pour oui");
    		while(str==1);
     
     
    		if(str==2)
    		{
    	    System.out.print("Chosir un nombre\n");
    		Scanner sc2=new Scanner(System.in);
    		double str2=sc2.nextDouble();
    		double résultat2=((str2-32)*5)/9;
    		System.out.print("Résulstat : "+résultat2);
    		System.out.print("Voulez vous recommencer?O pour oui");
    		Scanner scr=new Scanner(System.in);
    		int scz=scr.nextInt();
     
    		}while(str==1);
     
    		}}}}}}
    Voilà la bête!
    Le soucis c'est que, Eclipse m'annonce fièrement que, je dois remplir la condition du "why".
    Or, je l'ai bien indiquer!
    J'ai également jeté un coup d’œil au corrigé mais, celui-ci ne m'a pas aidé à comprendre mon erreur.
    Je vous remercie d'avoir pris le temps de lire.
    Bonne journée.

  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,

    Et bienvenu sur Developpez.

    En fait ton problème vient surtout du fait que tu t'embrouilles dans toutes ces accolades. Et Eclipse si perd aussi et ne donne donc pas forcément la bonne erreur, parce qu'il n'arrive pas vraiment à déterminer laquelle.

    Déjà, important, pense à indenter correctement, ce qui permet de voir mieux si on a des accolades en trop, ou en manque.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    if (var!=0) {
       System.out.println("truc");
       /* ... */
       if ( var>42 ) {
          System.out.println("machin");
       }
    }
    Avec l'alignement, on peut voir si on a oublié une accolade, ou si on en a mise une de trop.

    Pour un do/while, c'est comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    do {
       // code...
    } while ( condition );
    Dans ton code tu as des while( condition ); sans accolade devant ou derrière, ce qui n'est probablement pas bon (on peut faire ça en Java : ça fait une boucle qui ne fait rien, l'équivalent en fait de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    while ( condition ) {
       // bloc qui ne fait rien
    }
    .

    Par ailleurs, il est extrêment rare d'avoir 2 accolades ouvrantes successives dans une méthode (déjà 1 ce n'est pas courant sans quelque chose avant (un mot clef comme if/for/while..., ou un tableau (int[] par exemple), ou un signe d'affectation (=))), alors 3 !

    Ensuite, une autre remarque : il ne faut créer qu'une seule instance de Scanner pour tout ton programme. Evite, par ailleurs, les accents dans les noms de variables, tu éviteras certains problèmes.
    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
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2015
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 24
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Septembre 2015
    Messages : 3
    Points : 1
    Points
    1
    Par défaut
    Wahou et bien, merci beaucoup pour ta réponse claire et rapide !!
    ça fait vraiment plaisir de voir des gens guider les nouveaux venus avec autant de gentillesse !
    Je vais recommencer le programme à 0 et appliquer tout tes précieux conseils !
    Juste une petite question, qu'est-ce qu'une instance de scanner?C'est le "Scanner sc=new Scanner(System.in);"?Du coup, si je veux avoir accès à une donnée rentré par l'utilisateur du programme je n'aurai qu'à faire "Scanner sc2=new Scanner(System.in);"?
    Merci encore !

  4. #4
    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
    Citation Envoyé par Cityz Voir le message
    Juste une petite question, qu'est-ce qu'une instance de scanner?C'est le "Scanner sc=new Scanner(System.in);"?Du coup, si je veux avoir accès à une donnée rentré par l'utilisateur du programme je n'aurai qu'à faire "Scanner sc2=new Scanner(System.in);"?
    En Java, on a deux sortes de types : les types primitifs, comme int, double, boolean... et les classes, comme String, par exemple, ou les classes que tu définis toi-même (par public class Truc { ... }). Une classe définit des comportements (sous forme de méthode) et des attributs (des informations si tu préfères). Une instance c'est une version d'objet d'une classe. Prenons un exemple plus concrêt : on peut définir une classe d'habitation appelée Maison, qui a certaines caractérisques (mettons un nombre d'étages, un nombre de fenêtre, le type de toit, etc.). Mais dans une rue, une ville, le monde, il y a plein de maisons : chacune d'entre-elles est une instance de Maison.

    Dans l'expression Scanner sc = new Scanner(System.in), la classe c'est Scanner, et sc est une variable qui désigne une instance de cette classe, qu'on créé par le new Scanner(System.in). Si tu fais Scanner sc1 = new Scanner(System.in);, tu créés une autre variable sc1 qui désigne une autre instance de Scanner. Si tu fais Scanner sc2 = sc1, tu déclares une nouvelle variable appelée sc2 qui désigne la même instance de Scanner qui est désignée à ce moment là par la variable sc1.

    Le cas particulier de Scanner et la raison de ne pas faire plusieurs instances de cette classe est un peu plus compliqué à comprendre pour un débutant : en fait cette classe permet de lire de façon structurée des informations qui proviennent d'un flux (un truc qui produit en théorie des caractères) : dans ton cas, le flux c'est System.in, l'entrée standard, qui est branchée par défaut sur le clavier.

    Le problème est qu'il n'y a qu'un seul flux System.in : créer plusieurs instances de Scanner veut dire que tu créés plusieurs instances d'une classe qui va consommer des caractères produits par le même flux, et donc tu risques des problèmes du type que une instance de scanner peut commencer à lire ce que l'autre devrait lire. Pour éviter ces problèmes, une seule instance de Scanner garantit qu'elle est la seule à lire les caractères dans le flux, et donc il n'y a pas de risque qu'une autre lui pique des caractères à lire.
    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.

  5. #5
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2015
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 24
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Septembre 2015
    Messages : 3
    Points : 1
    Points
    1
    Par défaut
    Merci pour ta réponse, je l'ai relis au moins une bonne vingtaine de fois .
    Donc, si j'ai bien compris, la classe Scanner marche dans tout le code, même si on mets des accolades, Scanner sera fonctionnel pour tout le reste du code?
    Du coup, vu que j'aurai déjà créer une instance de scanner (sc), j'aurai juste à l'utiliser dans tout le code?
    Désolé si je n'ai pas bien compris (voir pas du tout, ça fait beaucoup d'informations d'un coup).
    Je te remercie pour ta réponse et ta patience !

  6. #6
    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
    Oui, c'est ce qu'on appelle la portée d'une variable : les endroits où elle peut être utilisée (lue ou modifiée) par rapport à l'endroit où elle est déclarée.

    Je ne te fais pas un cours complet sur la portée (on dit aussi visibilité) des variables : tu verras ça de ton côté. Pour le cas qui nous occupe, une variable déclarée dans un bloc est accessible dans tous les blocs de la même méthode situés à l'intérieur du bloc qui l'a déclarée et après la déclaration, forcément.

    Donc si tu déclares ta variable de type Scanner au début de la méthode main, tu pourras l'utiliser partout dans cette méthode.
    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.

Discussions similaires

  1. Tout nouveau et tout perdu!
    Par EncycloCsP dans le forum Mode d'emploi & aide aux nouveaux
    Réponses: 4
    Dernier message: 07/05/2008, 15h20
  2. [Débutant] Tout nouveau sur GUI
    Par fanche64 dans le forum Interfaces Graphiques
    Réponses: 3
    Dernier message: 14/01/2008, 11h35
  3. Réponses: 2
    Dernier message: 25/05/2006, 19h47
  4. Tout nouveau, j'arrive avec une question ^^
    Par petitedouceur dans le forum C++
    Réponses: 25
    Dernier message: 06/11/2005, 00h48
  5. Impossible de deboquer tout nouveau contact sur msn
    Par maadadi dans le forum Messagerie instantanée
    Réponses: 22
    Dernier message: 28/08/2005, 18h25

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