Java - Ayuda para ver que esta fallando en este código

   
Vista:

Ayuda para ver que esta fallando en este código

Publicado por erick (1 intervención) el 14/04/2016 02:34:20
Hola soy nuevo en el grupo. Podrian ayudarme en que falla este codigo.
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
package numero.perfecto;
import java.util.Scanner;
 
public class NumeroPerfecto {
 
    public static void main(String[] args) {
        int suma=0;
                int div,res;
        Scanner leer = new Scanner(System.in);
        System.out.print("Ingrese el numero menor del intervalo: ");
        int a= leer.nextInt();
          System.out.print("Ingrese el numero mayor del intervalo: ");
        int b= leer.nextInt();
        for( int n=a;n<b+1;n++){
         for (int i = 1; i < n; i++) {  // i son los divisores. Se divide desde 1 hasta n-1 
            if (n % i == 0) {
                suma = suma + i;     // si es divisor se suma
            }
        }
         if(suma==n){
                System.out.print(n);
        }
            }
 
    }
    }
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
Imágen de perfil de xve

Ayuda para ver que esta fallando en este código

Publicado por xve (261 intervenciones) el 14/04/2016 08:36:13
Hola Erick, que error te da? o que debería de hacer que no hace?
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

Ayuda para ver que esta fallando en este código

Publicado por Thanatos (69 intervenciones) el 14/04/2016 10:16:20
La asignación que haces a la variable suma, en la línea 7, debería estar como primera línea dentro de la primera sentencia for, porque con cada iteración de ese bucle se inicia la sumatoria de los divisores para un nuevo número.

Las variables div y res, de la línea 8 no cumplen ninguna función en el programa.

Luego de utilizar por última vez el objeto leer, en la línea 13, deberías cerrar el recurso de esta manera:
1
leer.close();

Me parece que la condición de la primera sentencia for, sería más fácil de entender si la escribes así: n <= b, aunque esto no afecta al funcionamiento del programa.

La segunda sentencia for no necesita iterar hasta n - 1. Como límite máximo podría tomarse n / 2, para evitar que el programa realice algunas iteraciones innecesarias.

La línea 21 mostrará los números generados juntos, unos con otros.
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