Partage
  • Partager sur Facebook
  • Partager sur Twitter

Java, suite numérique

Vérification ?

Sujet résolu
    12 novembre 2017 à 13:58:51

    Bonjour, j'aimerais savoir si le code est optimisé ou s'il peut être meilleur (il fonctionne pour l'instant).

    Le but du code est de calculer la suite numérique au rang n

    u(n+1) = 4*u(n)*(1-u(n))

    avec u(0) = 0.1

    Voici le code :

    package _Algo3;
    
    import java.util.Scanner;
    
    public class AlgoSuites3 {
    
    
    	public static void main(String[] args) {	
    			// TODO Auto-generated method stub
    		
    		Scanner sc = new Scanner(System.in);
    		System.out.println("Saisir la valeur de U0");
    		
    		float floatU = Float.parseFloat(sc.nextLine()); /*On définit la variable U0 
    		que l'utilisateur rentre*/
    		System.out.println("U(n+1)=4x(Un)(1-Un)"); 
    		int intN =0;
    		while (intN < 1)
    		{
    			System.out.println("Veuillez Saisir une valeur Supérieure ou égale à 1");
    			intN = Integer.parseInt(sc.nextLine());
    		} //Ici, on demande une valeur intN >= 1
    		for(int i = 0 ; i<intN ; i++){
    			floatU = 4*floatU*(1-floatU);
    		} //Cette boucle effectue le calcul appliqué avec u(n+1) jusqu'au rang intN
    		System.out.println ("U("+ intN + ") =" + floatU); //On affiche le résultat
    	}
    
    }

    -
    Edité par ArthurDucept1 28 janvier 2018 à 22:46:34

    • Partager sur Facebook
    • Partager sur Twitter
      12 novembre 2017 à 17:53:00

      Bonjour,

      Il n'y a pas grand chose à optimiser ici. Ton code me semble propre. Le seul détail que j'aurais à reprocher pour la lisibilité est l'espacement autour des opérateurs.

      x + y
      // plus lisible que
      x+y
      
      un = 4.0 * un * (1.0 - un);



      • Partager sur Facebook
      • Partager sur Twitter
        12 novembre 2017 à 18:28:38

        Merci,

        Je n'étais pas sûr que cela fonctionne avec des espaces ici, nous débutons le code et nous n'avons encore que peu de notions là dessus.

        • Partager sur Facebook
        • Partager sur Twitter
          13 novembre 2017 à 18:09:22

          Tu peux toujours optimiser, tout dépend de ce que tu veux faire. Pour le moment ton programme trop simple pour avoir besoin d'être optimisé. La seule chose qui peut éventuellement être intéressante à optimiser pour le moment c'est d'utiliser un do-while au lieu d'un while pour économiser 1 test conditionnel inutile, le premier 0 < 1 qui est toujours vrai.

          int n = 0;
          do {
              // code ...
          } while (n < 1);



          • Partager sur Facebook
          • Partager sur Twitter
            14 novembre 2017 à 12:28:15

            En amélioration tu peux ajouter la vérification des entrées utilisateur, gérer le cas si une lettre est entrée, etc..

            Sinon en optimisation j'ai rien à dire.

            • Partager sur Facebook
            • Partager sur Twitter
              14 novembre 2017 à 15:55:27

              Evury a écrit:

              En amélioration tu peux ajouter la vérification des entrées utilisateur, gérer le cas si une lettre est entrée, etc..

              Sinon en optimisation j'ai rien à dire.


              Je ne connais pas la commande pour gérer le cas d'une lettre, est-ce possible de la donner stp ?
              • Partager sur Facebook
              • Partager sur Twitter
                14 novembre 2017 à 16:17:43

                Il s'agit de faire un try catch

                try //essaye d'executer ce bloc
                {
                  float floatU = Float.parseFloat(sc.nextLine());
                }
                catch (Exception e) //si la conversion n'a pas fonctionné (ex : lettres, mauvais format, ...)
                {
                  //code à exécuter en cas d'échec
                  //ex : redemande une entrée ou reste dans une boucle
                }



                • Partager sur Facebook
                • Partager sur Twitter
                  14 novembre 2017 à 23:40:15

                  Evury a écrit:

                  Il s'agit de faire un try catch


                  Merci, je vais essayer.

                  --->

                  J'ai modifié le code, j'ai l'impression que ça fonctionne correctement

                  package _Algo3;
                   
                  import java.util.Scanner;
                   
                  public class AlgoSuites3 {
                  
                  	   
                  
                      public static void main(String[] args) {
                          // TODO Auto-generated method stub
                  
                          Scanner sc = new Scanner(System.in);
                          
                          float floatU = -1;
                          while(floatU < 0){
                          try{
                              System.out.println("Saisir la valeur de U0");
                              floatU = Float.parseFloat(sc.nextLine()); /*
                               * On définit la variable U0 que l'utilisateur rentre
                               */
                              
                          } catch (NumberFormatException nfe){
                          	System.out.println("Veuillez saisir une valeur numérique");
                                      }
                      }
                         
                          System.out.println("U(n+1)=4x(Un)(1-Un)");
                          System.out.println("");
                          int intN = 0;
                  
                          while (intN < 1) {
                              try { //try catch pour gérer les erreurs et exceptions
                                  System.out.println("Veuillez Saisir une valeur Supérieure ou égale à 1");
                                  intN = Integer.parseInt(sc.nextLine());
                              } catch (NumberFormatException nfe) {
                                  System.out.println("Veuillez Saisir une valeur numérique");
                              }
                          } // Ici, on demande une valeur intN >= 1
                          for (int i = 0; i < intN; i++) {
                              floatU = 4 * floatU * (1 - floatU);
                          } // Cette boucle effectue le calcul appliqué avec u(n+1) jusqu'au rang intN
                          System.out.println("U(" + intN + ") = " + floatU); // On affiche le résultat
                      }
                  
                  }



                  -
                  Edité par ArthurDucept1 15 novembre 2017 à 14:38:45

                  • Partager sur Facebook
                  • Partager sur Twitter

                  Java, suite numérique

                  × 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