{"id":1620,"date":"2018-02-01T10:59:43","date_gmt":"2018-02-01T15:59:43","guid":{"rendered":"https:\/\/manualjavaoracle.wordpress.com\/?p=1620"},"modified":"2018-02-09T13:41:08","modified_gmt":"2018-02-09T18:41:08","slug":"sentencia-for","status":"publish","type":"post","link":"https:\/\/www.manualjava.net\/?p=1620","title":{"rendered":"Sentencia &#8211; for"},"content":{"rendered":"<p><img decoding=\"async\" loading=\"lazy\" class=\"wp-image-1630 alignnone\" src=\"https:\/\/www.manualjava.net\/wp-content\/uploads\/2018\/02\/java18.jpg\" alt=\"\" width=\"268\" height=\"116\" \/><\/p>\n<p><span style=\"color: #000000;\">El bucle for es es un bucle para ejecutar un bloque de sentencias un n\u00famero fijo de veces. El bucle for se diferencia del bucle while en que las operaciones o condiciones de control del bucle se sit\u00faan en un solo sitio: la cabecera de la sentencia. Por consiguiente, el bucle for es una sentencia iterativa que normalmente se utiliza con una variable de que se incrementa o decrementa.\u00a0<\/span><!--more--><\/p>\n<h2><span style=\"color: #000000;\"><strong>Sintaxis<\/strong><\/span><\/h2>\n<ul>\n<li><span style=\"color: #000000;\"> for(Inicializaci\u00f3n;Condici\u00f3n;Incremento)<br \/>\n<\/span>\u00a0 \u00a0<span style=\"color: #000000;\"> \u00a0sentencia<\/span><\/li>\n<li><span style=\"color: #000000;\">for(Inicializaci\u00f3n;Condici\u00f3n;Incremento)<\/span><br \/>\n<span style=\"color: #000000;\"> {<\/span><br \/>\n<span style=\"color: #000000;\">\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 sentencia_1<\/span><br \/>\n<span style=\"color: #000000;\">\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 sentencia_2<\/span><br \/>\n<span style=\"color: #000000;\">\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 sentencia_n<\/span><br \/>\n<span style=\"color: #000000;\"> }<\/span><\/li>\n<\/ul>\n<p><span style=\"color: #000000;\">El bucle for contiene las cuatro partes siguientes:<\/span><\/p>\n<ul>\n<li><span style=\"color: #000000;\"><strong>Parte de inicializaci\u00f3n,\u00a0<\/strong>que inicializa las variables de control del bucle.<\/span><\/li>\n<li><span style=\"color: #000000;\"><strong>Parte de condici\u00f3n,\u00a0<\/strong><span style=\"color: #000000;\">que contiene una expresi\u00f3n l\u00f3gica que hace que el bucle realice las iteraciones o ciclos de las sentencias, mientras que la expresi\u00f3n sea verdadera.<\/span><\/span><\/li>\n<li><strong><span style=\"color: #000000;\">Parte de incremento,\u00a0<\/span><\/strong><span style=\"color: #000000;\">que incrementa o decrementa la variable o variables de control del bucle.<\/span><\/li>\n<li><strong><span style=\"color: #000000;\">Sentencias,\u00a0<\/span><\/strong><span style=\"color: #000000;\">acciones o instrucciones que se ejecutar\u00e1n por cada iteraci\u00f3n del bucle.<\/span><\/li>\n<\/ul>\n<h2><span style=\"color: #000000;\"><strong>Precauciones en el uso de for<\/strong><\/span><\/h2>\n<p><span style=\"color: #000000;\">Un bucle for se debe construir con gran precauci\u00f3n, asegur\u00e1ndose que la expresi\u00f3n de incializaci\u00f3n, la condici\u00f3n del bucle y la expresi\u00f3n de incremento har\u00e1n que la condici\u00f3n del mismo se convierta en falso en alg\u00fan momento. En particular \u00absi el bloque de sentencias de un bucle de conteo modifica los valores de cualquier variable implicada en la condici\u00f3n del bucle, entonces el n\u00famero de repeticiones o iteraciones se puede modificar\u00bb.<\/span><\/p>\n<h3><span style=\"color: #000000;\"><strong>Ejemplo<\/strong><\/span><\/h3>\n<p><span style=\"color: #000000;\">\u00a0 \u00a0 \u00a0 \u00a0for(int i=0;i&gt;=0;i++){<\/span><br \/>\n<span style=\"color: #000000;\">\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0System.out.println(i);<\/span><br \/>\n<span style=\"color: #000000;\">\u00a0 \u00a0 \u00a0 \u00a0}<\/span><\/p>\n<p><span style=\"color: #000000;\">Observemos que produce una secuencia infinita de enteros (puede terminar si el compilador tiene constantes MAX_VALUE, con m\u00e1ximos valores enteros, entonces la ejecuci\u00f3n terminar\u00e1 cuando i sea MAX_VALUE), ya que a cada iteraci\u00f3n, la variable i++ incrementa i en 1. A consecuencia de ello, la condici\u00f3n del bucle i&gt;=0 siempre es cierta.<\/span><\/p>\n<h2><span style=\"color: #000000;\"><strong>Bucles infinitos<\/strong><\/span><\/h2>\n<p><span style=\"color: #000000;\">El uso principal de un bucle for es implementar bucles de conteo en el que el n\u00famero de repeticiones se conoce por anticipado. Por ejemplo, la suma de enteros de 1 a n. Sin embargo, existen muchos problemas en los que el n\u00famero de repeticiones no se puede determinar por anticipado. Para estas situaciones algunos lenguajes cl\u00e1sicos tienen sentencias espec\u00edficas\u00a0<span style=\"color: #000000;\">LOOP de\u00a0<strong>Modula-2\u00a0<\/strong>y\u00a0<strong>Modula-3,\u00a0<\/strong>el bucle DO de\u00a0<strong>FORTRAN 90\u00a0<\/strong>o el bucle loop de\u00a0<strong>Ada.\u00a0<\/strong>Java no soporta una sentencia que realice esa tarea, pero existen una variante de la sintaxis de for que permite implementar bucles infinitos que son aquellos bucles que, en principio, no tienen fin.<\/span><\/span><\/p>\n<h3><span style=\"color: #000000;\"><strong>Sintaxis<\/strong><\/span><\/h3>\n<p><span style=\"color: #000000;\">\u00a0 \u00a0 \u00a0 \u00a0for(;;)<\/span><br \/>\n<span style=\"color: #000000;\"> \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 sentencia;<\/span><\/p>\n<p><span style=\"color: #000000;\"> La sentencia se ejecuta indefinidamente y menos que se utilice una sentencia <strong>return<\/strong> o <strong>break\u00a0<\/strong>(normalmente una combinaci\u00f3n if-break o if-return).<\/span><\/p>\n<p><span style=\"color: #000000;\">La raz\u00f3n de que el bucle se ejecute indefinidamente es que se ha eliminado la expresi\u00f3n de inicializaci\u00f3n, la condici\u00f3n del bucle y la expresi\u00f3n de incremento; al no existir una condici\u00f3n de bucle que especifique cu\u00e1l es la condici\u00f3n para terminar la repetici\u00f3n o iteraci\u00f3n de sentencias, supone que la condici\u00f3n es verdadera y \u00e9stas se ejecutar\u00e1n indefinidamente. Por ejemplo:<\/span><\/p>\n<p><span style=\"color: #000000;\">\u00a0 \u00a0 \u00a0 \u00a0for(;;)<\/span><br \/>\n<span style=\"color: #000000;\"> \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 System.out.println(\u00abHola mundo\u00bb);<\/span><\/p>\n<p><span style=\"color: #000000;\">producir\u00e1 la salida:<\/span><\/p>\n<p><span style=\"color: #000000;\">\u00a0 \u00a0 \u00a0 Hola mundo<\/span><br \/>\n<span style=\"color: #000000;\"> \u00a0 \u00a0 \u00a0 Hola mundo<\/span><br \/>\n<span style=\"color: #000000;\"> \u00a0 \u00a0 \u00a0 .<\/span><br \/>\n<span style=\"color: #000000;\"> \u00a0 \u00a0 \u00a0 .<\/span><br \/>\n<span style=\"color: #000000;\"> \u00a0 \u00a0 \u00a0 .<\/span><\/p>\n<p><span style=\"color: #000000;\">un n\u00famero ilimitado de veces, a menos que el usuario interrumpa la ejecuci\u00f3n (normalmente el usuario lo hace manualmente).<\/span><\/p>\n<p><span style=\"color: #000000;\">Para evitar esta situaci\u00f3n, se requiere el dise\u00f1o del bucle for de la forma siguiente:<\/span><\/p>\n<ol>\n<li><span style=\"color: #000000;\">El bloque del bucle ha de contener todas las sentencias que se desean ejecutar repetidamente.<\/span><\/li>\n<li><span style=\"color: #000000;\">Una sentencia terminar\u00e1 la ejecuci\u00f3n del bucle cuando se cumpla una determinada condici\u00f3n.<\/span><\/li>\n<\/ol>\n<p><span style=\"color: #000000;\">La sentencia de terminaci\u00f3n suele ser if-break con la sintaxis:<\/span><\/p>\n<p><span style=\"color: #000000;\">\u00a0 \u00a0 \u00a0\u00a0if(condici\u00f3n) break;<\/span><br \/>\n<span style=\"color: #000000;\">\u00a0 \u00a0 \u00a0 <strong>condici\u00f3n\u00a0<\/strong> \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \/\/ es una expresi\u00f3n l\u00f3gica<\/span><br \/>\n<span style=\"color: #000000;\">\u00a0 \u00a0 \u00a0<strong> break\u00a0<\/strong> \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \/\/ termina la ejecuci\u00f3n del bucle y transfiere<\/span><br \/>\n<span style=\"color: #000000;\">\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0el control a la sentencia siguiente al bucle<\/span><br \/>\n<span style=\"color: #000000;\"> y la sintaxis completa:<\/span><\/p>\n<p><span style=\"color: #000000;\">\u00a0 \u00a0 \u00a0\u00a0for(;;){\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0\/\/ inicio del bucle<\/span><br \/>\n<span style=\"color: #000000;\">\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0sentencia_1<\/span><br \/>\n<span style=\"color: #000000;\">\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0if(condici\u00f3n) break;<\/span><br \/>\n<span style=\"color: #000000;\">\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0sentencia_2<\/span><br \/>\n<span style=\"color: #000000;\">\u00a0 \u00a0 \u00a0 }\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0\/\/ fin del bucle<\/span><br \/>\n<span style=\"color: #000000;\">\u00a0 \u00a0 \u00a0 sentencia_n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 puede ser vac\u00eda, simple o compuesta<\/span><\/p>\n<h3><span style=\"color: #000000;\"><strong>Ejemplo<\/strong><\/span><\/h3>\n<p><span style=\"color: #000000;\">\u00a0 \u00a0 \u00a0 \u00a0 \/\/ Bucle infinito, termina al ingresar -999<\/span><br \/>\n<span style=\"color: #000000;\">\u00a0 \u00a0 \u00a0 \u00a0 final int CLAVE = -999;\u00a0 \u00a0 \u00a0 \u00a0 \/\/ constante<\/span><br \/>\n<span style=\"color: #000000;\">\u00a0 \u00a0 \u00a0 \u00a0 for(;;){<\/span><br \/>\n<span style=\"color: #000000;\">\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 System.out.print(\u00abIngresar numero: \u00ab);<\/span><br \/>\n<span style=\"color: #000000;\">\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 int numero = entrada.nextInt();<\/span><br \/>\n<span style=\"color: #000000;\">\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 if(numero==CLAVE) break;<\/span><br \/>\n<span style=\"color: #000000;\">\u00a0 \u00a0 \u00a0 \u00a0 }<\/span><\/p>\n<h2><span style=\"color: #000000;\"><strong>Los bucles for vac\u00edos<\/strong><\/span><\/h2>\n<p><span style=\"color: #000000;\">Tenga cuidado de no situar un punto y coma despu\u00e9s del par\u00e9ntesis inicial del bucle for. Es decir, el bucle<\/span><\/p>\n<p><span style=\"color: #000000;\">\u00a0 \u00a0 \u00a0 \u00a0 for(int i=1;i&lt;=10;i++);\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 <strong>\u00a0problema<\/strong><br \/>\n<\/span>\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 <span style=\"color: #000000;\">\u00a0 System.out.println(\u00abBetty Rodriguez\u00bb);<\/span><\/p>\n<p><span style=\"color: #000000;\">no se ejecuta correctamente, ni se visualiza el nombre \u00abBetty Rodriguez\u00bb 10 veces como era de esperar, ni se produce un mensaje de error por parte del compilador. En realidad lo que sucede es que se visualiza una vez el nombre \u00abBetty Rodriguez\u00bb, ya que la sentencia for es una sentencia vac\u00eda al terminar con un punto y coma (;). Sucede que la sentencia for no hace absolutamente nada durante 10 iteraciones y, por lo tanto, despu\u00e9s de que el bucle for haya terminado, se ejecuta la siguiente sentencia\u00a0\u00a0System.out.println y se escribe \u00abBetty Rodriguez\u00bb.<\/span><\/p>\n<h3><span style=\"color: #000000;\"><strong>A recordar<\/strong><\/span><\/h3>\n<p><span style=\"color: #000000;\">El bucle for con bloques vac\u00edos puede tener algunas aplicaciones, especialmente cuando se requieren ralentizaciones o temporizaciones.<\/span><\/p>\n<h2><span style=\"color: #000000;\"><strong>Sentencias nulas en bucles for<\/strong><\/span><\/h2>\n<p><span style=\"color: #000000;\">Cualquiera\u00a0 o todas las expresiones de un bucle for pueden ser nulas. Para ejecutar esta acci\u00f3n, se utiliza el punto y coma (;) para marcar la expresi\u00f3n vac\u00eda. Si se desea crear un bucle for que act\u00fae exactamente como un bucle while, se deben incluir las primeras y terceras expresiones vac\u00edas. El siguiente programa contiene un bucle for con la expresi\u00f3n de inicializaci\u00f3n y de incremento vac\u00edas.<\/span><\/p>\n<p><span style=\"color: #000000;\">\u00a0 \u00a0 \u00a0 \u00a0\u00a0int contador=0;<\/span><br \/>\n<span style=\"color: #000000;\">\u00a0 \u00a0 \u00a0 \u00a0 for(;contador&lt;5;){<\/span><br \/>\n<span style=\"color: #000000;\">\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0contador++;<\/span><br \/>\n<span style=\"color: #000000;\">\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0System.out.println(\u00ab\u00a1Bucle!\u00bb);<\/span><br \/>\n<span style=\"color: #000000;\">\u00a0 \u00a0 \u00a0 \u00a0 }<\/span><br \/>\n<span style=\"color: #000000;\">\u00a0 \u00a0 \u00a0 \u00a0 System.out.println(\u00abContador: \u00bb + contador);<\/span><\/p>\n<p><span style=\"color: #000000;\">La sentencia for no inicializa ning\u00fan valor, pero incluye una prueba de contador&lt;5. No existe ninguna sentencia de incremento, de modo que el bucle se comporta exactamente como la sentencia siguiente:<\/span><\/p>\n<p><span style=\"color: #000000;\">\u00a0 \u00a0 \u00a0 \u00a0\u00a0int contador=0;<\/span><br \/>\n<span style=\"color: #000000;\">\u00a0 \u00a0 \u00a0 \u00a0 while(contador&lt;5)<\/span><br \/>\n<span style=\"color: #000000;\">\u00a0 \u00a0 \u00a0 \u00a0 {<\/span><br \/>\n<span style=\"color: #000000;\">\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 contador++;<\/span><br \/>\n<span style=\"color: #000000;\">\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 System.out.println(\u00ab\u00a1Bucle!\u00bb);<\/span><br \/>\n<span style=\"color: #000000;\">\u00a0 \u00a0 \u00a0 \u00a0 }<\/span><\/p>\n","protected":false},"excerpt":{"rendered":"<p>El bucle for es es un bucle para ejecutar un bloque de sentencias un n\u00famero fijo de veces. El bucle for se diferencia del bucle while en que las operaciones o condiciones de control del bucle se sit\u00faan en un solo sitio: la cabecera de la sentencia. Por consiguiente, el bucle for es una sentencia &hellip; <\/p>\n<p><a class=\"more-link btn\" href=\"https:\/\/www.manualjava.net\/?p=1620\">Seguir leyendo<\/a><\/p>\n","protected":false},"author":1,"featured_media":1630,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[6],"tags":[],"_links":{"self":[{"href":"https:\/\/www.manualjava.net\/index.php?rest_route=\/wp\/v2\/posts\/1620"}],"collection":[{"href":"https:\/\/www.manualjava.net\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.manualjava.net\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.manualjava.net\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.manualjava.net\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=1620"}],"version-history":[{"count":2,"href":"https:\/\/www.manualjava.net\/index.php?rest_route=\/wp\/v2\/posts\/1620\/revisions"}],"predecessor-version":[{"id":2098,"href":"https:\/\/www.manualjava.net\/index.php?rest_route=\/wp\/v2\/posts\/1620\/revisions\/2098"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.manualjava.net\/index.php?rest_route=\/wp\/v2\/media\/1630"}],"wp:attachment":[{"href":"https:\/\/www.manualjava.net\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=1620"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.manualjava.net\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=1620"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.manualjava.net\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=1620"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}