244 votes

Quelle est la syntaxe pour le mod en java

Comme un exemple de pseudo-code:

if ( (a mod 2) == 0)

{
    isEven = true
}

else

{
    isEven = false
}

376voto

Cody Hatch Points 4135

L'opérateur de modulo est - %

Pour utiliser votre exemple:

if ( (a % 2) == 0)
{
    isEven = true
}
else
{
    isEven = false
}

111voto

martinatime Points 1863

Voici la représentation de votre pseudo-code en un minimum de code Java;

boolean isEven = (a % 2 == 0);

Je vais maintenant à le décomposer en ses éléments. Le module opérateur en Java est le caractère de pourcentage (%). Donc en prenant un int % int renvoie un autre int. Le double égal (==) opérateur est utilisé pour comparer les valeurs, comme une paire d'entiers et retourne un booléen. C'est ensuite affecté à la variable booléenne 'isEven'. Basé sur la priorité de l'opérateur, le module sera évalué avant la comparaison.

96voto

Rob Rolnick Points 4075

Depuis tout le monde a déjà donné la réponse, je vais ajouter un peu de contexte. % le "module" est l'opérateur effectuant le reste de l'opération. La différence entre le mod et le sommeil paradoxal est subtile, mais importante.

(-1 mod 2) normalement donner 1. De plus, compte tenu notamment de deux entiers X et Y, l'opération (X mod Y) tend à retourner une valeur dans l'intervalle [0, Y). Autrement dit, le module de X et Y est toujours supérieur ou égal à zéro et inférieur à Y.

Faire la même opération avec le "%" ou rem opérateur maintient le signe de la valeur de X. Si X est négatif, vous obtenez un résultat dans l'intervalle (-A, 0]. Si X est positif, vous obtenez un résultat dans l'intervalle [0, Y).

Souvent, cette subtile distinction n'a pas d'importance. Pour en revenir à votre code en question, bien que, il ya plusieurs façons de résoudre pour la "régularité".

La première approche est bonne pour les débutants, car il est particulièrement détaillé.

// Option 1: Clearest way for beginners
boolean isEven;
if ((a % 2) == 0)
{
  isEven = true
}
else
{
  isEven = false
}

La deuxième approche permet de mieux avantage de la langue, et conduit à la plus succincte code. (N'oubliez pas que l'opérateur == renvoie un booléen.)

// Option 2: Clear, succinct, code
boolean isEven = ((a % 2) == 0);

La troisième approche est ici par souci d'exhaustivité, et utilise le ternaire de l'opérateur. Bien que l'opérateur ternaire est souvent très utile, dans ce cas, je considère que la deuxième approche supérieure.

// Option 3: Ternary operator
boolean isEven = ((a % 2) == 0) ? true : false;

La quatrième et dernière approche est d'utiliser la connaissance de la représentation binaire des entiers. Si le bit le moins significatif est 0, alors le nombre est pair. Cela peut être vérifié à l'aide de la bit-à-bit-opérateur et (&). Bien que cette approche est la plus rapide (vous en faisant de simples bits de masquage au lieu de la division), il est peut-être un peu avancé/compliqué pour un débutant.

// Option 4: Bitwise-and
boolean isEven = ((a & 1) == 0);

Ici j'ai utilisé de l'or au niveau du bit et de l'opérateur, et représentée dans la brièveté de la forme présentée dans l'option 2. La réécriture dans l'Option 1 du formulaire (et sinon, l'Option 3) est laissé comme exercice au lecteur. ;)

Espérons que cela aide.

35voto

Zom-B Points 171

Pour obtenir de Java % (REM) travailler comme MOD pour X négatif et positif, les valeurs de Y, vous pouvez utiliser cette méthode:

private int mod(int x, int y)
{
    int result = x % y;
    if (result < 0)
    {
        result += y;
    }
    return result;
}

ou avec l'opérateur ternaire (le plus court, mais pas possible ou moins efficace dans certaines situations):

private int mod(int x, int y)
{
    int result = x % y;
    return result < 0? result + y : result;
}

11voto

michael Points 81

Le code s'exécute beaucoup plus rapidement sans l'aide de modulo:

public boolean isEven(int a){
    return ( (a & 1) == 0 );
}

public boolean isOdd(int a){
    return ( (a & 1) == 1 );
}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X