Réponses:
Vous pouvez utiliser l'opérateur de module, mais cela peut être lent. Si c'est un entier, vous pouvez faire:
if ( (x & 1) == 0 ) { even... } else { odd... }
Ceci est dû au fait que le bit faible sera toujours défini sur un nombre impair.
n % 2 == 0
signifie sémantiquement Divide by 2 and check if the remainder is 0
, ce qui est beaucoup plus clair que n & 1 == 0
ce que signifie Zero all the bits but leave the least significant bit unchanged and check if the result is 0
. L'amélioration de la clarté du premier vaut la surcharge (probablement inexistante). C'est ce que je voulais dire par optimisation prématurée. Si quelque chose est lent et que vous le profilez dans cette partie, le changement n % 2
en n & 1
est certainement justifié, mais le faire à l'avance ne l'est pas. En général, travailler avec les opérateurs de bits est une mauvaise idée avant le profilage.
n % 2 == 0
est plus propre que n & 1 == 0
.
Si le reste lorsque vous divisez par 2 est égal à 0, il est pair. %
est l'opérateur pour obtenir un reste.
(A % B)
lui-même peut être utilisé comme une expression, et c'est là que les choses deviennent amusantes.
Chaque nombre pair est divisible par deux, qu'il s'agisse d'un nombre décimal (mais le nombre décimal, s'il est présent, doit également être pair). Vous pouvez donc utiliser l' %
opérateur (modulo), qui divise le nombre à gauche par le nombre à droite et renvoie le reste ...
boolean isEven(double num) { return ((num % 2) == 0); }
je recommanderais
Java Puzzlers: Traps, Pitfalls, and Corner Cases Book par Joshua Bloch et Neal Gafter
Il y a une brève explication comment vérifier si le nombre est impair. Le premier essai est quelque chose de similaire à ce que @AseemYadav a essayé:
public static boolean isOdd(int i) {
return i % 2 == 1;
}
mais comme cela a été mentionné dans le livre:
lorsque l'opération de reste retourne un résultat différent de zéro, elle a le même signe que son opérande gauche
donc généralement, lorsque nous avons un nombre impair négatif, 1
nous obtiendrons -1
au lieu de cela i%2
. Nous pouvons donc utiliser la solution @Camilo ou simplement faire:
public static boolean isOdd(int i) {
return i % 2 != 0;
}
mais généralement la solution la plus rapide utilise l'opérateur AND comme @lucasmo écrire ci-dessus:
public static boolean isOdd(int i) {
return (i & 1) != 0;
}
@Edit Il vaut également la peine de souligner Math.floorMod(int x, int y);
ce qui traite bien le dividende négatif mais peut également revenir -1
si le diviseur est négatif
Fonctionne pour les nombres positifs ou négatifs
int start = -3;
int end = 6;
for (int val = start; val < end; val++)
{
// Condition to Check Even, Not condition (!) will give Odd number
if (val % 2 == 0)
{
System.out.println("Even" + val);
}
else
{
System.out.println("Odd" + val);
}
}
Le bit le moins significatif (le plus à droite) peut être utilisé pour vérifier si le nombre est pair ou impair. Pour tous les nombres impairs, le bit le plus à droite est toujours 1 dans la représentation binaire.
public static boolean checkOdd(long number){
return ((number & 0x1) == 1);
}
Ce programme suivant peut gérer de grands nombres (nombre de chiffres supérieur à 20)
package com.isEven.java;
import java.util.Scanner;
public class isEvenValuate{
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
String digit = in.next();
int y = Character.getNumericValue(digit.charAt(digit.length()-1));
boolean isEven = (y&1)==0;
if(isEven)
System.out.println("Even");
else
System.out.println("Odd");
}
}
Voici la sortie:
122873215981652362153862153872138721637272
Even
Vous pouvez utiliser l'opérateur de module, mais cela peut être lent. Un moyen plus efficace serait de vérifier le bit le plus bas car cela détermine si un nombre est pair ou impair. Le code ressemblerait à ceci:
public static void main(String[] args) {
System.out.println("Enter a number to check if it is even or odd");
System.out.println("Your number is " + (((new Scanner(System.in).nextInt() & 1) == 0) ? "even" : "odd"));
}
Vous pouvez faire comme ceci:
boolean is_odd(int n) {
return n % 2 == 1 || n % 2 == -1;
}
En effet, Java a dans son fonctionnement modulo le signe du dividende, le côté gauche: n. Donc, pour les dividendes négatifs et positifs, le modulo en a le signe.
Bien sûr, l'opération au niveau du bit est plus rapide et optimisée, il suffit de documenter la ligne de code avec deux ou trois mots courts, ce qui le fait pour la lisibilité.
Un autre moyen facile de le faire sans utiliser la condition if / else (fonctionne pour les nombres positifs et négatifs):
int n = 8;
List<String> messages = Arrays.asList("even", "odd");
System.out.println(messages.get(Math.abs(n%2)));
Pour un nombre impair, l'expression renverra '1' comme reste, donnant
messages.get (1) = 'impair' et donc imprimer 'impair'
sinon, 'even' est affiché lorsque l'expression donne le résultat '0'
int n = -3;
. Comme @Camilo mentionné ci-dessous - lorsque l'opération de reste retourne un résultat différent de zéro, elle a le même signe que son opérande de gauche si généreusement nous avons System.out.println(messages.get(-1));
ce qui nous donnejava.lang.ArrayIndexOutOfBoundsException
Si le module du nombre donné est égal à zéro, le nombre est pair ou impair. Voici la méthode qui fait cela:
public void evenOrOddNumber(int number) {
if (number % 2 == 0) {
System.out.println("Number is Even");
} else {
System.out.println("Number is odd");
}
}
package isevenodd;
import java.util.Scanner;
public class IsEvenOdd {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
System.out.println("Enter number: ");
int y = scan.nextInt();
boolean isEven = (y % 2 == 0) ? true : false;
String x = (isEven) ? "even" : "odd";
System.out.println("Your number is " + x);
}
}
Voici un exemple pour déterminer si un nombre donné est pair ou impair,
import java.util.Scanner;
public class EvenOdd
{
public static void main(String[] args)
{
int a;
System.out.println("Please enter a number to check even or odd:");
Scanner sc = new Scanner(System.in);
a = sc.nextInt();
if(a % 2 == 0)
{
System.out.println("Entered number is an even number");
}
else
{
System.out.println("Entered number is an odd number");
}
}
}
Eh bien, il existe de nombreuses façons de déterminer la même chose. Référez - vous à cette ressource pour plus d'exemples pour trouver que le nombre donné est pair ou impair.
Voici un exemple complet: -
import java.text.ParseException;
public class TestOddEvenExample {
public static void main(String args[]) throws ParseException {
int x = 24;
oddEvenChecker(x);
int xx = 3;
oddEvenChecker(xx);
}
static void oddEvenChecker(int x) {
if (x % 2 == 0)
System.out.println("You entered an even number." + x);
else
System.out.println("You entered an odd number." + x);
}
}