Bonjour,
Je me suis mis à Java depuis une semaine en regardant la série de vidéos Java pour débutant des teachers du net, à l'avant dernière vidéo ils proposent un petit challenge https://www.youtube.com/watch?v=CQMN...urH95&index=79; il s'agit de faire un programme qui donne les facteurs premiers d'un nombre.
Tout d'abord j'aimerais avoir des avis de personnes qui ont l'habitude d'utiliser le Java, j'ai résolut le challenge mais en mettant l'incrémentation de mes boucles for non pas dans les parenthèses à coté mais dans le else, je voulait savoir si ça se fait ou si c'est "moche" ?
voila mon code :
Code:
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 import java.util.ArrayList; import java.util.Scanner; public class FacteursPremiers { public static void main(String[] args) { Scanner clavier = new Scanner(System.in); ArrayList<Integer> result = new ArrayList<>(); int nbre; System.out.print("Entrez un nombre : "); nbre = clavier.nextInt(); if (nombrePremier(nbre) == true) { result.add(nbre); } else { for (int i = 2; i < nbre;) { if (nbre % i == 0) { result.add(i); nbre = nbre / i; if (nombrePremier(nbre) == true) { result.add(nbre); } } else { i++; } } } clavier.close(); System.out.println(result); } static boolean nombrePremier(int n) { int mod; for (int i = 2; i < n;) { mod = n % i; if (mod == 0) { return false; } else { i++; } } return true; } }
Après dans les commentaires de la vidéo j'ai trouvé une autre solution, je l'ai testé, elle marche mais je comprend pas comment, si par exemple on entre un nombre premier (5 par exemple) comme valeur, il affiche bien 5 alors que les seul endroit ou il ajoute des valeurs à son ArrayList facteurPremier c'est dans le premier if de la boucle for et un 5 ne rempli même pas les conditions de ce if.
Voila le code :
Vous avez l'explication ?Code:
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 import java.util.ArrayList; import java.util.Scanner; public class Challenge { static Scanner clavier = new Scanner(System.in); static ArrayList<Integer> FacteurPremier = new ArrayList<Integer>(); static boolean BreakMethod = false; public static void main(String[] args) { System.out.println("Entrer un nombre : "); Integer nbre = clavier.nextInt(); CalculFacteurPremier(nbre); System.out.println(FacteurPremier); } static void CalculFacteurPremier(int nbre) { int i; if (BreakMethod) { return; } if (nbre <= 1) { BreakMethod = true; return; } for (i = 2; i <= nbre; i++) { if ((nbre % i) == 0) { FacteurPremier.add(i); if ((i * i) == nbre) { FacteurPremier.add(i); BreakMethod = true; } else { CalculFacteurPremier((nbre / i)); } if (BreakMethod) { return; } } } } }