web-dev-qa-db-fra.com

Vérifier si un nombre entré est impair

`Je ne sais pas quel code insérer ou même où, mais je voudrais vérifier que le nombre que j'entre est un nombre impair.

import Java.io.*;
import javax.swing.JOptionPane;

public class Diamond {
    public static void main(String [] args) throws IOException {

        BufferedReader stdin = new BufferedReader (new InputStreamReader (System.in));
        String input; 
        int num;
        System.out.println("input number: ");
        input = stdin.readLine ();
        num = Integer.parseInt(input);

        if (num % 2 ==1){
            int d = num;
            int e = 0;
            for (int a = 0; a <= num; a++) {
                for (int c = d; c>= 1; c-- )
                    System.out.print(" ");
                d-=1;
                for (int b = 1; b <= a; b++)
                    System.out.print ("* ");
                System.out.println();
            }

            num-=1;
            for (int a = 0; a<=num; a++) {
                for (int b = num; b > a; b--)
                    System.out.print (" *"); 
                System.out.println(); 
                for (int c = 0; c <= e; c++)
                    System.out.print(" ");
                 e+=1;
            }
        } else {
            System.out.println("Please enter an odd number!");
        }
    }
}
13
Mike

Utilisez arithmétique modulaire :

if (number % 2 == 0) {
  // even
} else {
  // odd
}

Mettre à jour:

Vous pouvez tester ce code ici:

Attention, vérifier la régularité avec number % 2 == 1 échouera.

Pour vérifier si un nombre est impair, vous pouvez utiliser (number & 1) != 0.

52
miku

num% 2 == 1 renvoie des résultats incorrects sur un nombre impair négatif, le reste de la division avec 2 ne sera pas 1. Cela peut être résolu comme suit:

public boolean isOddNumber(int num) {
    return (num & 1) != 0;
}
10
Chaker

Vous ne pouvez PAS avoir readLine à l'intérieur de ce if. d'abord vous devez obtenir la valeur et ensuite vous pouvez utiliser votre if.

Ça va comme ça:

BufferedReader stdin = new BufferedReader (new InputStreamReader (System.in));

String input; 
int num;

System.out.println("input number: ");

  input = stdin.readLine();
  num = Integer.parseInt(input);

if (num % 2 == 1) {
// odd
} else {
  System.out.println("Please enter an odd number!");
}

Enfin - n'utilisez PAS de valeurs nommées "a", "e" ou "d" - c'est très déroutant. Nommez simplement les variables avec des noms qui permettent au lecteur de savoir/deviner leur rôle dans votre code. Je n'ai aucune idée de la signification de votre "a" ou b, c, d etc. Par exemple, votre num devrait être nommé enteredValue pour clarifier votre code.

6
dantuch

La réponse de Chaker à propos de l'entier négatif est confirmée. Dans mon JavaSE-1.8

System.out.println( "result =" + ( -3 % 2 == 1) );


il montre result = false au lieu de true

2
jay wsxrfv

Fonctionnement au niveau du bit (manipulation des bits) en Java

if ((num & 1) != 0) //odd
{
     //do something here
} else { //even
    //do something here
}

fonctionne en regardant disons 100 (numéro 4) vs 001, en faisant l'opération ET sur chaque bit et en retournant 0 et 1. Si le bit de fin est un 0, comme 4, il sera toujours pair. Si le bit de fin est 1, il va être étrange.

1
John61590