const ps = require("prompt-sync"); const prompt = ps(); console.log("\nFinding The Maximum Number In The Array"); console.log("---------------------------------------"); let length = prompt("Enter the length of the array: "); let temp = 0; let maxnum; let array = []; for(let i=0; i<length;i++){ let num = prompt(i+":"); array[i] = num; } console.log("\nlength: " + length); for(let o=0; o < length ; o++ ){ if(array[o] > temp){ temp = array[o]; } if(o == (length-1)){ maxnum = temp; console.log("\ncurrent max " + maxnum); } } console.log("The maximum number is: "+ maxnum);Funciona correctamente al comparar números de 1 dígito; 1,2,3,7 por ejemplo. Su salida es 7 para el número máximo. Pero al agregar 10 a la lista, el programa seguirá generando 7.
prompt obtiene valores de cadena, y cuando compara el valor de cadena 10 a 7 , entonces 7 se considera el mayor , porque la comparación de cadenas ocurre carácter por carácter, de izquierda a derecha.
Utilice array[i] = parseInt(num); para convertir esos valores de cadena en valores enteros reales primero.
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/parseInt
Debido a que el mensaje le da una cadena, está comparando los valores alfabéticamente. Así como el carácter "C" podría considerarse mayor que el carácter "A", el carácter de texto "7" también es mayor que el carácter de texto "1". Así como la palabra "MANZANA" se ordena alfabéticamente antes que "GATO", aunque "MANZANA" sea más larga, la cadena de texto "10" se ordena alfabéticamente antes que la cadena de texto "7". De hecho, el texto "1000000" también vendría antes que el texto "7" cuando se ordenaran alfabéticamente.
Para resolverlo, primero debe convertir la cadena de texto en un número, lo que se puede lograr con parseInt(). Un lugar conveniente para hacer esto sería inmediatamente después de recuperar la entrada de cadena del usuario, como en array[i] = parseInt(num); .
Debe almacenar los valores como un número entero en su matriz mientras acepta la entrada en el indicador. De lo contrario, los valores se considerarán de tipo cadena por defecto.
Puede usar parseInt(yourInput); .