Buscar
Social
Ofertas laborales ES

Foro sobre Java SE > Java basico, problema con factoriales

Buenas noches a todos espero que estén bien:

Tengo un inconveniente con mi lógica al tratar de mostrar los factoriales del 1 al 5. Puedo listarlos, pero el acumulador no me muestra los resultados de manera correcta y no se "reinicia" para que me muestra el factorial de acuerdo al numero indicado. que me esta haciendo falta?. Anexo el código para que me puedan orientar. Muchas gracias.

import javax.swing.JOptionPane;
import javax.swing.JTextArea;
public class Ejercicio58 {
public static void main(String args[]){

int fact=1;

JTextArea areaSalida = new JTextArea();
areaSalida.setText("Numero\tFactorial\n");

for(int i=1;i<=5;i++){
for(int j=5;j>=1;j--)

fact=fact*j;
areaSalida.append(i+"\t"+fact+"\n");

}

JOptionPane.showMessageDialog(null, areaSalida,"Resultados",JOptionPane.INFORMATION_ME SSAGE);

}

}

febrero 8, 2013 | Registered Commenterleoalvis

Hola leoalvis,

Que tal haciendo el bucle asi:


for (int i = 1; i <= 5; i++) {
// j=i porque i contiene el numero del factorial que queremos calcular
for (int j = i; j >= 1; j--) {

fact = fact * j;

}
areaSalida.append(i + "\t" + fact + "\n");
// Reiniciamos el contador total
fact = 1;
}

Saludos

febrero 8, 2013 | Unregistered CommenterUnoPorAhi

Hola UnoPorAhi:

Muchas gracias, me sirvió. No me imaginé la solución de esa forma. Seguiré practicando para desarrollar mas mi lógica.

febrero 8, 2013 | Unregistered Commenterleoalvis

Una manera muy simple, y segura, de obtener un factorial, sería esta:

public class Factorial {

public static void main(String[] args) {
System.out.println("factorial= " + getFactorial(20));
}

private static BigInteger getFactorial(final int n) {
BigInteger f = BigInteger.ONE;
for (int i = 1; i <= n; i++) {
f = f.multiply(BigInteger.valueOf(i));
}
return f;
}
}

Las soluciones que usan int internamente pueden dar resultados erróneos, debido a la limitación de máximo valor de los enteros.

febrero 9, 2013 | Registered Commenterchoces