múltiples condiciones más / si la declaración de alguna manera incorrecta?

Estoy haciendo un desafío de hackernet donde n es una entrada int. Las condiciones son:

  • Si n es impar, imprima Extraño
  • Si n es par y está en el rango inclusivo de 2 a 5, imprima Not Weird
  • Si n es par y está en el rango inclusivo de 6 a 20, imprima Extraño
  • Si n es par y mayor que 20, imprima Not Weird.

Estoy seguro de que el código hace lógica y no creo que haya sintaxis. Da las respuestas correctas y hackernet todavía dice que es incorrecto, así que he venido aquí para ver si alguien puede ver cuál es el problema.

public static void main(String[] args)
{
    int N = scanner.nextInt();
    scanner.skip("(\r\n|[\n\r\u2028\u2029\u0085])?");

    if (N % 2 != 0 || N % 2 == 0 && N >= 6 && N <= 20)
    {
        System.out.print("weird");
    }
    else
    {
        System.out.print("not weird");
    }
}
Respuesta 1

El problema es la lógica en su elsecondición, que también capturaría valores de Nmenos de 2. Pruebe esta versión:

if (N % 2 != 0)
{
    System.out.print("weird");
}
else if (N >= 2 && N <= 5 || N > 20)
{
    System.out.print("not weird");
}
else if (N >= 6 && N <= 20)
{
    System.out.print("weird");
}
else
{
    // NOTE: if the code still fails, remove this else condition
    System.out.print("unexpected value of N");
}

Nota: Para que su código pase la tarea Hackernet, es posible que deba eliminar por completo la elsecondición. Lo agregué para completar, pero Hackernet podría probar N=1para ver si no se imprime nada.

Respuesta: 2

Lea esta condición:

if (N % 2 != 0 || N % 2 == 0 && N >= 6 && N <= 20)

como

if (N % 2 != 0 || (N % 2 == 0 && N >= 6 && N <= 20))

Luego, vea cómo la precedencia del operador cambia el comportamiento y produce los resultados deseados.

Respuesta: 3

Comprueba el siguiente

public static void main(String[] args)
    {
        int N = scanner.nextInt();
        scanner.skip("(\r\n|[\n\r\u2028\u2029\u0085])?");

        if(N%2!=0) {
            System.out.print("weird");  
        }else if(N>=2 && N<=5) {
            System.out.print("not weird");
        }else if(N>=6 && N<=20) {
            System.out.print("weird");
        }else if(N>20) {
            System.out.print("not weird");
        }

    }
Respuesta: 4

Para la parte técnica: comience leyendo sobre la precedencia de los operadores de Java y luego haga que su código sea más fácil de leer.

Empujar tantas condiciones en una sola si no es útil. Lo ve usted mismo: cree que el código es correcto, pero probablemente no lo sea. Y ahora busca a otras personas para que le expliquen su código demasiado complejo. Y, por supuesto, todas las otras respuestas hacen todo eso por usted ... pero más allá de eso:

La respuesta "real" aquí es: aprender a probar su código.

En lugar de tener un main que de alguna manera solicite un número y luego tome decisiones, escriba un método boolean isWeird()que tome un número y devuelva verdadero / falso de acuerdo con sus requisitos.

Y luego simplemente pruebe ese método con todos los casos razonables. Y luego verifique si ese resultado es el esperado.

Usando JUnit, podrías escribir algo como

 assertThat(isWeird(1), true);
 assertThat(isWeird(21), true);
 assertThat(isWeird(22), true);
 ...

Idealmente, usted escribe tales pruebas antes de implementar ese método. Y luego implementa todas las condiciones, y cualquier verificación que falle le indica que algo está mal.

Respuesta: 5

Creo que, en la condición if (N% 2! = 0 || N% 2 == 0 && N> = 6 && N <= 20), está verificando los valores pares e impares al mismo tiempo usando && y || operador. ¿Puede modificar la condición de esta manera si (N% 2! = 0 || (N% 2 == 0 && N> = 6 && N <= 20)) y verifique? Si N es impar, se imprimirá raro o si N es par y cae por debajo de 6 y 20 inclusive, se imprimirá extraño.

Respuesta: 6

Ya tiene algunas buenas respuestas aquí, pero si piensa lógicamente sobre lo que realmente necesita, puede desglosarlo más fácilmente.

Parece que la única "Not Weird"impresión es 2, 4e incluso números> 20

Entonces, un ejemplo podría ser algo como:

if (n % 2 == 0) {
    if ((n >= 2 && n <= 5) || (n > 20)) {
        return "Not Weird";
    }
}
return "Weird";
Respuesta: 7

Me gustaría saber qué API de Eclipse se llaman para obtener la lista de métodos de una interfaz determinada Y el código genera la lista en una clase que implementa la interfaz. Básicamente me gustaría ...

Tenemos una pequeña aplicación de búsqueda en contexto local. Para los servicios de respaldo, estamos usando Apache Solr 6.6.2 para el índice y el almacenamiento de datos. El front-end está en PHP con el servidor web Apache2. Tenemos un servidor de 48 núcleos ...

Estoy trabajando para lanzar Amazon Mechanical Turk en Java. Este es el enlace para el proyecto. (mturk-rest-java-1.0.zip se puede descargar en la parte inferior del sitio) http: //aws.amazon.com/code/Amazon -...

¿Un objeto PDPage contiene una referencia al PDDocument al que pertenece? En otras palabras, ¿un PDPage tiene conocimiento de su PDDocument? En algún lugar de la aplicación tengo una lista de ...