es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Confusión al usar el operador != junto al operador || en JavaScript.

Soy un traductor de español que traduce documentos de TI. Traduce lo siguiente al español. No traduzcas el código y la salida en markdown.

Soy nuevo en JavaScript y en la programación. Estoy escribiendo un programa para jugar a piedra, papel o tijeras, y quiero captar cuando un usuario no elige una elección correcta.

Aquí está mi función userChoice(), con una declaración if para capturar elecciones incorrectas.

Cuando llamo a la función tal como está escrita, siempre activa la declaración if.

Solo ocurre esto si uso el operador || para definir múltiples comparaciones !=. Si solo uso una comparación !=, sin el operador ||, funciona bien.

Entonces parece que no entiendo muy bien cómo usar || y != juntos.

Editar: Pensé que || probaba el primer valor falsy, y && probaba el primer valor truthy. Lo tenía al revés, y debería haber usado && para encontrar el primer valor falsy. Gracias por señalar mi error.

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Solución

    El problema con la instrucción if en la función userChoice() es con el operador lógico ||.

    Cuando se utiliza ||, la condición será verdadera si al menos una de las comparaciones es verdadera. En este caso, la condición será verdadera si choice no es igual a 'rock' O no es igual a 'paper' O no es igual a 'scissors'. Dado que choice no puede ser igual a los tres al mismo tiempo, la condición siempre se evalúa como verdadera.

    Para solucionar esto, es necesario cambiar el operador de || a&&. Con &&, la condición es verdadera solo si todas las comparaciones son verdaderas.

    Así es como debería lucir la función userChoice() actualizada:

    function userChoice() {
      let choice = prompt('Elige piedra, papel o tijeras.', 'piedra')
      // Convertir entrada del usuario a minúsculas
      choice = choice.toLowerCase()
      // Si el usuario no elige 'rock', 'paper' o 'scissors' ...
      if (choice != 'rock' &&
          choice != 'paper' &&
          choice != 'scissors') {
            alert('Por favor, elige una opción válida.') // ... pedirles que elijan una opción válida.
            return userChoice(); // llamar a la función userChoice () nuevamente.
      } else {
        console.log(`Player1 elige ${choice}`)
        return choice
      }
    }
    

    Con esta función actualizada, la instrucción if detecta correctamente la entrada de usuario no válida y la instrucción else registra la elección del usuario y la devuelve.

Comments are closed.