Clase 6
Clase 6: Sentencias de
 Repetición
Después de haber estudiado este capítulo usted podrá:



          Implementar sentencias de repetición en su programa utilizando
           while, do-while y for.
          Implementar sentencias de repetición utilizando: while, do-while y
           for.
          Implementar sentencias de control genéricas
          Realizar sentencias de repetición anidadas
          Elegir la sentencia de repetición adecuada según el problema
          Generar números aleatorios
          Lograr que el usuario interactúe con la máquina en una sesión
           SI-NO para continuar ejecutando el programa

                                                                        2
Definición
   Las sentencias de repetición son un bloque de
    código que son ejecutadas por un cierto número de
    veces hasta que se cumpla una condición.

   Repeticiones controladas por contador: terminan la
    ejecución del bloque después que este ha sido
    ejecutado por un número de veces determinado

   Repeticiones controladas por centinela: termina la
    ejecución del bloque después que un valor diseñado
    como centinela ha sido encontrado.

   Las sentencias de repetición son llamadas LOOP o
    BUCLE.
                                                         3
Sentencia while
//este programa realiza la suma de los 100 primeros
números


int sum = 0, number = 1;


while ( number <= 100 ) {


    sum      =   sum + number;
                                           Estas sentencias son
                                            Estas sentencias son
                                           ejecutadas mientras que
                                            ejecutadas mientras que
                                           la variable number sea
                                            la variable number sea
    number = number + 1;                   menor ooigual que 100
                                            menor igual que 100


}
System.out.print(“La Suma es: “ + suma);


                                                                      4
Sintaxis para la sentencia while
               while ( <expresión booleana> ) {

                         <sentencia 1>
                         <sentencia 1>
                         <sentencia n>           }
                                                     Expresión Booleana
                                                     Expresión Booleana


               while (       number <= 100       ) {

                   sum       =   sum + number;
Sentencias
 Sentencias
(loop body)
 (loop body)       number = number + 1;
               }



                                                                   5
Flujo de Control while

       int sum = 0, number = 1
        int sum = 0, number = 1




                                                                 number = number + 1;
                                          sum = sum + number;

                                                                number = number + 1;
                                         sum = sum + number;
         number <= 100 ?
          number <= 100 ?




        false
                                  true




                                                                                        6
Mas Ejemplos
                                        Sigue sumando
1
1   int sum = 0, number = 1;             Sigue sumando
                                        números 1, 2, 3, …
                                         números 1, 2, 3, …
                                        hasta que la variable
                                         hasta que la variable
    while ( sum <= 1000000 ) {          sum sea mayor aa
                                         sum sea mayor
                                        1,000,000.
                                         1,000,000.
        sum      =    sum + number;
        number = number + 1;
    }


2
2   int producto = 1, numero = 1,       Calcula el producto de
                                         Calcula el producto de
       contador   = 20, ultimoNumero;
                                        los 20 primeros enteros
                                         los 20 primeros enteros

    ultimoNumero = 2 * contador - 1;


    while (numero <= ultimoNumero) {
        producto = producto * numero;
        numero       = numero + 2;
    }
                                                                   7
Encontrando el Maximo Comun Divisor
      public int
          mcdBruteforce(int m, int n) {
          // assume m, n >= 1

          int menor = Math.min(m, n);
          int mcd;
          int i = 1;

          while (i <= menor) {

              if (m%i == 0 && n%i == 0) {
                  mcd = i;
              }

              i++;
          }

          return mcd;
      }

                                            8
                Aproximación directa
Encontrando el Maximo Comun Divisor
        public int gcd(int m, int n) {
            //   no importa si n o m
            //   es mayor, este metodo;
            //   trabaja bien
            //
            //   assume m, n >= 1

            int r = n % m;

            while (r != 0) {

                  n = m;
                  m = r;
                  r = n % m;
            }

            return m;
        }

                                          9
            Solución mas eficiente
Ejemplo: Probando datos de ingreso
String inputStr;
                                                            Primera lectura
                                                            Primera lectura
int       edad;

inputStr = JOptionPane.showInputDialog(null,“Su edad (entre 18 y 90):");
edad        = Integer.parseInt(inputStr);


while (edad < 18 || edad > 90) {
       JOptionPane.showMessageDialog(null,
           “Se ingreso una edad no valida. Por favor vuelva a intentarlo");


       inputStr = JOptionPane.showInputDialog(null,“Su edad (entre 18 y 90):");

       edad = Integer.parseInt(inputStr);
}

                                                              Segunda lectura
                                                              Segunda lectura


                                                                              10
Operadores cortos utiles
suma = suma + numero;   Es equivalente a     suma += numero;




         Operador           Uso            Significado
             +=         a += b;            a = a + b;
             -=         a -= b;            a = a – b;
             *=         a *= b;            a = a * b;
             /=         a /= b;            a = a / b;
             %=         a %= b;            a = a % b;

                                                           11
Tenga cuidado con los errores
 1.   Cuidado con el error “por uno”

 2.   Asegúrese que el cuerpo del loop contiene
      sentencias que eventualmente harán que el loop
      finalice

 3.   Si quiere ejecutar el cuerpo del loop N veces,
      entonces inicialice el contador en 0 y utilice una
      condicion que evalue contador <N, o inicialice el
      contador en 1 y evalue contador <=N



                                                           12
Loop Error #1 - Loop Infinito
                                             Error
                                             Error
 1
 1   int producto = 0;               Estas sentencias se
                                      Estas sentencias se
                                     ejecutaran por siempre.
                                      ejecutaran por siempre.
                                     La expresion boolena
                                      La expresion boolena
     while ( producto < 500000 ) {   nunca será falsa.
                                      nunca será falsa.
                                     Para solucionar el
                                      Para solucionar el
         product = product * 5;      problema producto debe
                                      problema producto debe
     }                               inicializarse en 11
                                      inicializarse en




 2
 2   int contador = 1;
                                              Error
                                              Error
     while ( contador != 10 ) {      La expresión boolena
                                      La expresión boolena
                                     nunca sera falsa.
                                      nunca sera falsa.
         contador = contador + 2;    Para solucionar el
                                      Para solucionar el
                                     problema count debe ser
                                      problema count debe ser
     }                               inicializado en 11
                                      inicializado en




                                                           13
Loop Error #2 – error por uno
       Objetivo : Ejecute el cuerpo del loop 10 veces
1
1       count = 1;                       2
                                         2   count = 1;
        while ( count < 10 ){                while ( count <= 10 ){
            . . .                                . . .
            count++;                             count++;
        }                                    }



3
3       count = 0;                       4
                                         4   count = 0;
        while ( count <= 10 ){               while ( count < 10 ){
            . . .                                . . .
            count++;                             count++;
        }                                    }



        1 y
        1           3 exiben el error por uno.
                    3
                                                                      14
La sentencia do-while
  int sum = 0, number = 1;


  do {

                             Estas sentencias son
                              Estas sentencias son
    sum = sum + number;      ejecutadas hasta que la
                              ejecutadas hasta que la
                             variable sum sea menor
                              variable sum sea menor
    number++;                ooigual que 100
                                igual que 100




  } while ( sum <= 100 );



                                                        15
Sintaxis do-while
      do
              <sentencias>
      while ( <expresion booleana> ) ;


      do {


           sum = sum + number;           Sentencias
                                          Sentencias
           number++;                     (loop body)
                                          (loop body)


      } while (   sum <= 100     );

      Expresion booleana
      Expresion booleana



                                                16
Flujo de Control do-while

      int sum = 0, number = 1
       int sum = 0, number = 1




      sum = sum + number
       sum = sum + number
      number++;
       number++;




                                 true
       sum <= 100
        sum <= 100


       false
                                        17
Bucle y Control de Media Repetición
   Bucle y Control de Media Repeticiόn puede ser
    utilizado para evaluar la condicion de terminacion
    de un bucle en medio del cuerpo del bucle.

   Es implementado utilizando las palabras
    reservadas while, if, and break.




                                                     18
Ejemplo: Bucle-y-MedioControl
String name;

while (true){

    name = JOptionPane.showInputDialog(null, “Tu nombre");

    if (name.length() > 0) break;

    JOptionPane.showMessageDialog(null, "Ingreso no
        valido." + “Debe ingresar al menos un caracter.");
}




                                                         19
Errores en Bucles-y-MedioControl
   Ponga atenciόn en dos cosas cuando utilice
    Bucles-y-MedioControl:
     El peligro de un bucle infinito. La expresión booleana
      del while es true, la cual siempre evaluará a true. Si
      olvidamos incluir una sentencia if para romper el
      bucle, terminaremos en un bucle infinito.
     Multiple  exit points. It is possible, although complex, to
      write a correct control loop with multiple exit points
      (breaks). It is good practice to enforce the one-entry
      one-exit control flow.


                                                              20
Bucle: Sentencia break (1/4)
 int i = 1;
 int sum = 0;
                                        sum is 21
 while (sum < 20) {
   sum += i;                            i is 7
   ++i;
 }
 System.out.println("sum is " + sum);
 System.out.println("i is " + i);

 int i = 1;
 int sum = 0;
 while (sum < 20) {
   sum += i;                            sum is 6
   if (sum % 2 == 0) break;             i is 3
   ++i;
 }
 System.out.println("sum is " + sum);
 System.out.println("i is " + i);
                                                    21
Bucle: Sentencia break (2/4)
 int i = 1;
 int sum = 0;
                                        sum es 15
 while ( true ) {
   sum += i;                            i es 5
   if (sum > 10) break;
                                        Note: Sin el break, es
   ++i;                                 un bucle infinito!
 }
 System.out.println("sum is " + sum);
 System.out.println("i is " + i);

 int i = 0;
 int sum = 0;                             Trate de
 while (sum <= 10) {                      evitar el uso
   ++i;                                   de break, a
   sum += i;                              menos que
 }                                        sea
 System.out.println("sum is " + sum);     necesario.
 System.out.println("i is " + i);

                                                            22
Bucle: Sentencia break (3/4)
 Random number = new Random();
 int i;
                                         i   is   43
 while (true) {                          i   is   2
   i = number.nextInt(100);              i   is   12
   System.out.println("i is " + i);      i   is   95
   if (i >= 80) break;
 }

 Random class will be discussed later.




                                                       23
Bucle: Sentencia break (4/4)
   break causa que el control salga del bucle mas interno
    en el que esta contenido..

     int a = 1;
     while (a < 5) {                         a   is   1,   b   is   1
       int b = 1;                            a   is   1,   b   is   2
       while (b < 5) {                       a   is   2,   b   is   1
         System.out.println("a is " + a
                                             a   is   2,   b   is   2
                     + ", b is " + b);
                                             a   is   3,   b   is   1
          if (b == 2) break;                 a   is   3,   b   is   2
          ++b;                               a   is   4,   b   is   1
         }
         ++a;                                a   is   4,   b   is   2
     }



                                                                        24
Bucle: Sentencia continue (1/2)
   Algunas veces podríamos querer ir inmediatamente a
    la siguiente iteracion, sin ejecutar el resto de las
    sentencias en el cuerpo del bucle.

   Esto puede ser realizado utilizando continue.

   Como break, continue solo causa que el control
    vaya a la siguiente iteracion en el bucle mas interno
    que lo contiene.




                                                            25
Bucle: Sentencia continue(2/2)
 int i = 0;                             i   is   1
                                        i   is   2
 while (i <= 6) {
   ++i;                                 i   is   4
   if (i == 3) continue;                i   is   5
   System.out.println("i is " + i);     i   is   6
 }                                      i   is   7

 int i = 1;
 int sum = 0;
 while (sum < 20) {
   sum += i;                            sum is 23
   if (sum % 2 == 0) continue;          i is 6
   ++i;
 }
 System.out.println("sum is " + sum);
 System.out.println("i is " + i);
                                                     26
Random Numbers (1/2)
   Random number generation is discussed in section 3.8 of
    your textbook.
   We learn another way here, using the Random class.
   Notes:
     Need to import java.util.*;
     Random( ): constructs a new random number generator
      Random whose seed is based on the current time.
     int nextInt(int n): returns the next pseudo-random, from the
      interval [0, 1, … n-1], uniformly distributed value of a Random
      object.
     Refer to the API specification for the complete description of class
      Random.



                                                                       27
Random Numbers (2/2)
import java.util.*;

public class Random1 {
  public static void main(String[] args) {

        Random num = new Random();

        for (int i=0; i<5; i++) {
          System.out.println("Next random number is "
                              + num.nextInt(100));
        }
    }                     Next   random   number   is   48
}                         Next   random   number   is   14
                          Next   random   number   is   89
                          Next   random   number   is   7
                          Next   random   number   is   44

                                                             28
Diálogo de Confirmación
   dialogo de confirmación puede ser utilizado para que el
    usuario elija si quiere seguir con la ejecución del programa
    o no.
     JOptionPane.showConfirmDialog(null,
            /*prompt*/         "Play Another Game?",
            /*dialog title*/    "Confirmation",
            /*button options*/ JOptionPane.YES_NO_OPTION);




                                                             29
Ejemplo: Diálogo de Confirmación
 boolean sigaJugando = true;
 int     seleccion;

 while (sigaJugando){

    //codigo que realiza un juego viene aqui
    // . . .

    seleccion = JOptionPane.showConfirmDialog(null,
                           “Quiere volver a jugar?",
                           "Confirmacion",
                           JOptionPane.YES_NO_OPTION);

    sigaJugando = (seleccion ==
 JOptionPane.YES_OPTION);
 }


                                                         30
Adicional

Preguntas de Examen
Considere el siguiente código
int i = 1;
while (i <= n) {
   if (i % n == 0) {
      ++i;
   }
}
  System.out.println(i);
(a) Cual es la salida si n es 0?
(b) Cual es la salida si n es 1?
(c) Cual es la salida si n es 3?


                                   32
Que retorna el siguiente método,
asumiendo que n es 12345?
           public static int metodoX(int n) {
             int sum = 0;
             while (n > 0) {
               sum += n % 100;
               n /= 100;
             }
             return sum;
           }
A.   9
B.   15
C.   69
D.   123
E.   168
                                                33
La sentencia for
   int i, sum = 0, number;


   for (i = 0; i < 20; i++) {


       number = scanner.nextInt( );
       sum = sum + number;


   }
                                                 Estas sentencias son
                                                  Estas sentencias son
                                                 ejecutadas 20 veces
                                                  ejecutadas 20 veces
                                                 ((i i= 0, 1, 2, … , ,19).
                                                       = 0, 1, 2, … 19).
   Utilizamos for cuando sabemos cuantas veces
   se va a realizar la repetición



                                                                             34
Syntax sentencia for
for ( <inicializacion>; <expresion booleana>; <incremento>   ){


                          <sentencias>
}
                              Expresión
                              Expresión
Inicializacion
 Inicializacion                                        Incremento
                                                        Incremento
                              Booleana
                               Booleana


    for (         i = 0   ;     i < 20    ;    i++           ) {


        number = scanner.nextInt();                  Sentencias
                                                      Sentencias
        sum = sum + number;                          (loop body)
                                                      (loop body)


    }

                                                                    35
false

                   true
                                        i i= 0;
                                           = 0;



                            i i< 20 ?
                               < 20 ?




 ber =
ber = . .. .. .; ;
 = sum + number;
                                                  Control Flow of for




= sum + number;




             ++;
          i i++;
  36
i++ or ++i?

for ( i = 0; i < 20; i++ ) {
    ...
}

                               Alguna diferencia?


for ( i = 0; i < 20; ++i ) {
    ...
                                   Aqui es lo mismo…
}                                  Solo cuando es parte
                                   de una expresion..si
                                   son diferentes



                                                          37
Compare for y while

  for ( Init ; Expression ; Increment )
      Action


  Init                    Si realmente odian utilizar WHILE
                          por alguna razon….
  while ( Expression )    pueden reescribirla
  {
      Action
      Increment
  }
                                                              38
Sentencia while

   //este programa realiza la suma de los 100
   primeros numeros


   int sum = 0, number = 1;


   while ( number <= 100 ) {


       sum    =   sum + number;


       number = number + 1;
   }



                                                39
Seguimiento de la ejecución (1/12)
                                     i   0
for (int i = 0; i < 3; ++i) {
  System.out.println("i es " + i);
}

System.out.println(“terminamos");




                                             40
Seguimiento de la ejecución(2/12)
                                      i   0
 for (int i = 0; i < 3; ++i) {
   System.out.println("i es " + i);
 }

 System.out.println(“terminamos");




                                              41
Seguimiento de la ejecución(3/12)
                                         i     0
for (int i = 0; i < 3; ++i) {
  System.out.println("i es " + i);
}

System.out.println(“terminamos");
                                     Output:

                                     i es 0




                                                   42
Seguimiento de la ejecución(4/12)
                                         i     1
for (int i = 0; i < 3; ++i) {
  System.out.println("i es " + i);
}

System.out.println(“terminamos");
                                     Output:

                                     i es 0




                                                   43
Seguimiento de la ejecución(5/12)
                                         i     1
for (int i = 0; i < 3; ++i) {
  System.out.println("i es " + i);
}

System.out.println(“terminamos");
                                     Output:

                                     i es 0




                                                   44
Seguimiento de la ejecución(6/12)
                                          i    1
for (int i = 0; i < 3; ++i) {
  System.out.println("i es " + i);
}

System.out.println(“terminamo");
                                     Output:

                                     i es 0
                                     i es 1




                                                   45
Seguimiento de la ejecución(7/12)
                                         i     2
for (int i = 0; i < 3; ++i) {
  System.out.println("i es " + i);
}

System.out.println(“terminamos");
                                     Output:

                                     i es 0
                                     i es 1




                                                   46
Seguimiento de la ejecución(8/12)
                                         i     2
for (int i = 0; i < 3; ++i) {
  System.out.println("i es " + i);
}

System.out.println(“terminamos");
                                     Output:

                                     i es 0
                                     i es 1




                                                   47
Seguimiento de la ejecución(9/12)
                                         i     2
for (int i = 0; i < 3; ++i) {
  System.out.println("i es " + i);
}

System.out.println(“terminamos");
                                     Output:

                                     i es 0
                                     i es 1
                                     i es 2




                                                   48
Seguimiento de la ejecución(10/12)
                                         i     3
for (int i = 0; i < 3; ++i) {
  System.out.println("i es " + i);
}

System.out.println(“terminamos");
                                     Output:

                                     i es 0
                                     i es 1
                                     i es 2




                                                   49
Seguimiento de la ejecución(11/12)
                                         i     3
for (int i = 0; i < 3; ++i) {
  System.out.println("i es " + i);
}

System.out.println(“terminamos");
                                     Output:

                                     i es 0
                                     i es 1
                                     i es 2




                                                   50
Seguimiento de la ejecución(12/12)
                                               3
for (int i = 0; i < 3; ++i) {
  System.out.println("i es " + i);
}

System.out.println(“terminamos");
                                     Output:

 Utilzar siempre i dentro del loop   i es 0
                                     i es 1
                                     i es 2
                                     terminamos




                                                   51
Mas ejemplos
   1
   1   for (int i = 0; i < 100; i += 5)

                             i i= 0, 5, 10, … ,,95
                                = 0, 5, 10, … 95



   2
   2   for (int j = 2; j < 40; j *= 2)

                             j j= 2, 4, 8, 16, 32
                                = 2, 4, 8, 16, 32




   3
   3   for (int k = 100; k > 0; k--) )

                       k = 100, 99, 98, 97, ..., 1
                        k = 100, 99, 98, 97, ..., 1


                                                      52
Factorial
    Definition:
                      1      if n = 0
           n!= 
               1 × 2 ×  × n if n ≥ 1


     int nFactorial = 1;
     for (int i = 2; i <= n; ++i) {
         nFactorial *= i;
     }




                                         53
Alcance de Variable
   Considere:

    int valorActual = 2;

    for (int i = 0; i < 5; ++i) {
        System.out.println(valorActual);
        valorActual = valorActual* 2;
    }
    System.out.println("i is " + i);


 Que muestra valor actual al final?
 Que muestra i?
                                           54
For anidados
   Es cuando utilizamos un for dentro de otro for.




                                                      55
56
Generando la Tabla
        int precio;
        for (int ancho = 11; ancho <=20, ancho++){

                for (int largo = 5, largo <=25, largo+=5){
        INNER
OUTER




                    precio = ancho * largo * 19; //$19 x metro cuadrado
                    System.out.print (" " + precio);
                }
                //finalizada una fila se va a la siguiente
                System.out.println("");
        }




                                                                   57
For anidados (1/2)
                                              i is   0
for (int i = 0; i < 3; ++i) {
                                                 j   is   0
                                                 j   is   1
    System.out.println("i is " + i);
                                                 j   is   2
                                                 j   is   3
    for (int j = 0; j < 4; ++j) {
                                              i is   1
        System.out.println("   j is " + j);
                                                 j   is   0
    }
                                                 j   is   1
                                                 j   is   2
}
                                                 j   is   3
                                              i is   2
                                                 j   is   0
                                                 j   is   1
                                                 j   is   2
                                                 j   is   3
                                                              58
For anidados (2/2)
for (int i = 0; i < 3; ++i) {

    System.out.println("i is " + i);

    for (int j = 0; j < i; ++j) {
        System.out.println("   j is " + j);
    }

}



Cual es la salida?



                                              59
Fin Clase 6




              60

Sentencias de Repeticion

  • 1.
  • 2.
    Clase 6: Sentenciasde Repetición Después de haber estudiado este capítulo usted podrá:  Implementar sentencias de repetición en su programa utilizando while, do-while y for.  Implementar sentencias de repetición utilizando: while, do-while y for.  Implementar sentencias de control genéricas  Realizar sentencias de repetición anidadas  Elegir la sentencia de repetición adecuada según el problema  Generar números aleatorios  Lograr que el usuario interactúe con la máquina en una sesión SI-NO para continuar ejecutando el programa 2
  • 3.
    Definición  Las sentencias de repetición son un bloque de código que son ejecutadas por un cierto número de veces hasta que se cumpla una condición.  Repeticiones controladas por contador: terminan la ejecución del bloque después que este ha sido ejecutado por un número de veces determinado  Repeticiones controladas por centinela: termina la ejecución del bloque después que un valor diseñado como centinela ha sido encontrado.  Las sentencias de repetición son llamadas LOOP o BUCLE. 3
  • 4.
    Sentencia while //este programarealiza la suma de los 100 primeros números int sum = 0, number = 1; while ( number <= 100 ) { sum = sum + number; Estas sentencias son Estas sentencias son ejecutadas mientras que ejecutadas mientras que la variable number sea la variable number sea number = number + 1; menor ooigual que 100 menor igual que 100 } System.out.print(“La Suma es: “ + suma); 4
  • 5.
    Sintaxis para lasentencia while while ( <expresión booleana> ) { <sentencia 1> <sentencia 1> <sentencia n> } Expresión Booleana Expresión Booleana while ( number <= 100 ) { sum = sum + number; Sentencias Sentencias (loop body) (loop body) number = number + 1; } 5
  • 6.
    Flujo de Controlwhile int sum = 0, number = 1 int sum = 0, number = 1 number = number + 1; sum = sum + number; number = number + 1; sum = sum + number; number <= 100 ? number <= 100 ? false true 6
  • 7.
    Mas Ejemplos Sigue sumando 1 1 int sum = 0, number = 1; Sigue sumando números 1, 2, 3, … números 1, 2, 3, … hasta que la variable hasta que la variable while ( sum <= 1000000 ) { sum sea mayor aa sum sea mayor 1,000,000. 1,000,000. sum = sum + number; number = number + 1; } 2 2 int producto = 1, numero = 1, Calcula el producto de Calcula el producto de contador = 20, ultimoNumero; los 20 primeros enteros los 20 primeros enteros ultimoNumero = 2 * contador - 1; while (numero <= ultimoNumero) { producto = producto * numero; numero = numero + 2; } 7
  • 8.
    Encontrando el MaximoComun Divisor public int mcdBruteforce(int m, int n) { // assume m, n >= 1 int menor = Math.min(m, n); int mcd; int i = 1; while (i <= menor) { if (m%i == 0 && n%i == 0) { mcd = i; } i++; } return mcd; } 8 Aproximación directa
  • 9.
    Encontrando el MaximoComun Divisor public int gcd(int m, int n) { // no importa si n o m // es mayor, este metodo; // trabaja bien // // assume m, n >= 1 int r = n % m; while (r != 0) { n = m; m = r; r = n % m; } return m; } 9 Solución mas eficiente
  • 10.
    Ejemplo: Probando datosde ingreso String inputStr; Primera lectura Primera lectura int edad; inputStr = JOptionPane.showInputDialog(null,“Su edad (entre 18 y 90):"); edad = Integer.parseInt(inputStr); while (edad < 18 || edad > 90) { JOptionPane.showMessageDialog(null, “Se ingreso una edad no valida. Por favor vuelva a intentarlo"); inputStr = JOptionPane.showInputDialog(null,“Su edad (entre 18 y 90):"); edad = Integer.parseInt(inputStr); } Segunda lectura Segunda lectura 10
  • 11.
    Operadores cortos utiles suma= suma + numero; Es equivalente a suma += numero; Operador Uso Significado += a += b; a = a + b; -= a -= b; a = a – b; *= a *= b; a = a * b; /= a /= b; a = a / b; %= a %= b; a = a % b; 11
  • 12.
    Tenga cuidado conlos errores 1. Cuidado con el error “por uno” 2. Asegúrese que el cuerpo del loop contiene sentencias que eventualmente harán que el loop finalice 3. Si quiere ejecutar el cuerpo del loop N veces, entonces inicialice el contador en 0 y utilice una condicion que evalue contador <N, o inicialice el contador en 1 y evalue contador <=N 12
  • 13.
    Loop Error #1- Loop Infinito Error Error 1 1 int producto = 0; Estas sentencias se Estas sentencias se ejecutaran por siempre. ejecutaran por siempre. La expresion boolena La expresion boolena while ( producto < 500000 ) { nunca será falsa. nunca será falsa. Para solucionar el Para solucionar el product = product * 5; problema producto debe problema producto debe } inicializarse en 11 inicializarse en 2 2 int contador = 1; Error Error while ( contador != 10 ) { La expresión boolena La expresión boolena nunca sera falsa. nunca sera falsa. contador = contador + 2; Para solucionar el Para solucionar el problema count debe ser problema count debe ser } inicializado en 11 inicializado en 13
  • 14.
    Loop Error #2– error por uno  Objetivo : Ejecute el cuerpo del loop 10 veces 1 1 count = 1; 2 2 count = 1; while ( count < 10 ){ while ( count <= 10 ){ . . . . . . count++; count++; } } 3 3 count = 0; 4 4 count = 0; while ( count <= 10 ){ while ( count < 10 ){ . . . . . . count++; count++; } } 1 y 1 3 exiben el error por uno. 3 14
  • 15.
    La sentencia do-while int sum = 0, number = 1; do { Estas sentencias son Estas sentencias son sum = sum + number; ejecutadas hasta que la ejecutadas hasta que la variable sum sea menor variable sum sea menor number++; ooigual que 100 igual que 100 } while ( sum <= 100 ); 15
  • 16.
    Sintaxis do-while do <sentencias> while ( <expresion booleana> ) ; do { sum = sum + number; Sentencias Sentencias number++; (loop body) (loop body) } while ( sum <= 100 ); Expresion booleana Expresion booleana 16
  • 17.
    Flujo de Controldo-while int sum = 0, number = 1 int sum = 0, number = 1 sum = sum + number sum = sum + number number++; number++; true sum <= 100 sum <= 100 false 17
  • 18.
    Bucle y Controlde Media Repetición  Bucle y Control de Media Repeticiόn puede ser utilizado para evaluar la condicion de terminacion de un bucle en medio del cuerpo del bucle.  Es implementado utilizando las palabras reservadas while, if, and break. 18
  • 19.
    Ejemplo: Bucle-y-MedioControl String name; while(true){ name = JOptionPane.showInputDialog(null, “Tu nombre"); if (name.length() > 0) break; JOptionPane.showMessageDialog(null, "Ingreso no valido." + “Debe ingresar al menos un caracter."); } 19
  • 20.
    Errores en Bucles-y-MedioControl  Ponga atenciόn en dos cosas cuando utilice Bucles-y-MedioControl:  El peligro de un bucle infinito. La expresión booleana del while es true, la cual siempre evaluará a true. Si olvidamos incluir una sentencia if para romper el bucle, terminaremos en un bucle infinito.  Multiple exit points. It is possible, although complex, to write a correct control loop with multiple exit points (breaks). It is good practice to enforce the one-entry one-exit control flow. 20
  • 21.
    Bucle: Sentencia break(1/4) int i = 1; int sum = 0; sum is 21 while (sum < 20) { sum += i; i is 7 ++i; } System.out.println("sum is " + sum); System.out.println("i is " + i); int i = 1; int sum = 0; while (sum < 20) { sum += i; sum is 6 if (sum % 2 == 0) break; i is 3 ++i; } System.out.println("sum is " + sum); System.out.println("i is " + i); 21
  • 22.
    Bucle: Sentencia break(2/4) int i = 1; int sum = 0; sum es 15 while ( true ) { sum += i; i es 5 if (sum > 10) break; Note: Sin el break, es ++i; un bucle infinito! } System.out.println("sum is " + sum); System.out.println("i is " + i); int i = 0; int sum = 0; Trate de while (sum <= 10) { evitar el uso ++i; de break, a sum += i; menos que } sea System.out.println("sum is " + sum); necesario. System.out.println("i is " + i); 22
  • 23.
    Bucle: Sentencia break(3/4) Random number = new Random(); int i; i is 43 while (true) { i is 2 i = number.nextInt(100); i is 12 System.out.println("i is " + i); i is 95 if (i >= 80) break; } Random class will be discussed later. 23
  • 24.
    Bucle: Sentencia break(4/4)  break causa que el control salga del bucle mas interno en el que esta contenido.. int a = 1; while (a < 5) { a is 1, b is 1 int b = 1; a is 1, b is 2 while (b < 5) { a is 2, b is 1 System.out.println("a is " + a a is 2, b is 2 + ", b is " + b); a is 3, b is 1 if (b == 2) break; a is 3, b is 2 ++b; a is 4, b is 1 } ++a; a is 4, b is 2 } 24
  • 25.
    Bucle: Sentencia continue(1/2)  Algunas veces podríamos querer ir inmediatamente a la siguiente iteracion, sin ejecutar el resto de las sentencias en el cuerpo del bucle.  Esto puede ser realizado utilizando continue.  Como break, continue solo causa que el control vaya a la siguiente iteracion en el bucle mas interno que lo contiene. 25
  • 26.
    Bucle: Sentencia continue(2/2) int i = 0; i is 1 i is 2 while (i <= 6) { ++i; i is 4 if (i == 3) continue; i is 5 System.out.println("i is " + i); i is 6 } i is 7 int i = 1; int sum = 0; while (sum < 20) { sum += i; sum is 23 if (sum % 2 == 0) continue; i is 6 ++i; } System.out.println("sum is " + sum); System.out.println("i is " + i); 26
  • 27.
    Random Numbers (1/2)  Random number generation is discussed in section 3.8 of your textbook.  We learn another way here, using the Random class.  Notes:  Need to import java.util.*;  Random( ): constructs a new random number generator Random whose seed is based on the current time.  int nextInt(int n): returns the next pseudo-random, from the interval [0, 1, … n-1], uniformly distributed value of a Random object.  Refer to the API specification for the complete description of class Random. 27
  • 28.
    Random Numbers (2/2) importjava.util.*; public class Random1 { public static void main(String[] args) { Random num = new Random(); for (int i=0; i<5; i++) { System.out.println("Next random number is " + num.nextInt(100)); } } Next random number is 48 } Next random number is 14 Next random number is 89 Next random number is 7 Next random number is 44 28
  • 29.
    Diálogo de Confirmación  dialogo de confirmación puede ser utilizado para que el usuario elija si quiere seguir con la ejecución del programa o no. JOptionPane.showConfirmDialog(null, /*prompt*/ "Play Another Game?", /*dialog title*/ "Confirmation", /*button options*/ JOptionPane.YES_NO_OPTION); 29
  • 30.
    Ejemplo: Diálogo deConfirmación boolean sigaJugando = true; int seleccion; while (sigaJugando){ //codigo que realiza un juego viene aqui // . . . seleccion = JOptionPane.showConfirmDialog(null, “Quiere volver a jugar?", "Confirmacion", JOptionPane.YES_NO_OPTION); sigaJugando = (seleccion == JOptionPane.YES_OPTION); } 30
  • 31.
  • 32.
    Considere el siguientecódigo int i = 1; while (i <= n) { if (i % n == 0) { ++i; } } System.out.println(i); (a) Cual es la salida si n es 0? (b) Cual es la salida si n es 1? (c) Cual es la salida si n es 3? 32
  • 33.
    Que retorna elsiguiente método, asumiendo que n es 12345? public static int metodoX(int n) { int sum = 0; while (n > 0) { sum += n % 100; n /= 100; } return sum; } A. 9 B. 15 C. 69 D. 123 E. 168 33
  • 34.
    La sentencia for int i, sum = 0, number; for (i = 0; i < 20; i++) { number = scanner.nextInt( ); sum = sum + number; } Estas sentencias son Estas sentencias son ejecutadas 20 veces ejecutadas 20 veces ((i i= 0, 1, 2, … , ,19). = 0, 1, 2, … 19). Utilizamos for cuando sabemos cuantas veces se va a realizar la repetición 34
  • 35.
    Syntax sentencia for for( <inicializacion>; <expresion booleana>; <incremento> ){ <sentencias> } Expresión Expresión Inicializacion Inicializacion Incremento Incremento Booleana Booleana for ( i = 0 ; i < 20 ; i++ ) { number = scanner.nextInt(); Sentencias Sentencias sum = sum + number; (loop body) (loop body) } 35
  • 36.
    false true i i= 0; = 0; i i< 20 ? < 20 ? ber = ber = . .. .. .; ; = sum + number; Control Flow of for = sum + number; ++; i i++; 36
  • 37.
    i++ or ++i? for( i = 0; i < 20; i++ ) { ... } Alguna diferencia? for ( i = 0; i < 20; ++i ) { ... Aqui es lo mismo… } Solo cuando es parte de una expresion..si son diferentes 37
  • 38.
    Compare for ywhile for ( Init ; Expression ; Increment ) Action Init Si realmente odian utilizar WHILE por alguna razon…. while ( Expression ) pueden reescribirla { Action Increment } 38
  • 39.
    Sentencia while //este programa realiza la suma de los 100 primeros numeros int sum = 0, number = 1; while ( number <= 100 ) { sum = sum + number; number = number + 1; } 39
  • 40.
    Seguimiento de laejecución (1/12) i 0 for (int i = 0; i < 3; ++i) { System.out.println("i es " + i); } System.out.println(“terminamos"); 40
  • 41.
    Seguimiento de laejecución(2/12) i 0 for (int i = 0; i < 3; ++i) { System.out.println("i es " + i); } System.out.println(“terminamos"); 41
  • 42.
    Seguimiento de laejecución(3/12) i 0 for (int i = 0; i < 3; ++i) { System.out.println("i es " + i); } System.out.println(“terminamos"); Output: i es 0 42
  • 43.
    Seguimiento de laejecución(4/12) i 1 for (int i = 0; i < 3; ++i) { System.out.println("i es " + i); } System.out.println(“terminamos"); Output: i es 0 43
  • 44.
    Seguimiento de laejecución(5/12) i 1 for (int i = 0; i < 3; ++i) { System.out.println("i es " + i); } System.out.println(“terminamos"); Output: i es 0 44
  • 45.
    Seguimiento de laejecución(6/12) i 1 for (int i = 0; i < 3; ++i) { System.out.println("i es " + i); } System.out.println(“terminamo"); Output: i es 0 i es 1 45
  • 46.
    Seguimiento de laejecución(7/12) i 2 for (int i = 0; i < 3; ++i) { System.out.println("i es " + i); } System.out.println(“terminamos"); Output: i es 0 i es 1 46
  • 47.
    Seguimiento de laejecución(8/12) i 2 for (int i = 0; i < 3; ++i) { System.out.println("i es " + i); } System.out.println(“terminamos"); Output: i es 0 i es 1 47
  • 48.
    Seguimiento de laejecución(9/12) i 2 for (int i = 0; i < 3; ++i) { System.out.println("i es " + i); } System.out.println(“terminamos"); Output: i es 0 i es 1 i es 2 48
  • 49.
    Seguimiento de laejecución(10/12) i 3 for (int i = 0; i < 3; ++i) { System.out.println("i es " + i); } System.out.println(“terminamos"); Output: i es 0 i es 1 i es 2 49
  • 50.
    Seguimiento de laejecución(11/12) i 3 for (int i = 0; i < 3; ++i) { System.out.println("i es " + i); } System.out.println(“terminamos"); Output: i es 0 i es 1 i es 2 50
  • 51.
    Seguimiento de laejecución(12/12) 3 for (int i = 0; i < 3; ++i) { System.out.println("i es " + i); } System.out.println(“terminamos"); Output: Utilzar siempre i dentro del loop i es 0 i es 1 i es 2 terminamos 51
  • 52.
    Mas ejemplos 1 1 for (int i = 0; i < 100; i += 5) i i= 0, 5, 10, … ,,95 = 0, 5, 10, … 95 2 2 for (int j = 2; j < 40; j *= 2) j j= 2, 4, 8, 16, 32 = 2, 4, 8, 16, 32 3 3 for (int k = 100; k > 0; k--) ) k = 100, 99, 98, 97, ..., 1 k = 100, 99, 98, 97, ..., 1 52
  • 53.
    Factorial  Definition:  1 if n = 0 n!=  1 × 2 ×  × n if n ≥ 1 int nFactorial = 1; for (int i = 2; i <= n; ++i) { nFactorial *= i; } 53
  • 54.
    Alcance de Variable  Considere: int valorActual = 2; for (int i = 0; i < 5; ++i) { System.out.println(valorActual); valorActual = valorActual* 2; } System.out.println("i is " + i);  Que muestra valor actual al final?  Que muestra i? 54
  • 55.
    For anidados  Es cuando utilizamos un for dentro de otro for. 55
  • 56.
  • 57.
    Generando la Tabla int precio; for (int ancho = 11; ancho <=20, ancho++){ for (int largo = 5, largo <=25, largo+=5){ INNER OUTER precio = ancho * largo * 19; //$19 x metro cuadrado System.out.print (" " + precio); } //finalizada una fila se va a la siguiente System.out.println(""); } 57
  • 58.
    For anidados (1/2) i is 0 for (int i = 0; i < 3; ++i) { j is 0 j is 1 System.out.println("i is " + i); j is 2 j is 3 for (int j = 0; j < 4; ++j) { i is 1 System.out.println(" j is " + j); j is 0 } j is 1 j is 2 } j is 3 i is 2 j is 0 j is 1 j is 2 j is 3 58
  • 59.
    For anidados (2/2) for(int i = 0; i < 3; ++i) { System.out.println("i is " + i); for (int j = 0; j < i; ++j) { System.out.println(" j is " + j); } } Cual es la salida? 59
  • 60.

Notas del editor

  • #2 CS1101X Programming Methodology
  • #3 CS1101X Programming Methodology
  • #4 CS1101X Programming Methodology
  • #5 CS1101X Programming Methodology
  • #6 CS1101X Programming Methodology
  • #7 CS1101X Programming Methodology
  • #8 CS1101X Programming Methodology
  • #9 CS1101X Programming Methodology
  • #11 CS1101X Programming Methodology
  • #12 CS1101X Programming Methodology
  • #13 CS1101X Programming Methodology
  • #14 CS1101X Programming Methodology
  • #15 CS1101X Programming Methodology
  • #16 CS1101X Programming Methodology
  • #17 CS1101X Programming Methodology
  • #18 CS1101X Programming Methodology
  • #30 CS1101X Programming Methodology
  • #31 CS1101X Programming Methodology
  • #35 CS1101X Programming Methodology
  • #36 CS1101X Programming Methodology
  • #37 CS1101X Programming Methodology
  • #38 CS1101X Programming Methodology
  • #39 CS1101X Programming Methodology
  • #40 CS1101X Programming Methodology
  • #41 CS1101X Programming Methodology
  • #42 CS1101X Programming Methodology
  • #43 CS1101X Programming Methodology
  • #44 CS1101X Programming Methodology
  • #45 CS1101X Programming Methodology
  • #46 CS1101X Programming Methodology
  • #47 CS1101X Programming Methodology
  • #48 CS1101X Programming Methodology
  • #49 CS1101X Programming Methodology
  • #50 CS1101X Programming Methodology
  • #51 CS1101X Programming Methodology
  • #52 CS1101X Programming Methodology
  • #53 CS1101X Programming Methodology
  • #54 CS1101X Programming Methodology
  • #55 CS1101X Programming Methodology
  • #56 CS1101X Programming Methodology
  • #57 CS1101X Programming Methodology
  • #58 CS1101X Programming Methodology
  • #59 CS1101X Programming Methodology
  • #60 CS1101X Programming Methodology
  • #61 CS1101X Programming Methodology