Partage
  • Partager sur Facebook
  • Partager sur Twitter

[java]racinen caree

avec des float...

    27 septembre 2008 à 19:00:44

    Bonjour,
    j'ai chercher à faire une fonction realisant le calcul d'une racinne caree d'une variable ...
    J'ai donc trouvé avec Math.sqrt(Valeur), on pouvais aisaiment realiser ceci...
    mais lorsque j'execute le programme, il me repond une erreur java deguelasse.. ^^
    voici monn code :

    float tri1 = sc.nextInt();
    float tri2 = sc.nextInt();
    float tri3 ;
    tri3 = Math.sqrt((tri1*tri1)+(tri2*tri2));
    


    et eclipse me repond ceci :
    Entrez les 2 cotes adjacents à l'angle droit, appuyez sur entree entre les deux
    1.25
    Exception in thread "main" java.util.InputMismatchException
    at java.util.Scanner.throwFor(Scanner.java:840)
    at java.util.Scanner.next(Scanner.java:1461)
    at java.util.Scanner.nextInt(Scanner.java:2091)
    at java.util.Scanner.nextInt(Scanner.java:2050)
    at principale.main(principale.java:13)

    j'en ai deduit qu'il ne fallait pas mettre de variable type float , mais sinon, je ne pourrai pas calculer la racinne carree d'un combre decimale!
    merci de me donner reponse a mon probleme !
    • Partager sur Facebook
    • Partager sur Twitter
      27 septembre 2008 à 19:38:27

      Tu récupères des entiers mais tu travailleras avec es floats ! Les cast de variables : ça sert à ça ! !

      int tri1 = sc.nextInt();
      int tri2 = sc.nextInt();
      float tri3 ;
      tri3 = Math.sqrt((Float.parseFloat(tri1*tri1))+(Float.parseFloat(tri2*tri2)));
      


      Ou un truc du genre...
      • Partager sur Facebook
      • Partager sur Twitter
        27 septembre 2008 à 19:47:19

        Ah ouais dis donc, ça doit être super efficace de faire int -> string -> float. Je commence à comprendre d'où vient le mythe de la lenteur de Java : des mauvais codeurs. Et dire que ça écrit des tutos officiels...

        Sinon barback, sc.nextFloat() pour lire un flottant. La méthode de cysboy, en plus d'être atroce, est fausse.
        • Partager sur Facebook
        • Partager sur Twitter
          27 septembre 2008 à 19:55:48

          my god. Ce type fait un tuto officiel ? je m'attendais à plus de rigueur dans le choix des officiels.
          • Partager sur Facebook
          • Partager sur Twitter
            27 septembre 2008 à 20:03:02

            Citation : Lord Katen

            my god. Ce type fait un tuto officiel ? je m'attendais à plus de rigueur dans le choix des officiels.


            Boarf, c'est pas comme si on trouvait des codes comme ça dans ses tutos :
            /**
               * Définit la catégorie de la ville
               */
              private void setCategorie() {
             
                  if (this.nbreHabitant < 10000000) {
             
                      if (this.nbreHabitant < 5000000) {
             
                          if (this.nbreHabitant < 1000000) {
             
                              if (this.nbreHabitant < 500000) {
             
                                  if (this.nbreHabitant < 100000) {
             
                                      if (this.nbreHabitant < 10000) {
             
                                          if (this.nbreHabitant < 1000) {
             
                                              if (this.nbreHabitant > 0)
                                                  this.categorie = 'A';
                                              else
                                                  this.categorie = '?';
                                          } else
                                              this.categorie = 'B';
                                      } else
                                          this.categorie = 'C';
                                  } else
                                      this.categorie = 'D';
                              } else
                                  this.categorie = 'E';
                          } else
                              this.categorie = 'F';
                      } else
                          this.categorie = 'G';
                  } else
                      this.categorie = 'H';
             
              }
            
            • Partager sur Facebook
            • Partager sur Twitter
            Anonyme
              27 septembre 2008 à 20:37:39

              wgmpgp> ce bout de code n'a rien à voir avec le topic!, sinon ..les commentaires c'est par là
              • Partager sur Facebook
              • Partager sur Twitter
                27 septembre 2008 à 20:47:37

                Je plussoie fortement, ça rime à quoi ce règlement de compte gratuit sur le forum ?
                • Partager sur Facebook
                • Partager sur Twitter
                  27 septembre 2008 à 21:07:42

                  Citation : Octal

                  Je plussoie fortement, ça rime à quoi ce règlement de compte gratuit sur le forum ?


                  C'est simple : est-ce que tu penses que quelqu'un connaissant réellement le Java se tromperait sur un truc aussi basique qu'un cast ? Pour moi, quelqu'un qui raconte des anneries de ce genre en raconte potentiellement également dans ses tutoriels. Je l'ai fait remarquer dans mon message qui apporte lui la bonne réponse au truc (tiens, tavu, j'suis pas aussi inutile que toi au moins), Lord Katen a enchainé là dessus, et le code boomerang c'est l'idée de Zopieux (bon ok, ça justifie rien :-° ).
                  • Partager sur Facebook
                  • Partager sur Twitter
                    27 septembre 2008 à 22:12:41

                    BOn ben faut plus que j'aide avec un coup dans le nez moi...
                    Déolé ! :)
                    ils ont raison, j'ia zappé le nextFlaot()...
                    j'vais m couché...
                    • Partager sur Facebook
                    • Partager sur Twitter
                      3 octobre 2008 à 22:17:46

                      Re!
                      ^^'
                      désolé, masi en fait, cela ne fonctionne pas...
                      en fait, le probleme vien du fait que lorsque je marque ceci :
                      k = Math.sqrt((i*i)-(j*j));
                      

                      l'ordinateur de repond qu'il y a un probleme si je declare
                      float k = 0;
                      

                      c'est a dire ceci :
                      "Type mismatch: cannot convert from double to float"
                      et si je met
                      double k = 0;
                      
                      , je ne peux pas entrer de nombre a virgule lorsque j'execute mon programme!
                      sinon, il me repond ceci :
                      Exception in thread "main" java.util.InputMismatchException
                      at java.util.Scanner.throwFor(Scanner.java:840)
                      at java.util.Scanner.next(Scanner.java:1461)
                      at java.util.Scanner.nextFloat(Scanner.java:2319)
                      at principale.main(principale.java:16)
                      Avez vous compris mon probleme?
                      ^^' dsl, mais je ne suis peut etre pas tres clair.
                      Posez moi des question au pire, mai aidez moi svp! ^^

                      ps : si cela peut vous aider, voici le code source de mon programme :

                      import java.util.Scanner;
                      
                      
                      public class principale {
                      	public static void main (String[] args){
                      		Scanner sc = new Scanner(System.in);
                      		System.out.println("que voulez vous faire?? Laisser l'ordinateur calculer : ");
                      		System.out.println(" - un cote d'un triangle rectangle par le theoreme de pythagoe?? yes/no");
                      		String yesNoP = sc.next();	
                      		if( u(yesNoP)==false){
                      			System.out.println("Marre de resolver le theoreme de Pythagore?");
                      			System.out.println("L'inconnu est elle l'hypothenuse?  yes/no");
                      			String yesNo = sc.next();
                      			if(yesNo.equals("y") || yesNo.equals("yes")){
                      				System.out.println("Entrez les 2 cotes adjacents à l'angle droit, appuyez sur entree entre les deux");
                      				float tri1 = sc.nextFloat();
                      				float tri2 = sc.nextFloat();
                      				System.out.println("la longueur de l'hypotenuse est de " +pytHyp(tri1,tri2));
                      			}
                      			if(yesNo.equals("n") || yesNo.equals("no")){
                      				System.out.println("Entrez un cote adjacents à l'angle droit, puis l'hypothenuse, appuyez sur entree entre les deux");
                      				float tri1 = sc.nextInt();
                      				float tri2 = sc.nextInt();
                      				System.out.println("la longueur du cote manquant est de " +pytnonHyp(tri1,tri2));
                      			}
                      		}
                      }
                      	}
                      	public static double pytHyp (float i, float j){
                      		float k = 0;
                      		k = Math.sqrt((i*i)+(j*j));  -----------> c'est ici qu'il m'affiche le mesage d'ereur lorsque j'atribue un type float a k.
                      		return k;
                      	}
                      	public static double pytnonHyp (float i, float j){
                      		float k = 0;
                      		k = Math.sqrt((i*i)-(j*j));
                      		return k;
                      	}
                      	public static boolean u (String i){
                      		boolean k = true;
                      		if (i.equals ("y") || i.equals ("yes")){
                      			k=false;
                      		}
                      		return k;
                      	}
                      }
                      
                      • Partager sur Facebook
                      • Partager sur Twitter
                      Anonyme
                        4 octobre 2008 à 2:54:30

                        Salut
                        d'abord la méthode Math.sqrt() prend un double en paramètre et renvoie un double,il est donc de préférence de choisir un type double pour tes variables (trie1, trie2, ta fonction..)


                        Citation : barback

                        je ne peux pas entrer de nombre a virgule lorsque j'execute mon programme!


                        j'ai rencontré un cas comme ça alors tiens qu'est ce que j'ai fait .. :p : tu dois faire:
                        enlever cette instanciation
                        Scanner sc = new Scanner(System.in);
                        

                        aussi tous ce qui concerne la variable sc :-° ...et remplacer la (l'instanciation de Scanner)par ça:

                        BufferedReader sc= new BufferedReader(new InputStreamReader(System.in));
                        

                        finalement pour que tu puisse enter tes nombres doubles (à virgules ou pas ;) )
                        f = Double.parseDouble(sc.readLine());
                        

                        bon pour les autres types tu changes seulement les mots en rouge selon la classe de type souhaité
                        f = Double.parseDouble(sc.readLine());

                        j'ai fait ça parce que je ne connais pas beaucoup de choses sur la classe Scanner .
                        i hope that'll help ^^

                        hmm..jolie signature
                        • Partager sur Facebook
                        • Partager sur Twitter
                          4 octobre 2008 à 7:53:46

                          Citation : barbak

                          je ne peux pas entrer de nombre a virgule lorsque j'execute mon programme!



                          Au lieu de taper 12.3 tu tape 12,3 !


                          Bonne suite !
                          • Partager sur Facebook
                          • Partager sur Twitter
                          Anonyme
                            4 octobre 2008 à 14:49:57

                            tu es sûr?! o_O malheureusement je ne peux pas tester ce truc maintenant :( ..
                            sinon c'est une bonne solution :-°
                            • Partager sur Facebook
                            • Partager sur Twitter
                              4 octobre 2008 à 16:46:59

                              Citation : rogina

                              sinon c'est une bonne solution



                              Donc il faut faire un test ;)

                              Généralement ta méthode est bonne et pratique, mais il y a

                              toujours le beau et le plus beau :)

                              Bonne suite :)
                              • Partager sur Facebook
                              • Partager sur Twitter
                                4 octobre 2008 à 20:05:46

                                Une question : pourquoi avoir des méthodes qui renvoie des double alors qu'elles prennent des float en paramètre o_O ?? je ne vois pas trop l'intérêt. sinon pour initialiser tes float tu peux faire float f = 0.0f; . Je pense que c'est une solution encore meilleurs et... plus propre, il me semble que quand on écrit float k = 0 un cast est effectué vers un int, donc pas étonnant que ça puisse merder..
                                • Partager sur Facebook
                                • Partager sur Twitter
                                Le développement de jeu vidéo vous intéresse ? Parlons en !
                                Anonyme
                                  5 octobre 2008 à 19:13:53

                                  avec le BufferedReader ?

                                  sinon avec le nextFloat il faut apres faire un nextLine pour supprimer le \n
                                  c'est pour cela que ca foirer
                                  • Partager sur Facebook
                                  • Partager sur Twitter
                                    5 octobre 2008 à 19:47:46

                                    Citation : daedric

                                    sinon avec le nextFloat il faut apres faire un nextLine pour supprimer le \n
                                    c'est pour cela que ca foirer



                                    Non cette méthode ne marche pas Désolé
                                    • Partager sur Facebook
                                    • Partager sur Twitter
                                      7 octobre 2008 à 23:47:15

                                      Merci de vos reponses!!
                                      et deole de n'y repondre que maintenant, j'au eu un grooooooooooooos bug internet avec les innondations... mais bon! ^^
                                      Donc avec 12,5 au lieu de 15.5, sa marche!
                                      :lol:^^
                                      sinon, j'ai pas compris la methode de rogina... dommage, sa avait l'air de marcher!
                                      j'ai bien fait les orgenize immport etc... masi pares eclipse gueule de partout a chaque
                                      int f = sc.nextFloat();
                                      
                                      ...
                                      que dois je mettre a la place? pourquoi? :)
                                      merci de m'avoir repondu en tout cas!! ;)^^
                                      a bientot... je reprend java serieux, promis! :-°
                                      • Partager sur Facebook
                                      • Partager sur Twitter
                                      Anonyme
                                        8 octobre 2008 à 15:16:01

                                        Salut, bon peut être que je t'avais mal expliqué :p ..,ce que tu dois faire dans ton programme c'est au lieu d'utiliser la classe Scanner pour lire tes variables doubles.. (je ne parle pas des strings huh!)tu instancies un object 'BufferedReader': read par exemple et bien sûr tu devras aussi entourer les instructions qui vont récupérer tes variables avec des blocs catch ..try, comme ça:
                                        try {
                                        			tri1 = Double.parseDouble(read.readLine());;
                                        			tri2 = Double.parseDouble(read.readLine());
                                        			System.out.println("la longueur de l'hypotenuse est de " +pytHyp(tri1,tri2));
                                        			} catch (NumberFormatException e) {
                                        			// TODO Auto-generated catch block
                                        			e.printStackTrace();
                                        			} catch (IOException e) {
                                        			// TODO Auto-generated catch block
                                        			e.printStackTrace();
                                            }
                                        

                                        tu vas avoir des petits carrés rouges à côté des catch et de l'instantiation de BufferedReader; tu fais comme l'a indiqué cysboy dans son magnifique tutoriel java ou tu fais les imports manuellement (les classes sont: BufferedReader,IOException,InputStreamReader).


                                        • Partager sur Facebook
                                        • Partager sur Twitter
                                          17 octobre 2008 à 22:17:29

                                          okayyyyyy!!! merci ^^
                                          sa marche trop cool
                                          • Partager sur Facebook
                                          • Partager sur Twitter

                                          [java]racinen caree

                                          × 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