2011-03-11 20 views
12

`No estoy seguro de qué código insertar o incluso dónde, pero me gustaría comprobar que el número que ingresé es un número impar.Verificar si un número ingresado es impar

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!"); 
     } 
    } 
} 
+1

Mike, que no ponen código entre '[code]' y '[/ code]' aquí. Simplemente lo seleccioné y hice clic en el icono del código; Otra forma al usar bloques de código es aplicar sangría a cuatro espacios. –

+0

Lo siento, pero no puedo conseguir que el código se muestre correctamente en la publicación. – Mike

+0

Agregué la instrucción if-else, pero no creo que sea correcta. – Mike

Respuesta

50

Uso modular arithmetic:

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

Actualización:

Puede probar este código aquí:

Tenga en cuenta que la comprobación de la uniformidad con number % 2 == 1 fallará.

Para verificar si un número es impar, puede usar (number & 1) != 0.

+0

Al igual que una respuesta rápida, en Python podría hacer: 'int (z/2) == float (z)/2' pero la mayoría usará el obvio'% '. – miku

+0

ya seguro use% es correcto pero no he usado este operador%? – Gensheriff

+1

'número% 2' significa el resto del número que se divide por 2. Todos los números pares no producirán un resto, y todos los números impares lo harán. –

5

NO puede tener readLine dentro de ese if. Primero necesita obtener el valor y luego puede usar su if.

dice así:

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!"); 
} 

Finalmente - No utilice valores con nombre "a", "e" o "d" - Es muy confuso. Simplemente nombre vars con nombres que le permitan al lector saber/adivinar su rol en su código. No tengo idea de cuál es el significado de su "a" o b, c, d, etc. Por ejemplo, su num debe llamarse enteredValue para aclarar su código.

+0

Lo cambié, pero algo no está donde debería estar. Cuando ingreso un número par, no hace nada. Si ingreso un número impar, funciona bien. – Mike

+0

Me gustaría ayudarlo, pero nuestro código es horrible de leer . U necesita cambiar el nombre de sus variables ... agregue algunas funciones privadas en lugar de línea de código múltiple dentro de if-else -> if - function1() (nombrado correctamente!) Else - function2() ... http: // introcs .cs.princeton.edu/11style/léelo por favor, o en google otra cosa ** código claro ** y recuerde - el código debe ser fácil de leer! – dantuch

+2

Por favor absténgase de usar el lenguaje de texto en sus respuestas y sus comentarios. Este es un sitio para * programadores profesionales y entusiastas *, y como tal espera al menos cierto nivel de profesionalismo en preguntas y respuestas. –

1

operación en modo bit (manipulación de bits) en Java manera

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

obras examinado digamos, 100 (número 4) vs 001, haciendo la operación AND en cada uno de los bits y volviendo ya sea 0 y 1. Si el el bit final es un 0, como 4, siempre será par. Si el bit final es 1, va a ser impar.

10

num% 2 == 1 devolver resultados incorrectos en número impar negativo, el resto de la división con 2 no serán 1. Esto se puede solucionar de la siguiente manera:

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

Java Findbugs prefiere este método también – Matt

2

respuesta de Chaker sobre entero negativo es confirmado. En mi JavaSE-1,8

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


que muestra resultado = false en lugar cierto

Cuestiones relacionadas