Java - Estructura de Control

   
Vista:

Estructura de Control

Publicado por Alex (1 intervención) el 16/12/2015 00:35:36
Hola buenas, he empezado hace poco a estudiar la programacion de Java. Estamos dando la parte de las estructuras de control.
Tengo que hacer en una clase MetodosEstaticos sin metodo principal un método estático que muestre los números comprendidos entre 100 y 999 que cumplen que la suma de sus dígitos es igual al producto de los mismos y llamarlo desde otra clase con MetodosEstaticos.nombre_del_metodo.

He hecho este codigo:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
public static void numeros_con_propiedad() {
	int contador, res, sum = 0, prod = 0;
	for( contador=100; contador<999; contador++){
		while (contador>0){
			res=contador%10;
			contador=contador/10;
			sum=contador+res;
		}
		while (contador>0){
			res=contador%10;
			contador=contador/10;
			prod=contador*res;
		}
	}
 
	if(sum==prod){
		System.out.print(contador+" - ");
	}
}

y le he llamado desde la clase ejercicio1 con: MetodosEstaticos.numeros_con_propiedad();
Pero el programa no para de correr y no sale nada. Necesito ayuda. Gracias
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

Estructura de Control

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
public static void numeros_con_propiedad() {
 
	int numero;
	int res;
	int sum;
	int prod;
 
	final int DIEZ = 10;
 
	for (int i = 100; i < 999; i++) {
 
		sum = 0;
		prod = 1;
		numero = i;
 
		while (numero > 0) {
 
			res = numero % DIEZ;
			numero /= DIEZ;
			sum += res;
			prod *= res;
 
		}
 
		if (sum == prod) {
 
			System.out.print(i + " - ");
 
		}
 
	}
}
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Estructura de Control

Publicado por Andres Ruiiz renness_777@hotmail.com (4 intervenciones) el 16/12/2015 05:14:03
Que sonso. Obvio que nunca termina porque es un bucle indefinido en el "for" pones el contador de 100 a 999, pero en el while que sigue pones contador=contador/10; hasta que este se hace 0. Eso quiere decir que jamas entra en el segundo while, y cuando vuele al for el contador que tendria que valer 101 en la segunda vuelta valdra 1, y otra vez llega al while que lo pone en 0, y llega al for que lo pone en 1 y otra ves el while y el for................................... infinito.

Una solucion seria agregar una variable auxiliar extra para cada while. Asi

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
public static void numeros_con_propiedad() {
int contador, res, sum = 0, prod = 0, AUX1, AUX2;
for( contador=100; contador<999; contador++){
AUX1=contador;
while (AUX1>0){
res=AUX1%10;
AUX1=AUX1/10;
sum=AUX1+res;
}
AUX2=contador;
while (AUX2>0){
res=AUX2%10;
AUX2=AUX2r/10;
prod=AUX2*res;}
}
 
if(sum==prod){
System.out.print(contador+" - ");
}
}
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Estructura de Control

Publicado por Thanatos (69 intervenciones) el 16/12/2015 05:36:00
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
public class MetodosEstaticos {
    private static final int MINIMO = 100;
    private static final int MAXIMO = 999;
 
    public static void numerosConPropiedad() {
        int suma;
        int producto;
        char[] array;
 
        for (int numero = MINIMO; numero < MAXIMO; ++numero) {
            suma = 0;
            producto = 1;
            array = Integer.toString(numero).toCharArray();
 
            for (int i = 0; i < array.length; ++i) {
                suma += Character.getNumericValue(array[i]);
                producto *= Character.getNumericValue(array[i]);
            }
 
            if (suma == producto) {
                System.out.println(numero);
            }
        }
    }
 
}
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar