Título: mostrar por pantalla todos los enteros x tales que su cuadrado (x * x) se encuentre entre los valores Publicado por: atina en 22 Febrero 2021, 20:13 pm Programa de interfaz gráfica en donde el usuario introduce los valores minimo (intMin) y máximo (intMax), al clicar sobre el botón realiza la operación: mostrar por pantalla todos los enteros num tales que su cuadrado (num * num) se encuentre entre los valores del mínimo y del máximo
private void btnCalcularActionPerformed(java.awt.event.ActionEvent evt) { // TODO add your handling code here: textPanel3.setText(" Darrera acció feta: Clic al botó Calcular"); //Convierto los String introducidos en int. String min = introMin.getText(); int intMin = Integer.parseInt(min); String max = introMax.getText(); int intMax = Integer.parseInt(max); int num = 0; int resultado = num*num; do { if ((resultado >= intMin) && (resultado<=intMax)){ textCalcu.setText(Integer.toString(num)); } num++; } while ((num * num >= intMin) && (num * num <= intMax)); } Le he dado muchas vueltas y no doy con el error. Antes me imprimía la última opción que se cumplia pero tiene que imprimir cada número que cumpla esa condición. Si alguien pudiera ayudarme... Muchas gracias igualmente!! Título: Re: mostrar por pantalla todos los enteros x tales que su cuadrado (x * x) se encuentre entre los valores Publicado por: K-YreX en 23 Febrero 2021, 00:48 am Antes de nada, el código debe estar publicado entre etiquetas de Código GeSHi. Puedes seleccionarlas en el desplegable que dice "Código GeSHi" (encima del cuadro de texto) o escribiendo manualmente:
[code=java] <tu código aquí> [/code] Esto es por el siguiente bloque: Citar Código
Por otro lado veo un error importante y es que no estás actualizando el valor de resultado (siempre vale 0). Por último, la estructura do-while() no es la más adecuada para esta situación. Lo correcto sería utilizar un while() o en su defecto un for() ahorrando la condición del if(). La forma de hacer esto es crear un String auxiliar en el que ir concatenando toda la cadena que quieres mostrar. Por ejemplo: Código Como ves, no utilizo la variable 'resultado'. La puedes utilizar para guardar la operación de (num * num) y no tener que calcularla 2 veces. Otra posible mejora es utilizar un StringBuffer o StringBuilder en vez de String para concatenar la cadena (es más eficiente). Otra posible solución para no tener que multiplicar (num * num) en cada iteración, es hacer la operación inversa. Es decir si tiene que cumplirse que: Código: intMin <= (num * num) <= intMax Entonces también tiene que cumplirse:Código: sqrt(intMin) <= num <= sqrt(intMax) siendo sqrt(n) la raíz cuadrada de n.Sin embargo, en esta ocasión tendrías que tener cuidado para comparar entre números enteros y números reales. |