Вы находитесь на странице: 1из 16

Java Notes.

Estas notas de programacin Java se escriben en rellenar los temas faltantes o dbiles en los textos que he enseados. Muchas pginas son tiles como referencia, pero no como un tutorial ordenado. Algunas pginas son todava borradores, pero poco a poco estoy trabajando en la fijacin de ellos. notas-java-2007-04-25.zip [2.4 MB]. Java Bsico. He empezado a escribir un tutorial ms coherente llamado Java Bsico. Adems de las clases, existe tambin el comentario que explica por qu se hacen las cosas como estn. JavaBasics-2007-04-25.zip [0,4 MB]. Copyleft - Notas de Java es propiedad de la licencia MIT muy permisivo, a menos que se indique lo contrario (por ejemplo, algunas imgenes GPL). opyright - Fundamentos de Java, que tiene ms trabajo puesto en l, tiene un derecho de autor tradicional, pero permite el uso educativo libre. Dominio Pblico - Todo el cdigo fuente de los ejemplos de ambas notas Java y Java Bsico se encuentra en el dominio pblico para que pueda utilizarlos. si Statement - Informacin general Propsito El propsito de la sentencia if es tomar decisiones y ejecutar las diferentes partes del programa en funcin de un valor booleano verdadero / falso. Alrededor del 99% de las decisiones de flujo se hacen con si. [El otro 1% de las decisiones de utilizar la sentencia switch.] Formas generales La declaracin si tiene esta forma, donde la condicin es verdadera o falsa. ... / / Hacer estas declaraciones antes. if (condicin) { ... / / Es esta clusula si la condicin es verdadera. } ... / / Hacer estas declaraciones despus. o ... / / Hacer estas declaraciones antes. if (condicin) { ... / / Es esta clusula si la condicin es verdadera } Else { ... / / Es esta clusula si la condicin es falsa } ... / / Hacer estas declaraciones despus. Ejemplo - EvaluateScore.java Esto muestra uno de dos mensajes, en funcin de un valor de entrada. 1 2 3 4 23 // hasta el 23 / / Descripcin: Evaluar la calificacin de la prueba. Ilustra if. / / File: si / EvalScore.java / / Autor: Fred Swartz - 04/09/2007 - Situado en el dominio pblico. importar javax.swing *.;

pblico EvalScore clase { public static void main (String [] args) {/ / ... Entrada de una partitura. Cadena scoreStr = JOptionPane.showInputDialog (null, "Ingresa tu puntuacin?"); int resultado = Integer.parseInt (scoreStr); / / ... Crear un mensaje. Comentario String; / / Mensaje para el usuario. if (puntuacin> = 60) { comment = "No est tan mal"; } Else { comment = "Esto es terrible"; } / / ... Genere el mensaje. JOptionPane.showMessageDialog (null, comentario); } } Diagrama de flujo de la representacin si la declaracin El flujo de ejecucin de un programa a veces se representa mediante un diagrama de flujo. Los diagramas de flujo son a veces una buena manera de describir el flujo de un mtodo, especialmente si se pone complejo. Ellos pueden ser tiles en la documentacin del usuario, pero la mayora de diagramas de flujo se realiza en dibujos rpidos, que se tiran una vez que el programa est escrito. Decisiones (if) se escriben en diamantes, y los procesos de clculo se escriben en cajas. Hay varios estilos, y aqu est uno de los ms comunes. Formas alternativas de escribir lo anterior if Hay un montn de maneras de escribir lo anterior sentencia if. Aqu estn algunos. Revertir la condicin. Qu poner en primer lugar? Hay dos prcticas: o poner el caso normal en primer lugar, o el caso que hace ms fcil la condicin booleana para leer. Comentario String; / / Mensaje para el usuario. if (puntuacin <60) { comment = "Esto es terrible"; } Else { comment = "No est tan mal"; } Inicialice la variable a un valor predeterminado, y slo cambiar si es necesario. Esto se utiliza a menudo cuando la condicin es verdadera slo en raras ocasiones. Comentario String = "No es tan malo, / / Mensaje para el usuario. if (puntuacin <60) { comment = "Esto es terrible"; } Lo malo: ifs dos. Esto es casi siempre una mala manera de escribir un if-else. Es confuso para leer, los valores pueden deslizarse a travs de fronteras, y las dos condiciones deben ser evaluados (ineficiencia). / / MALO MALO MALO MALO MALO MALO MALO MALO MALO

Comentario String; / / Mensaje para el usuario. if (puntuacin <60) { comment = "Esto es terrible"; } if (puntuacin> = 60) { comment = "No est tan mal"; } Brace estilo Siempre escriba llaves. Es buen estilo de programacin para escribir siempre las llaves, {}, altho que no son necesarios si la clusula contiene una nica instruccin. Hay dos razones por esto es bueno. Confiabilidad. Cuando el cdigo es modificado, la sangra es un fuerte indicador de estructura que el programador no puede notar que la adicin de un comunicado en el nivel "correcto" sangra verdad es que no est incluido en el alcance de la sentencia if. Este es un error sorprendentemente comn. Legibilidad. Es ms rpido para leer el cdigo con las llaves porque el lector no tiene por qu tener en cuenta si se trata de una declaracin de la ONU-apoyado nico o un bloque reforzado. Historia. Braces se han utilizado en ms idiomas que descienden de Algol, incluyendo C, C + +, Java, C # etc porque los diseadores del lenguaje queremos que sea fcil para los programadores de lenguajes anteriores para hacer la transicin. Braces son un idioma molesto y propenso a errores, y numerosos, por ejemplo, Visual Basic y Python, han tratado de elegir mejor notacin. No ms 'Requerido 'else' no se requiere No es necesario disponer de la parte else de una sentencia if. Tal vez slo el 50% de las veces no es una parte ms. formulario La sentencia if sin ms tiene esta forma: if (condicin) { hacer esto si la condicin es verdadera } ejemplo He aqu un mtodo paintComponent () con una sentencia if sin una clusula else. public void paintComponent (Graphics g) { super.paintComponent (g) / / drenaje fondo, etc if (marcas <50) { g.setColor (Color.red); } g.drawString ("Resultado =" + marks, 10, 50); } Cuando el mtodo paintComponent () comienza, el contexto Graphics g Color.black utiliza de forma predeterminada. Por lo tanto no hay necesidad de fijar el color a negro. Braces son de su amigo Llaves {} no necesarios para una declaracin (pero que siempre es bueno) Si la clusula de verdadero o falso de una sentencia if tiene una sola declaracin, no es necesario utilizar llaves (tambin llamado "llaves"). Este estilo braceless es peligroso, y la mayora de las guas de estilo siempre recomendamos su uso. Forma braceless

La. Sentencia if no necesita tirantes si slo hay una declaracin en una parte Aqu tanto las partes verdaderas y falsas tienen una sola frase: / / Legal, pero peligroso. if (condicin) Exactamente una declaracin que se ejecutarn si la condicin es verdadera ms Exactamente una declaracin que se ejecutarn si la condicin es falsa Los ejemplos que muestran lo que puede salir mal Un ejemplo escrito con tirantes. / / ... Buen estilo - sangrado con tirantes. Cadena comment = "No est tan mal."; if (marcas <60) { comment = "Esto es terrible."; } System.out.println (comentario); Sin tirantes sigue siendo correcta, pero no es seguro como. / / ... Menos buen estilo - sangra pero sin tirantes. Cadena comment = "No est tan mal."; if (marcas <60) comment = "Esto es terrible."; System.out.println (comentario); Qu puede salir mal? Q1: Qu significa esta "legal" para imprimir versin? / / ... Qu hace esta impresin? Cadena comment = "No est tan mal."; if (marcas <60); comment = "Esto es terrible."; System.out.println (comentario); R: siempre imprime "Esto es terrible", debido a que semicolo despus de la clusula if. El punto y coma indica una declaracin vaca, lo que satisface el compilador, pero seguramente no es lo que pretende. Poner una llave de inicio despus de que la condicin impide que si los programadores tambin aadir un punto y coma y la creacin de este tipo de error. P2: Qu hay de malo en esto? As que el programa est funcionando bien sin las llaves y decide aadir una calificacin. El compilador es muy feliz con esto, pero no lo ser. Por qu? / / ... Qu hace esta impresin? Cadena comment = "No est tan mal."; Cadena de grado = "A"; if (marcas <60) comment = "Esto es terrible."; grado = "F"; System.out.println ("La nota es de" grado +); System.out.println (comentario);

R: Aunque el comentario ser apropiado para la calificacin, la calificacin ser siempre "F". Aunque la asignacin de segundo grado se sangra, no se encuentra dentro del caso debido a que la clusula no arriostrada slo incluye una declaracin! Esta apariencia de ser incluido es una fuente importante de errores de programacin. Otras construcciones de Java utilizan llaves Hay varios tipos de sentencias Java que utilizan llaves para agrupar cosas. Ya has visto la clase y el mtodo (por ejemplo, principal) declaraciones, que encierran sus contenidos entre llaves. Adems de ifs, usted aprender acerca de los bucles (for, while y do), try ... catch, y sentencias switch que usar llaves para encerrar otras declaraciones. 'if' - Sangra Sangra para que los programas legible Hay meathods varios programas para hacer legible. Cmo se puede fcilmente hacer que el lector vea que los estados estn dentro de la parte real y en parte falsa de una sentencia if. La mejor manera de mostrar esto es para sangrar los estados que estn dentro. Para ello, mueva las declaraciones a la derecha por unos pocos espacios. La gente comnmente utilizan dos, tres, o cuatro espacios. Elija un nmero (por ejemplo, yo uso 2 o 3), y lo utilizan para todos los programas. Java no se preocupa por su sangra - es para los seres humanos (incluido usted mismo!). Ejemplo 1 - Sin sangra - BAD BAD BAD Este es el mtodo paintComponent () desde una pgina anterior sin sangra. Esto es pequeo, as que es fcil ver por qu estados se encuentran en las partes verdaderas y falsas. Si la sentencia si es mucho mayor, ser ilegible sin sangra. public void paintComponent (Graphics g) { super.paintComponent (g); if (marcas <50) g.setColor (Color.red); ms g.setColor (Color.black); g.drawString ("Resultado =" + marks, 10, 50); } Ejemplo 2 - Sin sangra y sin saltos de lnea Incluso un mtodo muy corta es casi ilegible cuando usted toma los saltos de lnea y espacios. Este es el mismo mtodo: public void paintComponent (Graphics g) {super.paintComponent (g), si (marcas <50) g.setColor (Color.red); ms g.setColor (Color.black); g.drawString ("Resultado =" + marks , 10,50);} if '- si dentro de si si dentro de si Usted puede poner una sentencia if dentro de otro if. Ms cercano 'else' Si utiliza tirantes, no hay ningn problema en decidir qu otra cosa va con el que si, por ejemplo, if (edad <24) { if (altura> 200) { c = Color.RED; } } Else { c = Color.BLUE; }

Debido a que las partes verdaderas y falsas declaraciones son a la vez simples, usted puede estar tentado a omitir llaves y escribir: if (edad <24) if (altura> 200) c = Color.RED; else / / PELIGRO: que "si" va con este "otro" c = Color.BLUE; Pero esto est mal, porque 'else' siempre va con el ms cercano 'si' cuando no hay llaves. Este cdigo es el mismo: if (edad <24) { if (altura> 200) c = Color.RED; ms c = Color.BLUE; } Consejo: Utilice siempre soportes sobre si las declaraciones Este tipo de errores son muy difciles de encontrar. Esta es otra buena razn para utilizar siempre llaves. Tenga cuidado con los puntos y comas en sus sentencias if Por qu el cdigo siguiente siempre digo que piensa el usuario est mintiendo? Cadena ageStr = JOptionPane.showInputDialog (null, "Cuntos aos tienes?"); int edad = Integer.parseInt (ageStr); if (edad> 120 | | edad <0); System.out.println ("Creo que ests mintiendo acerca de su edad"); Es el punto y coma! si se pone un punto y coma inmediatamente despus de la condicin en una sentencia if, Java piensa que ha terminado con el cuerpo de la declaracin. El sangrado de la lnea siguiente, que es tan importante para los lectores humanos, es ignorado por Java. Este es otro error que es ms difcil de hacer si usted sigue siempre la condicin de una llave de apertura. if '-' else if 'estilo Serie de pruebas Es comn para hacer una serie de pruebas en un valor, donde la parte ms slo contiene otra sentencia if. Si se utiliza la sangra para la parte ms, no es fcil ver que estos son realmente una serie de pruebas que son similares. Es mejor que escribir en el mismo nivel de sangra por escrito el caso en la misma lnea que el otro. Ejemplo - serie de pruebas - ifs en cascada Este cdigo est bien indentado, pero feo y difcil de leer. Tambin se puede ir muy lejos a la derecha si hay muchas pruebas. if (puntuacin <35) { g.setColor (Color.MAGENTA); } Else { if (puntuacin <50) { g.setColor (Color.RED); } Else { if (puntuacin <60) {

g.setColor (Color.ORANGE); } Else { if (puntuacin <80) { g.setColor (Color.Yellow); } Else { g.setColor (Color.green); } } } } Ejemplo - con ayuda de 'else if' estilo para el formato Aqu est el mismo ejemplo, usando un estilo de escribir despus de la inmediatamente si la otra persona. Esta es una excepcin comn a las reglas de sangra, ya que resulta en ms programas legibles. Tenga en cuenta que hace uso de la regla de que una sola sentencia en una de las clusulas de Java no necesita aparatos de ortodoncia. if (puntuacin <35) { g.setColor (Color.MAGENTA); } Else if (puntuacin <50) { g.setColor (Color.RED); } Else if (puntuacin <60) { g.setColor (Color.ORANGE); } Else if (puntuacin <80) { g.setColor (Color.Yellow); } Else { g.setColor (Color.green); } Otras lenguas Algunos lenguajes de programacin reconocer esta construccin comn con una palabra clave elseif especial. A pesar de que casi no es necesario, este tipo de contacto puede hacer una pequea lengua un poco ms agradable de usar. Los diseadores del lenguaje Java son muy conservadores acerca de cmo agregar palabras clave a la lengua, as que no se lo esperaba. sentencia switch - Informacin general Propsito del interruptor: seleccione una de las muchas posibles declaraciones a ejecutar La instruccin if permite seleccionar una de las dos secciones de cdigo que se ejecutar sobre la base de un valor booleano (slo dos valores posibles). La sentencia switch le permite elegir entre muchas declaraciones sobre la base de un nmero entero (incluso residuos) o el valor de enumeracin. Sintaxis de ejemplo Sintaxis switch (expr) { caso c1: declaraciones / / hacer esto si expr == c1 break; caso c2: declaraciones / / hacer esto si expr == c2 break; caso c2: caso c3: c4 caso: / / Casos simplemente puede caer a travs. declaraciones / / hacer esto si expr == cualquiera de los c break; ...

por defecto: declaraciones / / hacer esto si expr! = any arriba } Interruptor de palabras clave cambiar La palabra clave interruptor es seguido por un nmero entero expresin entre parntesis, que es seguido por los casos, todas encerradas entre llaves .. La sentencia switch ejecuta el caso correspondiente al valor de la expresin. Normalmente, el cdigo de una clusula de caso termina con una sentencia break, que sale de la sentencia switch y contina con la instruccin que sigue el interruptor. Si no hay ningn valor correspondiente caso, la clusula de defecto se ejecuta. En el supuesto de coincidir y no hay clusula de incumplimiento, la ejecucin contina despus del final de la sentencia switch. caso La palabra clave caso es seguido por una constante entera y dos puntos. Esto comienza las declaraciones que se ejecutan cuando la expresin switch tiene ese valor caso. defecto Si no hay ningn valor de case coincide con el valor de la expresin switch, la ejecucin contina en la clusula de incumplimiento. Este es el equivalente de la "ms" para la sentencia switch. Est escrito despus del ltimo caso ser la convencin, y por lo general no es seguida por la ejecucin de descanso porque slo sigue por la parte inferior del interruptor si esta es la ltima clusula. romper La declaracin de la rotura hace que la ejecucin para salir a la instruccin despus del final del interruptor. Si no hay una ruptura, fluye a travs de la ejecucin en el caso siguiente. Fluye directamente en el siguiente caso es casi siempre un error. Ejemplo - cometario aleatorio Cadena de comentario / / El insulto generado. int que = (int) (Math.random () * 3) / / el resultado es 0, 1 2. switch (que) { case 0: comment = ". Te ves mucho mejor que de costumbre"; break; Caso 1: comment = ". Su obra es la altura de sus estndares usuales"; break; Caso 2: comment = ". Usted es bastante competente para tan poca experiencia"; break; default: comment = ". Oops - algo est mal con este cdigo"; } Equivalente if Una instruccin switch a menudo puede ser reescrita como una sentencia if en una manera directa. Por ejemplo, la sentencia switch anterior se puede escribir de la siguiente manera. Cuando uno de un nmero de bloques de cdigo se selecciona basndose en un nico valor, la instruccin switch es generalmente ms fcil de leer. La eleccin de si o interruptor debe basarse en que es ms fcil de leer. Cadena de comentario / / El insulto generado. int que = (int) (Math.random () * 3) / / el resultado es 0, 1 2. si (que == 0) { comment = "Te ves mucho mejor que de costumbre."; } Else if (which == 1) { comment = "Su trabajo es la altura de sus estndares habituales."; } Else if (which == 2) { comment = "Usted es muy competente para tan poca experiencia."; } Else { comment = "Oops - algo est mal con este cdigo."; } Programacin Defensivo

Siempre incluya una clusula de incumplimiento en su sentencia switch como poltica general de la programacin defensiva - asumir que habr errores en el cdigo y asegurarse de que estn atrapados. Dnde se utiliza switch? La capacidad de interruptor para elegir entre muchas secciones de cdigo parece que sea ms potente que si. Sin embargo, la seleccin de secciones de cdigo en funcin de determinados valores enteros resulta no ser muy comn. Si usted est manejando determinados valores codificados (por ejemplo, el nmero de la tecla que se ha hecho clic en un JOptionPane), o personajes de procesamiento (cuyos cdigos son tratados como nmeros), puede que le resulte til. Eficiencia? Algunos compiladores pueden producir cdigo ms eficiente para declaraciones de ciertos equivalente para las sentencias if. No he tomado la molestia de probar el compilador de Java, ya que, si hay una diferencia de velocidad, sera extremadamente pequea y la eleccin entre el interruptor y si se debe basar en la legibilidad. Comentarios sobre el interruptor de Declaracin de Java interruptor, que fue tomada directamente de C + + para aumentar su atractivo para los programadores de C + +, no es muy querido. No hay ningn rango. No permite rangos, por ejemplo el asunto: 90-100. Muchos otros lenguajes. Los enteros solamente. Requiere enteros y no permite tipos tiles como String. Muchos otros lenguajes. Propenso a errores. Es propenso a errores y una fuente comn de errores - break olvido o incumplimiento silenciosamente omite los errores. Algunas lenguas han eliminado estas situaciones peligrosas. jemplo bruja - Insultos azar La siguiente clase podra ser til para generar insultos al azar en respuesta a la entrada del usuario errnea. Fuente formato de cdigo. Algunos de los casos se formatean en una sola lnea. Este es un estilo comn cuando lo hacen semejantes acciones cortas. Hace que las sentencias switch mucho ms fcil de leer.

Modelo independiente (lgica) de la interfaz de usuario. Este programa se divide en dos clases: uno contiene la lgica (o "modelo", como es ms a menudo llamada) para generar un insulto como una cadena. No sabe nada acerca de la interfaz de usuario, y tambin se podra utilizar en un programa de dilogo (como en el programa de pruebas ms adelante), la consola de E / S, un programa de interfaz grfica de usuario o una aplicacin basada en web. Modelo Random Insult Esta es la lgica del programa, y no hay E / S de modo que sera igualmente adecuado como la lgica de un programa de consola, el programa de interfaz grfica de usuario, o un programa de servidor web. 1 2 3 4 105 // hasta el 105 / / Archivo: flow-switch/insult/InsultGenerator1.java / / Propsito: Genera insultos al azar. / / Autor: Fred Swartz 23 de agosto 2006 Situado en el dominio pblico / / Comentarios: Este interruptor declaraciones fueron escritos en el / / Estilo ms conservador - una clusula de incumplimiento / / Y no hay devoluciones en los mismos. // / / La estructura de la generacin aleatoria es / / Totalmente en cdigo ejecutable, / / Una forma mucho mejor escribir esto es como un / / Datos de programa Driven, donde esta informacin es / / Representado por las estructuras de datos, con un

/ / Simple programa para procesar los datos. // / / El estilo por datos permite que los datos sean / / Leer desde archivos editables por el usuario, por ejemplo, / / Por lo que el programa no necesita ser recompilado para los cambios. pblico InsultGenerator1 clase { / / ============================================ BadInputInsult badInputInsult public static String () { Cadena insulto; switch (rand (2)) { case 0: insulto = "Qu clase de" + InfoAdjective () + "" InfoNoun + () + "Es esto," + PersonAdjective () + "" + Persona () + "?"; break; Caso 1: El insulto = "Nunca entre a este tipo de" + InfoAdjective () + "" InfoNoun + () + "De nuevo!"; break; default: insulto = "Oops - sentencia switch malo"; } volver insultar; } / / ================================================ ==== persona persona privada static String () { Name: String; switch (rand (3)) { case 0: name = "idiota"; break; Caso 1: name = "imbcil"; break; Caso 2: name = "imbcil"; break; default: name = "??? valor malo de una persona"; } devolver el nombre; } / / =========================================== PersonAdjective personAdjective privado static String () { Cadena adj; switch (rand (4)) { case 0: adj = "despistado"; break; Caso 1: adj = "estpida"; break; Caso 2: adj = "estpido"; break; Caso 3: adj = "sin esperanza"; break; default: adj = "??? valor malo de infoAdjective"; } volver adj;

} / / ============================================= InfoAdjective infoAdjective privado static String () { Cadena adj; switch (rand (5)) { case 0: adj = "repugnante"; break; Caso 1: adj = "insultante"; break; Caso 2: adj = "sin sentido"; break; Caso 3: adj = "intil"; break; Caso 4: adj = "idiota"; break; default: adj = "??? valor malo de infoAdjective"; } volver adj; } / / ================================================ == infoNoun infoNoun privado static String () { Cadena sustantivo; switch (rand (4)) { case 0: nombre = "tonteras"; break; Caso 1: sustantivo = "basura"; break; Caso 2: sustantivo = "bazofia"; break; Caso 3: nombre = "basura"; break; por defecto: nombre = "??? valor malo de infoNoun"; } volver sustantivo; } / / ================================================ ===== rand / / Utilidad mtodo para generar nmeros aleatorios en el rango de 0 .. unida-1. / / A partir de la gama en cero era simplemente para que coincida con el tpico / / Rangos de Java (por ejemplo, interruptor, subndices) que comienzan en cero. / / Devuelve int aleatorio en el rango de 0 ... unida-1 privadas rand static int (int unido) { return (int) (Math.random () * consolidado); } } Programa principal 1 2 17 // hadta el 17

/ / Archivo: flow-switch/insult/TestTextGenerator1.java / / Propsito: Mostrar algunos insultos al azar. / / Autor: Fred Swartz / / Licencia: dominio pblico / / Fecha: 03 de mayo 2006 importar javax.swing *.; pblico TestTextGenerator1 clase {

public static void main (String [] args) { Cadena de visualizacin; do { mostrar InsultGenerator1.badInputInsult = () + "\ N \ n Desea otra opinin?"; } While (JOptionPane.showConfirmDialog (null, display) JOptionPane.YES_OPTION ==); } } Basada en datos de programacin Reemplazar mtodos con estructura de datos? Esta versin est escrita con cdigo ejecutable Java. Por lo general es muy deseable sustituir el cdigo ejecutable con algn tipo de estructura de datos. Hay varias razones para esto. Los datos pueden ser almacenados en archivos editables por el usuario, lo que permite modificar el funcionamiento del programa sin recompilar, o incluso de tener acceso al cdigo fuente. Cada lnea de cdigo es una responsabilidad! Mantener pequeo cdigo es un objetivo muy bueno. Parece que nada puede salir mal aqu, pero seguro que ser en algn momento cuando el programa se actualiza. Problemas de programacin Problema (usando arrays): Deshgase de los mtodos, y reemplazarlos con arreglos de cuerdas. Usted encontrar que es til definir un mtodo para elegir un elemento aleatorio a partir de una matriz de cadenas. Para mantener este simple problema no leen los datos en los archivos. Puede ser que parezca chooseRandom privado static String (String [] palabras)

Problema (con mapa y File I / O): Otra manera de pensar en este problema es tener una sintaxis especial para denotar algo que debe ser reemplazado - Voy a usar "escuadras" a los trminos de sonido envolvente que debe ser reemplazado por un algo que se genera dinmicamente. Por ejemplo, el elemento de partida podra ser la cadena "<insult>". El programa entonces buscar la definicin de "insulto" en algo as como HashMap <String, <String> ArrayList> y elegir al azar una de las cadenas de la lista de arreglo. Por ejemplo, puede reemplazar "<insult>" con "Nunca entre a este tipo de <infoNoun> <infoAdj> de nuevo!" El programa se encuentra cada cosa encerrada entre parntesis angulares y reemplazarlo con un valor escogido de forma aleatoria a partir de sus matrices asociadas. Este proceso se repite hasta que todos los smbolos bracketted ngulo han sido reemplazados. Leer datos desde un archivo. Un formato plausible sera la de tener la "meta-smbolos" inicio en la columna 1, y todas las posibles definiciones seguir en las lneas que comienzan con un espacio en blanco. Por ejemplo, <insult> Nunca entre a este tipo de <infoNoun> <infoAdj> nuevo!! Qu tipo de <infoAdj> <infoNoun> es esto, <personAdj> <person>? <infoAdj> repugnante insultante sin sentido intil idiota

mientras que la "Declaracin Propsito - para repetir las declaraciones El propsito de la sentencia while es repetir un grupo de instrucciones Java en muchas ocasiones. Est escrito como una sentencia if, excepto que se utiliza la palabra clave rato. Forma general La sentencia while tiene la siguiente forma: while (condicin) { declaraciones a repetir mientras la condicin es verdadera } La condicin es verdadera o falsa El valor de la condicin debe ser verdadera o falsa (es decir, un valor boolean). A menudo es una comparacin (vase el ejemplo siguiente). Ejemplo: El bucle contina mientras la condicin es verdadera public void paintComponent (Graphics g) { super.paintComponent (g); int count = 0; while (contador <50) { g.drawLine (20, nmero 5 *, 80, conteo * 5); cuenta = cuenta + 1; } g.drawString ("Loop est terminado count =". + count, 10, 300); } Esto repite la drawLine () llamar 50 veces. La primera vez que se comprueba la condicin mientras que, bien es cierto debido a que el valor de recuento es 0, que es menor que 50. Despus de las declaraciones en el cuerpo se hace, el bucle while regresa a la parte superior del bucle y hace que la prueba de nuevo. Cada vez que el valor de recuento es mayor. Finalmente, el recuento es 50, y el valor de la condicin ser falsa. Cuando el bucle se detiene, el programa contina con la instruccin despus del final del bucle (el drawLine () llamada). Esto mostrar la cadena "Loop est terminado. Count = 50". Ejemplo con diagrama de flujo A continuacin se muestra un cdigo y el diagrama de flujo equivalente. int n = 0; int i = 1; while (i <4) { n + +; i + +; } ... mientras diagrama de flujo He aqu otro ejemplo de cdigo y un diagrama de flujo equivalente int n = 0; int i = 1; while (i <4) { int j = 1; mientras que (j <= i) { n + = 1; j + +; } i = i + 1; }

on fines de cada bucle Propsito La base para el bucle se ampli en Java 5 para hacer iteracin sobre matrices y otras colecciones ms convenientes. Esta declaracin ms reciente para la que se llama el mayor favor o en for-each (porque se llama esto en otros lenguajes de programacin). Tambin he odo que llam el bucle for-in. Se usa en lugar de la estndar de bucle si corresponde (ver ltima seccin ms adelante) porque es mucho ms fcil de leer. Serie de valores. El para-cada bucle se utiliza para acceder a cada valor sucesivo en una coleccin de valores. Arrays y colecciones. Es comnmente utilizado para iterar sobre una matriz o una clase Collections (por ejemplo, ArrayList). <E> Iterable. Tambin se puede iterar sobre cualquier cosa que implementa la interfaz <E> Iterable (debe definir iterador () mtodo). Muchas de las clases Collections (por ejemplo, ArrayList) aplicar <E> Iterable, que hace que el para-cada bucle muy til. Tambin puede implementar <E> Iterable para sus propias estructuras de datos. Forma general La for-each y equivalente para los estados tienen estas formas. Las dos formas bsicas son equivalentes dado, dependiendo de uno si es una matriz o un Iterable que est siendo atravesado. En ambos casos, una variable adicional es necesario, un ndice de la matriz y un iterador de la coleccin. Con fines de cada bucle equivalente para el circuito por (tipo var: arr) { cuerpo de bucle } for (int i = 0; i <arr.Length, i + +) { tipo var = arr [i]; cuerpo de bucle } por (tipo var: coll) { cuerpo de bucle } para (Iterator iter <tipo> coll.iterator = (); iter.hasNext ();) { tipo var = iter.next (); cuerpo de bucle } Ejemplo - La suma de todos los elementos de un array Aqu es un bucle escrito tanto como para-cada bucle y una base para el lazo. double [] ar = {1,2, 3,0, 0,8}; int suma = 0; para (double d: ar) {/ / d se pone sucesivamente cada valor de ar. suma + = d; } Y aqu est el mismo bucle utilizando la base para. Se requiere una variable de iteracin extra.

double [] ar = {1,2, 3,0, 0,8}; int suma = 0; for (int i = 0; i <ar.length, i + +) {/ / i indexa cada elemento sucesivamente. suma + = ar [i]; } Cuando el para-cada uno es apropiado Altho el ciclo mejorado puede hacer que el cdigo mucho ms claro, no se puede utilizar en algunas situaciones comunes. Slo el acceso. Los elementos que no pueden ser asignados a, por ejemplo, no para incrementar cada elemento de una coleccin. Slo sola estructura. No es posible atravesar dos estructuras de una vez, por ejemplo, para comparar dos matrices. Slo nico elemento. Usar solamente para acceso nico elemento, por ejemplo, no para comparar elementos sucesivos. Slo hacia adelante. Es posible repetir slo hacia adelante por distintas etapas. Al menos Java 5. No lo use si necesita compatibilidad con versiones anteriores a Java 5.

Ejemplo: String inversa El programa siguiente invierte una cadena de una manera muy sencilla, sino ms bien ineficaz. Cuando usted aprende acerca de StringBuilder (o el equivalente StringBuffer), usted puede hacer esto de manera ms eficiente. Sin embargo, el propsito de esto es para ver cmo recorrer una cadena de obras. Bucles anidados. Hay dos bucles anidados en el programa, el bucle while exterior lee ms entrada. El interior del bucle for tiene todos los caracteres de la cadena de entrada a partir de las caracter 0. 1 2 31 // / / Archivo: loops / inversa / Reverse.java / / Objetivo: Invertir una cadena mediante un bucle. / / Autor: Fred Swartz / / Fecha: 23 de octubre 2005 / / Comentarios: La construccin de una cadena de un carcter a la vez / / Es muy ineficiente, ya que requiere / / Crear un nuevo objeto para cada concatenacin. / / StringBuilder es mejor, y ya lo / / Tiene un mtodo reverse ()! importar javax.swing *.; Reverse clase pblica { public static void main (String [] args) { Entrada String; / / Se utiliza para la cadena de entrada. Cadena invertido; / / Invertida forma o la cadena de entrada. while (true) { entrada = JOptionPane.showInputDialog (null, "Introduzca una cadena");

if (entrada == null) break; invertida = ""; for (int i = 0; i <input.length (); i + +) { invertido = input.substring (i, i +1) + invertido; } JOptionPane.showMessageDialog (null, "invertida: \ n" + invertido); } } } While vs bucle For Contando. Un bucle se prefiere un bucle mientras que cuando se cuenta a travs de una serie de nmeros - en este caso todas las posiciones de caracteres en una cadena. Equivalente. Un bucle tiene la misma condicin como el equivalente bucle while, sino que tambin incorpora una inicializacin, que sera antes de la declaracin de tiempo, y el incremento, lo que sera en el extremo del cuerpo de tiempo. Puede escribir el bucle en ambos sentidos, pero poner la inicializacin, condicin e incremento en un comunicado aumenta la legibilidad. Para bucle While int i = 0; while (i <input.length ()) { invertido = input.substring (i, i +1) + invertido; i + +; } Un solo personaje - String o Char? Este programa usa substring (...) para obtener un solo carcter. Sera ms eficaz utilizar charAt (...), que devuelve un nico valor char primitivo. for (int i = 0; i <input.length (); i + +) { invertido = input.charAt (i) + invertido; } for (int i = 0; i <input.length (); i + +) { invertido = input.substring (i, i +1) + invertido; }

Вам также может понравиться