Instruciones de repeticiones en java

Embed Size (px)

DESCRIPTION

Cómo usar los comandos para estructuras de anidamientos repetitivos

Citation preview

Otras herramientas imprescindibles del control de la ejecucin de nuestro cdigo son los BUCLES o CICLOS. Consisten en un mtodo que permite repetir un trozo de cdigo varias veces.Hay bsicamente dos tipos:- Bucle FOR:El bucle FOR (Para) consiste en una sentencia que engloba un grupo de instrucciones y tiene una variable(normalmente llamada i, de tipo entero) cuyo valor se va modificando en cada vuelta.FOR i=0 TO 10 //Especificamos en este caso que i variar desde 0 hasta 10, con lo que repetiremos el bucle PRINT "Estamos en el bucle" //10 veces.NEXT i //Con esto cerramos el bucle e indicamos el final del bloque de instrucciones que se repiten- Bucle WHILE:El bucle WHILE (Mientras) consiste en un bucle en el que el cdigo se repite hasta que se cumpla alguna condicin booleana (es decir, una expresin que d como resultado verdadero o falso). Hay variaciones, como el REPEAT...UNTIL, que se diferencia en el momento de comprobar si se hace verdadera o no la condicin.WHILE A(B*2) DO // Aqu especificamos la expresin que evaluamos y aqu se comprueba A=A+1 // Incrementamos el valor de A hasta que sea igual a B*2DONE // Como en el FOR, necesitamos especificar donde acaba el bucle y el cdigo.Estructuras de datoscreo a como enterocreo b como enterocreo suma como enteroa=2b=1suma = a + bimprimir suma Estructuras de datos y de control Estructuras de controlLas estructuras de control pueden dividirse en dos: Estructuras de control Condicional y Estructuras de control Repetitivo. Las estructuras de control condicional son las que incluyen alternativas de seleccin en base al resultado de una operacin booleana(El resultado de una operacin booleana es siempre verdadero o falso), como por ejemplo, una comparacin (A=B). Segn la expresin sea cierta o falsa, se ejecutar un trozo de cdigo u otro. Es el caso de la sentencia IF(Si) THEN(Entonces) ELSE(Sino) de Pascal o Basic:IF A=0 THEN PRINT "A vale 0"ELSE PRINT "A no vale 0" Otra sentencia de control son las de tipo SWITCH CASE. En este tipo de sentencias se especifica la variable a comparar y una lista de valores con lo que comparar. Aquel que sea el verdadero, se ejecutar:Quizs suene ms complicado de lo que es. Un ejemplo: Queremos sumar dos nmeros. Nuestro programa tendr que tener tres cajones: Uno para cada nmero y otro para el resultado. Cada cajn tiene un nombre en vez de una posicin de memoria, de manera que slo hay que nombrarlo:Necesito cajones A, B y ResultadoLee un nmero y gurdalo en ALee un nmero y gurdalo en BSuma A y B y gurdalo en ResultadoImprime el contenido de ResultadoHe aqu nuestro programa. Como cabe pensar, un procesador no tiene la instruccin "Imprime por pantalla"; esto es una llamada a otra porcin de cdigo que, gracias a la abstraccin, nosotros no hemos escrito, o hemos escrito una sola vez; a partir de lo cual podemos imprimir todo el texto que queramos en la pantalla.Las posiciones de memoria A y B son Variables. Si queremos leerlas o escribirlas, podemos hacerlo. Tpicamente, existirn datos que no pensamos modificar; no querremos que el usuario tenga que introducirlos cada vez, pues son de naturaleza ms constante que otros (como puede ser el valor Pi para calcular el permetro o rea de un crculo). Para evitar modificarlos por error, podemos pedir al sistema variables especiales, que no puedan ser reescritas. Son las Constantes. Un ejemplo:VIERNES, 2 DE DICIEMBRE DE 2011Tcnicas Bsicas de ProgramacinLa programacin estructurada sigue tres reglas: la secuencia, la iteracin y la decisin. La primera de ellas indica que las instrucciones del cdigo se leern de principio a fin; la segunda indica que, segn cierta condicin, un nmero de instrucciones podran repetirse un numero determinado de veces, y la tercera indica que segn unas ciertas condiciones se ejecutarn o no un conjunto de instrucciones. En el siguiente algoritmo para limpiar platos se aprecian estas tres caractersticas. La indentacin de las instrucciones indican cules son englobadas y cules no por sus predecesoras. mientras haya platos coger plato mientras haya suciedad echar jabon pasar el estropajo por el plato si plato es azul ponerlo con los azulesEn cdigo no estructurado, quedara algo ms extrao, pero igualmente valido.1 coger plato2 echar jabn3 pasar el estropajo por el plato4 si hay suciedad ir a la instruccin 25 si el plato no es azul ir a la instruccin 76 ponerlo con los azules7 si hay ms platos ir a la instruccin 1En programas ms grandes, esto es muchsimo ms complicado, pero puede aprender.Ahora conocemos la ejecucin de los algoritmos. Sin embargo, un programa se compone tanto de algoritmos como de una estructura de datos sobre la cual operar. As que veamos primero algunas cosas importantes:Antes de empezar un programaEstructura de un programaEn la programacin estructurada hay un inicio y un fin perfectamente bien definido de acuerdo al diagrama de flujo que se plante al concebir la idea del programa.Un programa bien estructurado debera tener algn subprograma que capture cualquier error dentro del programa principal o de cualquier subprograma dentro de la aplicacin de tal modo que el subprograma que captura los errores genere un registro de datos que describa el error generado y/o en qu subprograma se gener el error para posteriormente corregirlo. Para facilitar la correccin de estos errores se hace uso de los comentarios agregados en el cdigo fuente.Variables y constantesComo hemos visto, el ordenador sigue una serie de instrucciones. Pero esas instrucciones tienen que operar sobre una serie de datos. El ordenador tpico slo procesa una instruccin a la vez, por lo que necesita 'espacios de memoria' donde guardar o depositar, a modo de cajones, por usar un smil conocido, los diversos datos con los que trabaja. Aqu es donde entran en juego las variables y constantes.1 coger plato2 echar jabn3 pasar el estropajo por el plato4 si hay suciedad ir a la instruccin 25 si el plato no es azul ir a la instruccin 76 ponerlo con los azules7 si hay ms platos ir a la instruccin 1mientras haya platos coger plato mientras haya suciedad echar jabon pasar el estropajo por el plato si plato es azul ponerlo con los azulesCUNDO USAR JFRAME Y CUNDO JDIALOGEn una aplicacin java con ventanas debera haber un nico JFrame, correspondiente a la ventana principal de la aplicacin. El resto de ventanas secundarias deberan ser JDialog. Por qu es esto?Un JFrame en una ventana que en Windows crea, en la barra de herramientas, donde est el men de "inicio" y las aplicaciones que tenemos abiertas, un nuevo botn de aplicacin abierta. En una aplcacin lo normal es que slo haya un botn ah. Si creamos varios JFrame en nuestra aplicacin, apareceran varios botones, uno por cada JFrame.El JDialog no muestra este botn. Por ello, el resto de las ventanas de nuestra aplicacin deberas ser JDialog.Hay otro motivo ms. Un JFrame no admite a ninguna otra ventana como padre. El JDialog s admite como padres un JFrame u otros JDialog. Esto es importante porque una ventana hija siempre quedar por encima de su ventana padre. Si al crear los JDialog les pasamos el JFrame como padre, los JDialog siempre estarn visibles por encima del JFrame. No se podrn ir "detrs" de l.Si adems, en el constructor del JDialog ponemos a true el flag que indica que es modal, adems de pasarle una ventana padre, entonces el JDialog impedir el acceso a las otras ventanas hasta que se cierre. Esta seria una forma de crear el JFrame y el JPanel pueden tambin descargarse el cdigo fuente el link lo deje mas abajo.String path="";//creamos una variable global para guardar el path private void open() throws IOException { //empezamos implementando la clase JFileChooser para abrir archivos JFileChooser JFC = new JFileChooser(); //filtro que muestra solo los archivos con extension *.edu JFC.setFileFilter(new FileNameExtensionFilter("todos los archivos *.EDU", "edu","EDU")); //se comprueba si se ha dado al boton aceptar int abrir = JFC.showDialog(null, "Abrir"); if (abrir == JFileChooser.APPROVE_OPTION) { FileReader FR = null; BufferedReader BR = null; try { //abro el fichero y creo un BufferedReader para hacer //una lectura comoda (tener el metodo readLine();) File archivo = JFC.getSelectedFile();//abre un archivo .lengf //evitar abrir archivo con otra extension que no sea *.LFP String PATH = JFC.getSelectedFile().getAbsolutePath(); if(PATH.endsWith(".edu")||PATH.endsWith(".EDU")){ FR = new FileReader(archivo); BR = new BufferedReader(FR); //leyendo el archivo String linea;//variable para leer linea por linea el archivo de entrada if(path.compareTo(archivo.getAbsolutePath())==0){ JOptionPane.showMessageDialog(this, "Archivo Abierto","Oops! Error", JOptionPane.ERROR_MESSAGE); }else{ path = archivo.getAbsolutePath(); jTextArea.setText(null);//limpiamos el textArea antes de sobreescribir while((linea=BR.readLine())!=null){ //cuando termina el texto del archivo? jTextArea.append(linea+"\n");//utilizamos append para escribir en el textArea } } }else{ JOptionPane.showMessageDialog(this, "Archivo no soportado","Oops! Error", JOptionPane.ERROR_MESSAGE); open(); } } catch (FileNotFoundException ex) { ex.printStackTrace(); //Logger.getLogger(fileChooser.class.getName()).log(Level.SEVERE, null, ex); //cerramos el fichero, para asegurar que se cierra tanto // si todo va bien si salta una excepcion } finally { try { if(null!= FR){ FR.close(); } } catch (IOException ex) { ex.printStackTrace(); //Logger.getLogger(fileChooser.class.getName()).log(Level.SEVERE, null, ex); } } } }private void save(){ String texto = jTextArea.getText();//variable para comparacion if (texto.matches("[[ ]*[\n]*[\t]]*")) {//compara si en el JTextArea hay texto sino muestrtra un mensaje en pantalla JOptionPane.showMessageDialog(null,"No hay texto para guardar!", "Oops! Error", JOptionPane.ERROR_MESSAGE); }else{ JFileChooser fileChooser = new JFileChooser(); fileChooser.addChoosableFileFilter(new FileNameExtensionFilter("todos los archivos *.EDU", "edu","EDU"));//filtro para ver solo archivos .edu int seleccion = fileChooser.showSaveDialog(null); try{ if (seleccion == JFileChooser.APPROVE_OPTION){//comprueba si ha presionado el boton de aceptar File JFC = fileChooser.getSelectedFile(); String PATH = JFC.getAbsolutePath();//obtenemos el path del archivo a guardar PrintWriter printwriter = new PrintWriter(JFC); printwriter.print(jTextArea.getText());//escribe en el archivo todo lo que se encuentre en el JTextArea printwriter.close();//cierra el archivo //comprobamos si a la hora de guardar obtuvo la extension y si no se la asignamos if(!(PATH.endsWith(".edu"))){ File temp = new File(PATH+".edu"); JFC.renameTo(temp);//renombramos el archivo } JOptionPane.showMessageDialog(null,"Guardado exitoso!", "Guardado exitoso!", JOptionPane.INFORMATION_MESSAGE); } }catch (Exception e){//por alguna excepcion salta un mensaje de error JOptionPane.showMessageDialog(null,"Error al guardar el archivo!", "Oops! Error", JOptionPane.ERROR_MESSAGE); } } }JFileChooser para abrir y/o guardar archivosJFileChooser es una clase java que nos permite mostrar fcilmente una ventana para la seleccin de un fichero. En esta oportunidad les dejare un ejemplo de una de las muchas formas de como Abrir y Guardar un archivo aplicando filtros tambin que al momento de guardar genere automticamente la extensin y que evite abrir un archivo que ya se encuentra abierto.La relacin empleada para organizar los casos de uso es la de un extend, ya que se intenta identificar que cualquiera de estas funcionalidades se pueden o no realizar tanto individual corno conjuntamente. Adems, hemos relacionado mediante un extend el caso de uso de Gestin de locales y de pisos con el caso de uso Gestin de edificio. Con esto reflejamos que la gestin de edificios puede conllevar la gestin de locales, de pisos o de ambos.En el siguiente diagrama (ver Figura 2) se muestran los casos de uso relacionados con el actor inquilino. El inquilino va a ser aquella persona que tiene algn tipo de aval, de los expuestos en el enunciado, y, por tanto, puede realizar algunas de las siguientes operaciones en el sistema:? Alquilar.? Desalquilar.? Darse de baja.? Modificar sus datos.? Consultarlos.Para cada una de estas operaciones hay un caso de uso en el diagrama reflejando la situacin anterior. Adems, ya que se nos dice que para la realizacin de cualquiera de las operaciones es necesaria su identificacin, se ha reflejado un caso de uso nombrado Identificacin que se relaciona con los anteriores mediante la relacin de include. Con la relacin de include hacemos especial nfasis en esta situacin.Tras volver a examinar con ms detalle la descripcin proporcionada se observa que cuando se produce el alquiler ste puede ser el de un piso (Alquiler Piso) un local (Alquiler Local) y de edificio (Alquiler de Edificio). Por ello se generan tres nuevos casos de uso que implican una relacin de extend con el caso de uso de Alquilar.Como hemos observado que la primera vez que se produce una operacin de alquiler se debe permitir el alta de los datos del inquilino, se ha creado el caso de uso Alta Inquilino como una extensin de Alquiler Piso, Alquiler Local y Alquiler Edificio.Finalmente, el ltimo diagrama de caso de uso que se muestra (Figura 3) es aquel en el que se encuentra involucrado el actor secretario. Tras una visin general de las caractersticas del sistema, observamos que las tareas del secretario son:Obtencin de los distintos tipos de recibos. Obtener los informes econmicos. Generacin de los listados.Como vemos, en aras de reflejar de una forma ms meticulosa las funcionalidades que debe contemplar el sistema, todos los casos de uso genricos, con los cuales est relacionado, se desglosan en otros casos de uso. Para ello se ha utilizado la relacin de extensin en algunos casos de uso.As pues, el caso de uso de "Generar recibos" est relacionado mediante un extend con los casos de uso:? Recibos idnticos mes anterior.? Inicializar conceptos.? Modificar los del mes anterior.Este desglose se ha realizado para reflejar lo que el enunciado muestra con detalle y as poder tener una comprensin mayor de lo que el sistema debe de hacer.Por otra parte, la Gestin de movimientos bancarios se extiende en los casos de uso de Ingresos y Gastos de inmuebles, mientras que el de ingresos se extiende en ingresos de pisos e ingresos de local. De esta forma reflejamos el hecho de que los ingresos pueden ser de pisos, de locales o ambos, pero slo por esos conceptos.Figura 3:Casos de uso relacionados con el actor "Secretario empresa".Finalmente, el caso de uso de Generacin de listados se extiende en distintos casos de uso dependiendo del tipo de listado que se ha comentado en el enunciado. Con esto se indica claramente cules son especficamente las operaciones que se deben poder realizar, obteniendo, por tanto, una mayor comprensin de los requisitos que debe tener el sistema. La extensin refleja esos comportamientos opcionales que puede haber en el sistema y que no tienen por qu ser exclusivos, en el sentido de que si se realiza uno se pueden realizar los otros, cuando se generan listados.Los casos de uso que tenemos son: Inquilino por fecha, Pagos inquilino en un intervalo de tiempo, Impagos inquilino en un intervalo de tiempo, De todos los inmuebles, De todos los pisos y locales de cada edificio, De recibos pendientes.