Ici, vous allez:
public class MathUtil
{
public int product(int n)
{
if (n < 3) return n; // no need to do any stuff if n is less then 3,
// since the result will be n...
int result = 1; // result must be here
for (int i = 2; i <= n; i++) // start from 2
{
result *= i; // don't need n here
// and you can make it shorter with *=
}
return result;
}
}
Note pour result
; Disons que vous avez appelé cette méthode avec n = 3
. result
sera 6
, mais il sera défini comme si sa variable de classe, donc lorsque vous appelez cette méthode avec n = 4
après que pour la même instance de cette classe, 146
sera retournée et result
sera définie avec elle. C'est pourquoi vous devez faire en sorte que les méthodes soient variables, donc 1
chaque fois qu'une méthode est appelée, quelle que soit l'instance de cette classe. De plus, si vous en faites une variable de classe et que vous la définissez à 1
chaque fois que vous appelez cette méthode, elle peut toujours générer des problèmes de synchronisation si deux threads appellent cette méthode sur la même instance de cette classe. si vous ne planifiez pas une telle chose, c'est une bonne pratique).
Notez également que si le résultat est un int vous allez déborder pour tout n> 12, et si c'est long vous déborderez si n> 20 – FredK
@FredK bon point, dûment noté, merci! – janos