0

Cuando realizo la pregunta de "Introduce otro nombre más para comprobar si se encuentra o no" cuando tecleo fin, debe terminar el programa, pero no lo hace. ¿Qué he de modificar?

<!DOCTYPE html>
<html lang="es">
<head>
<meta charset="utf-8" />
<title>Ej 2</title>
</head> 
<body>

<script type="text/javascript">

var nombres=[];
var respuesta;


for (var i=1; i<=10; i++) { 
    nombres[i]=prompt("Introduce el nombre " +i);
}

var comprueba=prompt("Introduce otro nombre más para comprobar si se encuentra o no");

do {
var posicion=0;
for (var i=1; i<=10; i++) {
    if(comprueba==nombres[i]) {
        posicion=i;
     }
   }  

if(posicion!=0) {
alert("El nombre " +comprueba+ " ha sido encontrado en la posición " +posicion);
}else{
alert("El nombre " +comprueba+ " no ha sido encontrado");
}   


}while(respuesta=="fin")

</script>
</body>
</html>
Kiko_L
  • 6,455
  • 1
  • 11
  • 25
user09b
  • 449
  • 1
  • 4
  • 14

2 Answers2

1

creo que hay varias cosas a tener en cuenta. Como bien te han dicho en los comentarios:

  1. El do-while no está bien hecho. Estás ejecutando el código contenido en el mientras respuesta == "fin" cuando tienes que hacer lo contrario, cuando el usuario introduzca "fin" es cuando se termina el do-while.

  2. Tampoco tienes definido el valor de respuesta porque no se lo estás pidiendo en ningún momento por lo que será siempre undefined.

  3. Si quieres repetir el bucle do-while n veces, también tendrás que pedir la nueva palabra a buscar dentro de ese bucle

Comentarios extra:

  1. Acostúmbrate a usar let más a menudo. var crea variables globales lo que te puede dar problemas de conflicto entre variables o comportamientos no deseados. Más info aquí y aquí.

  2. Acostúmbrate a utilizar los comparadores estrictos (=== y !==) que no sólo comparan el valor sino también el tipo de objeto. Más info aquí y aquí.

 <!DOCTYPE html>
    <html lang="es">
    <head>
    <meta charset="utf-8" />
    <title>Ej 2</title>
    </head> 
    <body>

    <script type="text/javascript">

    let nombres=[];    
 let respuesta;

    for (let i=1; i<=10; i++) { 
        nombres[i]=prompt("Introduce el nombre " +i);
    }

    do {
    let comprueba=prompt("Introduce otro nombre más para comprobar si se encuentra o no");
    
    let posicion=0;
    for (let i=1; i<=10; i++) {
        if(comprueba==nombres[i]) {
            posicion=i;
         }
       }  

    if(posicion!==0) {
     alert("El nombre " +comprueba+ " ha sido encontrado en la posición " +posicion);
    }else{
     alert("El nombre " +comprueba+ " no ha sido encontrado");
    }   

 respuesta = prompt("Si desea finalizar introduzca 'fin'");

    }while(respuesta.toLowerCase()!=="fin")

    </script>
    </body>
    </html>

Se podrían hacer más cosas como comparar que la cadena introducida sea un texto distinto a vacío, por ejemplo pero eso te lo dejo a ti ;)

Kiko_L
  • 6,455
  • 1
  • 11
  • 25
0

hay tres problemas en tu codigo:

1.- solo preguntas una vez al usuario el nombre para comprobar si existe en la lista. Por lo tanto, una vez que entra en el do-while, se produce un bucle infinito, ya que NUNCA cambia ese nombre.

2.- tienes la variable comprueba para leer lo que te pide el usuario, pero luego el bucle comprueba con respuesta que NUNCA ha cambiado en tu codigo.

3.- tu comprobacion en el bucle es ==. Esto significa que solo estara en el bucle si lo que escriba tu usuario es fin. En caso de escribir un nombre, no cumplirias la condicion y se saldria del bucle. La condicion correcta seria !=. Para solucionar 1, puedes hacer:

do {
var comprueba=prompt("Introduce otro nombre más para comprobar si se encuentra o no");

Es decir, primero el do, luego el var comprueba.

para solucionar 2, en lugar de utilizar respuesta en la condicion del bucle, cambiala por comprueba:

}while(respuesta!="fin")

para solucionar 3, debes entender que do-while es hacer-mientras, es decir, mientras respuesta NO SEA fin, quieres que se repita lo del bucle. Por ello, la condicion es con !=.

Jakala
  • 3,924
  • 1
  • 11
  • 19