Java - Dudas Con For

 
Vista:
sin imagen de perfil
Val: 13
Ha aumentado su posición en 9 puestos en Java (en relación al último mes)
Gráfica de Java

Dudas Con For

Publicado por Ulises (3 intervenciones) el 21/10/2020 18:59:48
Hola…. Tengo duda al respecto del acumulador ya que al iniciar el ciclo for me aparece en 0 y cuando se ejecuta la sentencia if sobrepasa los 50000 y cuando termina el recorrido el resultado es 52370, de antemano muchas gracias por su atención y ayuda.

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
33
34
35
36
37
38
39
40
41
42
public static void main(String[] args) {
        LinkedList<Tareas> listaTareas= new LinkedList<>();
 
        listaTareas.add(new Tareas(1,3210));
        listaTareas.add(new Tareas(2,8390));
        listaTareas.add(new Tareas(3,760));
        listaTareas.add(new Tareas(4,3930));
        listaTareas.add(new Tareas(5,6890));
        listaTareas.add(new Tareas(6,2710));
        listaTareas.add(new Tareas(7,9140));
        listaTareas.add(new Tareas(8,8940));
        listaTareas.add(new Tareas(9,2550));
        listaTareas.add(new Tareas(10,2030));
        listaTareas.add(new Tareas(11,3820));
        listaTareas.add(new Tareas(12,7540));
        listaTareas.add(new Tareas(13,3290));
        listaTareas.add(new Tareas(14,9350));
        listaTareas.add(new Tareas(15,5760));
        listaTareas.add(new Tareas(16,6990));
        listaTareas.add(new Tareas(17,220));
        listaTareas.add(new Tareas(18,740));
        listaTareas.add(new Tareas(19,420));
        listaTareas.add(new Tareas(20,5950));
        listaTareas.add(new Tareas(21,1380));
        listaTareas.add(new Tareas(22,7540));
        listaTareas.add(new Tareas(23,6580));
        listaTareas.add(new Tareas(24,3610));
        listaTareas.add(new Tareas(25,4190));
 
        System.out.format("Bloque \t Tamaño \t  Proceso\t");
        System.out.println("");
        int tamañoMemoria=0;
        for(int i=0;i<listaTareas.size();i++){
            if(tamañoMemoria<50000){
                System.out.println(listaTareas.get(i).getNum()+"\t  "+listaTareas.get(i).getTamaño());
 
            }
            tamañoMemoria+=listaTareas.get(i).getTamaño();
        }
    }
 
}
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 Rodrigo
Val: 2.041
Plata
Ha mantenido su posición en Java (en relación al último mes)
Gráfica de Java

Dudas Con For

Publicado por Rodrigo (623 intervenciones) el 21/10/2020 19:26:15
No entedi la pregunta.
Podrias decir que es lo que esperas que escriba comparado con lo que se escribe?
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
sin imagen de perfil
Val: 13
Ha aumentado su posición en 9 puestos en Java (en relación al último mes)
Gráfica de Java

Dudas Con For

Publicado por Ulises (3 intervenciones) el 21/10/2020 19:28:57
Disculpa jeje, lo que trato de hacer es que el ciclo se interrumpa cuando sea menor a 50000, pero lo que sucede es que este se pasa de 50000
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
Imágen de perfil de Kabuto
Val: 3.428
Oro
Ha mantenido su posición en Java (en relación al último mes)
Gráfica de Java

Dudas Con For

Publicado por Kabuto (1385 intervenciones) el 21/10/2020 20:43:19
1
2
3
4
5
6
7
for(int i=0;i<listaTareas.size();i++){
    if(tamañoMemoria<50000){
        System.out.println(listaTareas.get(i).getNum()+"\t  "+listaTareas.get(i).getTamaño());
 
    }
    tamañoMemoria+=listaTareas.get(i).getTamaño();
}

Ese if, lo único que impide es que al igualar o sobrepasar 50000, se haga el System.out...

Pero el bucle for continua iterándose y por tanto tamañoMemoria sigue acumulando.

Para interrumpir el bucle, puedes hacerlo así:

1
2
3
4
5
6
7
8
for(int i=0;i<listaTareas.size();i++){
    if(tamañoMemoria<50000){
        System.out.println(listaTareas.get(i).getNum()+"\t  "+listaTareas.get(i).getTamaño());
        tamañoMemoria+=listaTareas.get(i).getTamaño();
    }
    else
        break;   //Interrumpimos bucle por las bravas...
}

O, si quieres hacerlo un poco más elegante:
1
2
3
4
for(int i=0;i<listaTareas.size() && tamañoMemoria<50000;i++){
    System.out.println(listaTareas.get(i).getNum()+"\t  "+listaTareas.get(i).getTamaño());
    tamañoMemoria+=listaTareas.get(i).getTamaño();
}
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
sin imagen de perfil
Val: 13
Ha aumentado su posición en 9 puestos en Java (en relación al último mes)
Gráfica de Java

Dudas Con For

Publicado por Ulises (3 intervenciones) el 21/10/2020 21:02:38
Lo que busco es que como puede ver en el ejemplo trato de que no pase al "Bloque 11" que solo se quede en el 10, lo que estaba usando era el acomulador para ponerle la condicion de tamañoMemoria<50000, pero esta se pasa del tamaño y da como resultado 52370 que seria mas grande del "tamañoMeoria", si intente antes las opciones que me proporciono pero se pasa... soy nuevo en esto por eso tal vez no me logro explicar del todo
Dinamico
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
Imágen de perfil de Rodrigo
Val: 2.041
Plata
Ha mantenido su posición en Java (en relación al último mes)
Gráfica de Java

Dudas Con For

Publicado por Rodrigo (623 intervenciones) el 22/10/2020 04:52:59
Podrias hacer, dentro del ciclo

1
2
3
if( TamanoMemoria + ListaTareas .... > 50000 ) {
   break;
}

y poner el println incondicional justo despues de esto.
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