From a52d26a18e1ad4839f9ad26a5b97490b284e9eac Mon Sep 17 00:00:00 2001 From: Carlos Galindo Date: Tue, 26 Mar 2019 20:11:14 +0100 Subject: [PATCH] Initial commit --- .classpath | 40 +++ .project | 23 ++ LTD_Proyecto2_Alumnos.eml | 25 ++ LTD_Proyecto2_Alumnos.iml | 2 + pom.xml | 44 +++ src/main/java/grafos/GraphViz.java | 366 ++++++++++++++++++++++++ src/main/java/grafos/Transformador.java | 79 +++++ src/main/java/grafos/Visitador.java | 101 +++++++ src/main/res/config.properties | 23 ++ src/test/res/ejemplos/Bucles_1.java | 16 ++ src/test/res/ejemplos/Bucles_2.java | 24 ++ src/test/res/ejemplos/Bucles_3.java | 37 +++ src/test/res/ejemplos/Bucles_4.java | 41 +++ src/test/res/ejemplos/Bucles_5.java | 52 ++++ src/test/res/ejemplos/Bucles_6.java | 27 ++ src/test/res/ejemplos/Test_1.java | 13 + src/test/res/ejemplos/Test_2.java | 14 + src/test/res/ejemplos/Test_3.java | 14 + src/test/res/ejemplos/Test_4.java | 21 ++ src/test/res/ejemplos/Test_5.java | 22 ++ src/test/res/ejemplos/Test_6.java | 21 ++ src/test/res/ejemplos/Test_7.java | 23 ++ src/test/res/ejemplos/Test_8.java | 22 ++ src/test/res/ejemplos/Test_9.java | 41 +++ 24 files changed, 1091 insertions(+) create mode 100644 .classpath create mode 100644 .project create mode 100644 LTD_Proyecto2_Alumnos.eml create mode 100644 LTD_Proyecto2_Alumnos.iml create mode 100644 pom.xml create mode 100644 src/main/java/grafos/GraphViz.java create mode 100644 src/main/java/grafos/Transformador.java create mode 100755 src/main/java/grafos/Visitador.java create mode 100644 src/main/res/config.properties create mode 100755 src/test/res/ejemplos/Bucles_1.java create mode 100755 src/test/res/ejemplos/Bucles_2.java create mode 100755 src/test/res/ejemplos/Bucles_3.java create mode 100755 src/test/res/ejemplos/Bucles_4.java create mode 100755 src/test/res/ejemplos/Bucles_5.java create mode 100644 src/test/res/ejemplos/Bucles_6.java create mode 100644 src/test/res/ejemplos/Test_1.java create mode 100644 src/test/res/ejemplos/Test_2.java create mode 100644 src/test/res/ejemplos/Test_3.java create mode 100644 src/test/res/ejemplos/Test_4.java create mode 100644 src/test/res/ejemplos/Test_5.java create mode 100644 src/test/res/ejemplos/Test_6.java create mode 100644 src/test/res/ejemplos/Test_7.java create mode 100644 src/test/res/ejemplos/Test_8.java create mode 100644 src/test/res/ejemplos/Test_9.java diff --git a/.classpath b/.classpath new file mode 100644 index 0000000..0445b51 --- /dev/null +++ b/.classpath @@ -0,0 +1,40 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/.project b/.project new file mode 100644 index 0000000..f0af2f7 --- /dev/null +++ b/.project @@ -0,0 +1,23 @@ + + + LTD_Proyecto2_Alumnos + + + + + + org.eclipse.jdt.core.javabuilder + + + + + org.eclipse.m2e.core.maven2Builder + + + + + + org.eclipse.jdt.core.javanature + org.eclipse.m2e.core.maven2Nature + + diff --git a/LTD_Proyecto2_Alumnos.eml b/LTD_Proyecto2_Alumnos.eml new file mode 100644 index 0000000..bf4c662 --- /dev/null +++ b/LTD_Proyecto2_Alumnos.eml @@ -0,0 +1,25 @@ + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/LTD_Proyecto2_Alumnos.iml b/LTD_Proyecto2_Alumnos.iml new file mode 100644 index 0000000..240f3e9 --- /dev/null +++ b/LTD_Proyecto2_Alumnos.iml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/pom.xml b/pom.xml new file mode 100644 index 0000000..00df87c --- /dev/null +++ b/pom.xml @@ -0,0 +1,44 @@ + + 4.0.0 + + com.upv.ltd.graphs + graphs + 0.0.1-SNAPSHOT + jar + + graphs + http://maven.apache.org + + + UTF-8 + + + + + junit + junit + 3.8.1 + test + + + com.google.code.gson + gson + 2.3.1 + + + com.github.javaparser + javaparser-symbol-solver-core + 3.5.17 + + + + + + Josep Silva + jsilva@dsic.upv.es + http://www.dsic.upv.es/~jsilva + jsilva + + + diff --git a/src/main/java/grafos/GraphViz.java b/src/main/java/grafos/GraphViz.java new file mode 100644 index 0000000..3b69a2e --- /dev/null +++ b/src/main/java/grafos/GraphViz.java @@ -0,0 +1,366 @@ +package grafos; + +//GraphViz.java - a simple API to call dot from Java programs + +/*$Id$*/ +/* +****************************************************************************** +* * +* (c) Copyright Laszlo Szathmary * +* * +* This program is free software; you can redistribute it and/or modify it * +* under the terms of the GNU Lesser General Public License as published by * +* the Free Software Foundation; either version 2.1 of the License, or * +* (at your option) any later version. * +* * +* This program is distributed in the hope that it will be useful, but * +* WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY * +* or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public * +* License for more details. * +* * +* You should have received a copy of the GNU Lesser General Public License * +* along with this program; if not, write to the Free Software Foundation, * +* Inc., 675 Mass Ave, Cambridge, MA 02139, USA. * +* * +****************************************************************************** +*/ + +import java.io.BufferedReader; +import java.io.BufferedWriter; +import java.io.DataInputStream; +import java.io.File; +import java.io.FileInputStream; +import java.io.FileOutputStream; +import java.io.FileWriter; +import java.io.InputStreamReader; +import java.util.Properties; + +/** +*
+*
Purpose: GraphViz Java API +*
+* +*
Description: +*
With this Java class you can simply call dot +* from your Java programs. +*
Example usage: +*
+*
+*    GraphViz gv = new GraphViz();
+*    gv.addln(gv.start_graph());
+*    gv.addln("A -> B;");
+*    gv.addln("A -> C;");
+*    gv.addln(gv.end_graph());
+*    System.out.println(gv.getDotSource());
+*
+*    String type = "gif";
+*    File out = new File("out." + type);   // out.gif in this example
+*    gv.writeGraphToFile( gv.getGraph( gv.getDotSource(), type ), out );
+* 
+*
+* +*
+* +* @version v0.5.1, 2013/03/18 (March) -- Patch of Juan Hoyos (Mac support) +* @version v0.5, 2012/04/24 (April) -- Patch of Abdur Rahman (OS detection + start subgraph + +* read config file) +* @version v0.4, 2011/02/05 (February) -- Patch of Keheliya Gallaba is added. Now you +* can specify the type of the output file: gif, dot, fig, pdf, ps, svg, png, etc. +* @version v0.3, 2010/11/29 (November) -- Windows support + ability to read the graph from a text file +* @version v0.2, 2010/07/22 (July) -- bug fix +* @version v0.1, 2003/12/04 (December) -- first release +* @author Laszlo Szathmary (jabba.laci@gmail.com) +*/ +public class GraphViz +{ + /** + * Detects the client's operating system. + */ + private final static String osName = System.getProperty("os.name").replaceAll("\\s",""); + + /** + * Load the config.properties file. + */ + private final static String cfgProp = "./src/main/res/config.properties"; + private final static Properties configFile = new Properties() { + private final static long serialVersionUID = 1L; { + try { + load(new FileInputStream(cfgProp)); + } catch (Exception e) {} + } + }; + + /** + * The dir. where temporary files will be created. + */ +private static String TEMP_DIR = "/tmp/"; + + /** + * Where is your dot program located? It will be called externally. + */ +private static String DOT = configFile.getProperty("dotFor" + osName); + + /** + * The image size in dpi. 96 dpi is normal size. Higher values are 10% higher each. + * Lower values 10% lower each. + * + * dpi patch by Peter Mueller + */ + private int[] dpiSizes = {46, 51, 57, 63, 70, 78, 86, 96, 106, 116, 128, 141, 155, 170, 187, 206, 226, 249}; + + /** + * Define the index in the image size array. + */ + private int currentDpiPos = 7; + + /** + * Increase the image size (dpi). + */ + public void increaseDpi() { + if ( this.currentDpiPos < (this.dpiSizes.length - 1) ) { + ++this.currentDpiPos; + } + } + + /** + * Decrease the image size (dpi). + */ + public void decreaseDpi() { + if (this.currentDpiPos > 0) { + --this.currentDpiPos; + } + } + + public int getImageDpi() { + return this.dpiSizes[this.currentDpiPos]; + } + + /** + * The source of the graph written in dot language. + */ + private StringBuilder graph = new StringBuilder(); + + /** + * Constructor: creates a new GraphViz object that will contain + * a graph. + */ + public GraphViz() { + } + + /** + * Returns the graph's source description in dot language. + * @return Source of the graph in dot language. + */ + public String getDotSource() { + return this.graph.toString(); + } + + /** + * Adds a string to the graph's source (without newline). + */ + public void add(String line) { + this.graph.append(line); + } + + /** + * Adds a string to the graph's source (with newline). + */ + public void addln(String line) { + this.graph.append(line + "\n"); + } + + /** + * Adds a newline to the graph's source. + */ + public void addln() { + this.graph.append('\n'); + } + + public void clearGraph(){ + this.graph = new StringBuilder(); + } + + /** + * Returns the graph as an image in binary format. + * @param dot_source Source of the graph to be drawn. + * @param type Type of the output image to be produced, e.g.: gif, dot, fig, pdf, ps, svg, png. + * @return A byte array containing the image of the graph. + */ + public byte[] getGraph(String dot_source, String type) + { + File dot; + byte[] img_stream = null; + + try { + dot = writeDotSourceToFile(dot_source); + if (dot != null) + { + img_stream = get_img_stream(dot, type); + if (dot.delete() == false) + System.err.println("Warning: " + dot.getAbsolutePath() + " could not be deleted!"); + return img_stream; + } + return null; + } catch (java.io.IOException ioe) { return null; } + } + + /** + * Writes the graph's image in a file. + * @param img A byte array containing the image of the graph. + * @param file Name of the file to where we want to write. + * @return Success: 1, Failure: -1 + */ + public int writeGraphToFile(byte[] img, String file) + { + File to = new File(file); + return writeGraphToFile(img, to); + } + + /** + * Writes the graph's image in a file. + * @param img A byte array containing the image of the graph. + * @param to A File object to where we want to write. + * @return Success: 1, Failure: -1 + */ + public int writeGraphToFile(byte[] img, File to) + { + try { + FileOutputStream fos = new FileOutputStream(to); + fos.write(img); + fos.close(); + } catch (java.io.IOException ioe) { return -1; } + return 1; + } + + /** + * It will call the external dot program, and return the image in + * binary format. + * @param dot Source of the graph (in dot language). + * @param type Type of the output image to be produced, e.g.: gif, dot, fig, pdf, ps, svg, png. + * @return The image of the graph in .gif format. + */ + private byte[] get_img_stream(File dot, String type) + { + File img; + byte[] img_stream = null; + + try { + img = File.createTempFile("graph_", "."+type, new File(GraphViz.TEMP_DIR)); + Runtime rt = Runtime.getRuntime(); + + // patch by Mike Chenault + String[] args = {DOT, "-T"+type, "-Gdpi="+dpiSizes[this.currentDpiPos], dot.getAbsolutePath(), "-o", img.getAbsolutePath()}; + Process p = rt.exec(args); + + p.waitFor(); + + FileInputStream in = new FileInputStream(img.getAbsolutePath()); + img_stream = new byte[in.available()]; + in.read(img_stream); + // Close it if we need to + if( in != null ) in.close(); + + if (img.delete() == false) + System.err.println("Warning: " + img.getAbsolutePath() + " could not be deleted!"); + } + catch (java.io.IOException ioe) { + System.err.println("Error: in I/O processing of tempfile in dir " + GraphViz.TEMP_DIR+"\n"); + System.err.println(" or in calling external command"); + ioe.printStackTrace(); + } + catch (java.lang.InterruptedException ie) { + System.err.println("Error: the execution of the external program was interrupted"); + ie.printStackTrace(); + } + + return img_stream; + } + + /** + * Writes the source of the graph in a file, and returns the written file + * as a File object. + * @param str Source of the graph (in dot language). + * @return The file (as a File object) that contains the source of the graph. + */ + private File writeDotSourceToFile(String str) throws java.io.IOException + { + File temp; + try { + temp = File.createTempFile("dorrr",".dot", new File(GraphViz.TEMP_DIR)); + FileWriter fout = new FileWriter(temp); + fout.write(str); + BufferedWriter br=new BufferedWriter(new FileWriter("/tmp/dotsource.dot")); + br.write(str); + br.flush(); + br.close(); + fout.close(); + } + catch (Exception e) { + System.err.println("Error: I/O error while writing the dot source to temp file!"); + return null; + } + return temp; + } + + /** + * Returns a string that is used to start a graph. + * @return A string to open a graph. + */ + public String start_graph() { + return "digraph G {"; + } + + /** + * Returns a string that is used to end a graph. + * @return A string to close a graph. + */ + public String end_graph() { + return "}"; + } + + /** + * Takes the cluster or subgraph id as input parameter and returns a string + * that is used to start a subgraph. + * @return A string to open a subgraph. + */ + public String start_subgraph(int clusterid) { + return "subgraph cluster_" + clusterid + " {"; + } + + /** + * Returns a string that is used to end a graph. + * @return A string to close a graph. + */ + public String end_subgraph() { + return "}"; + } + + /** + * Read a DOT graph from a text file. + * + * @param input Input text file containing the DOT graph + * source. + */ + public void readSource(String input) + { + StringBuilder sb = new StringBuilder(); + + try + { + FileInputStream fis = new FileInputStream(input); + DataInputStream dis = new DataInputStream(fis); + BufferedReader br = new BufferedReader(new InputStreamReader(dis)); + String line; + while ((line = br.readLine()) != null) { + sb.append(line); + } + dis.close(); + } + catch (Exception e) { + System.err.println("Error: " + e.getMessage()); + } + + this.graph = sb; + } + +} // end of class GraphViz diff --git a/src/main/java/grafos/Transformador.java b/src/main/java/grafos/Transformador.java new file mode 100644 index 0000000..c7a8631 --- /dev/null +++ b/src/main/java/grafos/Transformador.java @@ -0,0 +1,79 @@ +package grafos; + +import java.io.File; +import java.util.ArrayList; +import java.util.List; + +import com.github.javaparser.JavaParser; +import com.github.javaparser.ast.CompilationUnit; +import com.github.javaparser.ast.Node; +import com.github.javaparser.ast.comments.Comment; +import com.github.javaparser.ast.visitor.VoidVisitor; + +public class Transformador { + + public static void main(String[] args) throws Exception { + // Ruta del fichero con el programa que vamos a transformar + String ruta = "./src/test/res/ejemplos/Test_1"; + + // Abrimos el fichero original (un ".java") + File original = new File(ruta + ".java"); + + // Parseamos el fichero original. Se crea una unidad de compilación (un AST). + CompilationUnit cu = JavaParser.parse(original); + + quitarComentarios(cu); + + // Recorremos el AST + List arcos = new ArrayList(); + VoidVisitor> visitador = new Visitador(); + visitador.visit(cu,arcos); + + // Imprimimos el CFG del programa + String dotInfo = imprimirGrafo(arcos); + + // Generamos un PDF con el CFG del programa + System.out.print("\nGenerando PDF..."); + GraphViz gv=new GraphViz(); + gv.addln(gv.start_graph()); + gv.add(dotInfo); + gv.addln(gv.end_graph()); + String type = "pdf"; // String type = "gif"; + // gv.increaseDpi(); + gv.decreaseDpi(); + gv.decreaseDpi(); + gv.decreaseDpi(); + gv.decreaseDpi(); + File destino_CFG = new File(ruta + "_CFG."+ type); + gv.writeGraphToFile( gv.getGraph( gv.getDotSource(), type ), destino_CFG); + System.out.println(" PDF generado!"); + } + + // Imprime el grafo en la pantalla + private static String imprimirGrafo(List arcos) + { + String dotInfo=""; + for(String arco:arcos) { + dotInfo += arco; + System.out.println("ARCO: "+arco); + } + System.out.println("\nCFG:"); + System.out.println(dotInfo); + + return dotInfo; + } + + // Elimina todos los comentarios de un nodo y sus hijos + static void quitarComentarios(Node node){ + node.removeComment(); + for (Comment comment : node.getOrphanComments()) + { + node.removeOrphanComment(comment); + } + // Do something with the node + for (Node child : node.getChildNodes()){ + quitarComentarios(child); + } + } + +} diff --git a/src/main/java/grafos/Visitador.java b/src/main/java/grafos/Visitador.java new file mode 100755 index 0000000..0cd4763 --- /dev/null +++ b/src/main/java/grafos/Visitador.java @@ -0,0 +1,101 @@ +package grafos; + +import java.util.List; + +import com.github.javaparser.ast.NodeList; +import com.github.javaparser.ast.body.MethodDeclaration; +import com.github.javaparser.ast.stmt.BlockStmt; +import com.github.javaparser.ast.stmt.ExpressionStmt; +import com.github.javaparser.ast.stmt.Statement; +import com.github.javaparser.ast.visitor.VoidVisitorAdapter; + + +public class Visitador extends VoidVisitorAdapter> +{ + /********************************************************/ + /********************** Atributos ***********************/ + /********************************************************/ + + // Usamos un contador para numerar las instrucciones + int contador=1; + String nodoAnterior = "Start"; + String nodoActual = ""; + + /********************************************************/ + /*********************** Metodos ************************/ + /********************************************************/ + + // Visitador de métodos + // Este visitador añade el nodo final al CFG + @Override + public void visit(MethodDeclaration methodDeclaration, Listcollector) + { + // Visitamos el método + super.visit(methodDeclaration, collector); + + // Añadimos el nodo final al CFG + collector.add(nodoAnterior+"-> Stop;"); + } + + // Visitador de expresiones + // Cada expresión encontrada genera un nodo en el CFG + @Override + public void visit(ExpressionStmt es, Listcollector) + { + // Creamos el nodo actual + nodoActual = crearNodo(es); + + crearArcos(collector); + + nodoAnterior = nodoActual; + + // Seguimos visitando... + super.visit(es, collector); + } + + // Añade un arco desde el último nodo hasta el nodo actual (se le pasa como parametro) + private void añadirArcoSecuencialCFG(Listcollector) + { + System.out.println("NODO: " + nodoActual); + + String arco = nodoAnterior + "->" + nodoActual + ";"; + collector.add(arco); + } + + // Crear arcos + private void crearArcos(Listcollector) + { + añadirArcoSecuencialCFG(collector); + } + + // Crear nodo + // Añade un arco desde el nodo actual hasta el último control + private String crearNodo(Object objeto) + { + return "\"("+ contador++ +") "+quitarComillas(objeto.toString())+"\""; + } + + // Sustituye " por \" en un string: Sirve para eliminar comillas. + private static String quitarComillas(String texto) + { + return texto.replace("\"", "\\\""); + } + + // Dada una sentencia, + // Si es una �nica instrucci�n, devuelve un bloque equivalente + // Si es un bloque, lo devuelve + private BlockStmt convertirEnBloque(Statement statement) + { + if (statement instanceof BlockStmt) + return (BlockStmt) statement; + + BlockStmt block = new BlockStmt(); + NodeList blockStmts = new NodeList(); + blockStmts.add(statement); + + block.setStatements(blockStmts); + + return block; + } + +} diff --git a/src/main/res/config.properties b/src/main/res/config.properties new file mode 100644 index 0000000..02de32c --- /dev/null +++ b/src/main/res/config.properties @@ -0,0 +1,23 @@ +############################################################## +# Linux Configurations # +############################################################## +# The dir. where temporary files will be created. +tempDirForLinux = /tmp +# Where is your dot program located? It will be called externally. +dotForLinux = /usr/bin/dot + +############################################################## +# Windows Configurations # +############################################################## +# The dir. where temporary files will be created. +tempDirForWindows = c:/temp +# Where is your dot program located? It will be called externally. +dotForWindows = "c:/Program Files (x86)/Graphviz 2.28/bin/dot.exe" + +############################################################## +# Mac Configurations # +############################################################## +# The dir. where temporary files will be created. +tempDirForMacOSX = /tmp +# Where is your dot program located? It will be called externally. +dotForMacOSX = /usr/local/bin/dot diff --git a/src/test/res/ejemplos/Bucles_1.java b/src/test/res/ejemplos/Bucles_1.java new file mode 100755 index 0000000..f3f00eb --- /dev/null +++ b/src/test/res/ejemplos/Bucles_1.java @@ -0,0 +1,16 @@ +package ejemplos; + +public class Bucles_1 { + + public static void main(String[] args) + { + // BUCLE WHILE (sin anidamiento) + int x=1; + while (x<=10) + { + System.out.print(x); + x++; + } + System.out.println(); + } +} diff --git a/src/test/res/ejemplos/Bucles_2.java b/src/test/res/ejemplos/Bucles_2.java new file mode 100755 index 0000000..60d4e51 --- /dev/null +++ b/src/test/res/ejemplos/Bucles_2.java @@ -0,0 +1,24 @@ +package ejemplos; + +public class Bucles_2 { + + public static void main(String[] args) + { + // BUCLE WHILE anidado a otro WHILE + System.out.println("Empieza bucle WHILE anidado a otro WHILE:"); + int x=1; + char y='a'; + while (x<=10) + { + System.out.print(" "+x); + y='a'; + while (y<='c') + { + System.out.print(" "+y); + y++; + } + x++; + } + System.out.println(); + } +} diff --git a/src/test/res/ejemplos/Bucles_3.java b/src/test/res/ejemplos/Bucles_3.java new file mode 100755 index 0000000..fedefc7 --- /dev/null +++ b/src/test/res/ejemplos/Bucles_3.java @@ -0,0 +1,37 @@ +package ejemplos; + +public class Bucles_3 { + + public static void main(String[] args) { + int x; + + // BUCLE FOR (sin anidamiento) + System.out.println("Empieza bucle FOR:"); + for (x=1;x<=10;x++) + { + System.out.print(" "+x); + } + System.out.println(); + + // BUCLE WHILE (sin anidamiento) + System.out.println("Empieza bucle WHILE:"); + x=1; + while (x<=10) + { + System.out.print(" "+x); + x++; + } + System.out.println(); + + // BUCLE DO WHILE (sin anidamiento) + System.out.println("Empieza bucle DO WHILE:"); + x=1; + do{ + System.out.print(" "+x); + x++; + } + while (x<=10); + System.out.println(); + + } +} diff --git a/src/test/res/ejemplos/Bucles_4.java b/src/test/res/ejemplos/Bucles_4.java new file mode 100755 index 0000000..0d844b3 --- /dev/null +++ b/src/test/res/ejemplos/Bucles_4.java @@ -0,0 +1,41 @@ +package ejemplos; + +public class Bucles_4 { + + public static void main(String[] args) + { + int x=1; + + //Bucle 1: Contador + while (x<10) + { + System.out.println(x); + x++; + } + + //Bucle 2: Sumatorio + int suma=0; + int y=1; + while (y<10) + { + suma += y; + y++; + } + System.out.println(suma); + + //Bucle 3: Sumatorio + int sumatorio = 0; + int min = 10; + int max = 100; + for (int num = min; num <= max; num++) + { + sumatorio += num; + } + System.out.println(sumatorio); + + int count = 0; + while (count < 10) + count++; + System.out.println(count); + } +} \ No newline at end of file diff --git a/src/test/res/ejemplos/Bucles_5.java b/src/test/res/ejemplos/Bucles_5.java new file mode 100755 index 0000000..b8558cd --- /dev/null +++ b/src/test/res/ejemplos/Bucles_5.java @@ -0,0 +1,52 @@ +package ejemplos; + +public class Bucles_5 { + + public static void main(String[] args) { + int x = 0; + char y = '0'; + + // BUCLE FOR anidado a otro FOR + System.out.println("Empieza bucle FOR anidado a otro FOR:"); + for (x=1;x<=10;x++) + { + System.out.print(" "+x); + for (y='a';y<='c';y++) + { + System.out.print(" "+y); + } + } + System.out.println(); + + // BUCLE WHILE anidado a otro WHILE + System.out.println("Empieza bucle WHILE anidado a otro WHILE:"); + x=1; + while (x<=10) + { + System.out.print(" "+x); + y='a'; + while (y<='c') + { + System.out.print(" "+y); + y++; + } + x++; + } + System.out.println(); + + // BUCLE FOR anidado a bucle DO WHILE + System.out.println("Empieza bucle FOR anidado a bucle DO WHILE:"); + x=1; + do{ + System.out.print(" "+x); + for (y='a';y<='c';y++) + { + System.out.print(" "+y); + } + x++; + } + while (x<=10); + System.out.println(); + + } +} diff --git a/src/test/res/ejemplos/Bucles_6.java b/src/test/res/ejemplos/Bucles_6.java new file mode 100644 index 0000000..a6df9d8 --- /dev/null +++ b/src/test/res/ejemplos/Bucles_6.java @@ -0,0 +1,27 @@ +package ejemplos; + +public class Bucles_6 { + + public static void main(String[] args) + { + // BUCLE WHILE (sin anidamiento) + System.out.println("Empieza bucle WHILE:"); + int x=1; + while (x<=10) + { + System.out.print(" "+x); + x++; + while (x<=10) + { + System.out.print(" "+x); + x++; + } + } + while (x<=10) + { + System.out.print(" "+x); + x++; + } + System.out.println(); + } +} diff --git a/src/test/res/ejemplos/Test_1.java b/src/test/res/ejemplos/Test_1.java new file mode 100644 index 0000000..9e387eb --- /dev/null +++ b/src/test/res/ejemplos/Test_1.java @@ -0,0 +1,13 @@ +package ejemplos; + +public class Test_1 { + + public static void main(String[] args) + { + System.out.println("HOLA mundo"); + int x=1; + x=2; + x=3; + x=4; + } +} diff --git a/src/test/res/ejemplos/Test_2.java b/src/test/res/ejemplos/Test_2.java new file mode 100644 index 0000000..4c4ee06 --- /dev/null +++ b/src/test/res/ejemplos/Test_2.java @@ -0,0 +1,14 @@ +package ejemplos; + +public class Test_2 { + + public static void main(String[] args) + { + int x=1; + x++; + ++x; + int y=0; + x=x+y; + System.out.println(x); + } +} diff --git a/src/test/res/ejemplos/Test_3.java b/src/test/res/ejemplos/Test_3.java new file mode 100644 index 0000000..3d723af --- /dev/null +++ b/src/test/res/ejemplos/Test_3.java @@ -0,0 +1,14 @@ +package ejemplos; + +public class Test_3 { + + public static void main(String[] args) + { + int x=1; + + if (x==1) + x=2; + x=3; + x=4; + } +} diff --git a/src/test/res/ejemplos/Test_4.java b/src/test/res/ejemplos/Test_4.java new file mode 100644 index 0000000..60b318f --- /dev/null +++ b/src/test/res/ejemplos/Test_4.java @@ -0,0 +1,21 @@ +package ejemplos; + +public class Test_4 { + + public static void main(String[] args) + { + int x=1; + + if (x==1) + { + x=2; + if (x>=1) + { + x=3; + x=4; + } + } + x=5; + x=6; + } +} diff --git a/src/test/res/ejemplos/Test_5.java b/src/test/res/ejemplos/Test_5.java new file mode 100644 index 0000000..1b3fec3 --- /dev/null +++ b/src/test/res/ejemplos/Test_5.java @@ -0,0 +1,22 @@ +package ejemplos; + +public class Test_5 { + + public static void main(String[] args) + { + int x=1; + + if (x==1) + { + x=2; + if (x>=1) + { + x=3; + x=4; + } + x=5; + } + x=6; + x=7; + } +} diff --git a/src/test/res/ejemplos/Test_6.java b/src/test/res/ejemplos/Test_6.java new file mode 100644 index 0000000..d47ef13 --- /dev/null +++ b/src/test/res/ejemplos/Test_6.java @@ -0,0 +1,21 @@ +package ejemplos; + +public class Test_6 { + + public static void main(String[] args) + { + int x=1; + + if (x==1) + { + x=2; + x=3; + } + else + { + x=4; + x=5; + } + x=6; + } +} diff --git a/src/test/res/ejemplos/Test_7.java b/src/test/res/ejemplos/Test_7.java new file mode 100644 index 0000000..eb81fb6 --- /dev/null +++ b/src/test/res/ejemplos/Test_7.java @@ -0,0 +1,23 @@ +package ejemplos; + + +public class Test_7 { + + public static void main(String[] args) + { + int x=1; + + if (x==1) + { + x=2; + } + else x=3; + x=4; + if (x==2) + { + x=5; + } + else if (x==3) x=6; + x=7; + } +} diff --git a/src/test/res/ejemplos/Test_8.java b/src/test/res/ejemplos/Test_8.java new file mode 100644 index 0000000..839774a --- /dev/null +++ b/src/test/res/ejemplos/Test_8.java @@ -0,0 +1,22 @@ +package ejemplos; + +public class Test_8 { + + public static void main(String[] args) + { + int x=1; + + if (x==1) + { + x=2; + } + x=5; + x=6; + if (x==2) + { + x=7; + } + if (x==3) x=8; + x=9; + } +} diff --git a/src/test/res/ejemplos/Test_9.java b/src/test/res/ejemplos/Test_9.java new file mode 100644 index 0000000..a636299 --- /dev/null +++ b/src/test/res/ejemplos/Test_9.java @@ -0,0 +1,41 @@ +package ejemplos; + +public class Test_9 { + + + public static void main(String[] args) + { + // ANIDAMIENTO de IF y WHILE + + // ANIDAMIENTO de IF y WHILE 2 + + int x=0; + if (x>1) + { + x=1; + while (x>2) + { + x=2; + while (x>3) + { + x=3; + if (x>4) + { + x=4; + if (x>5) + { + x=5; + } + x--; + } + x--; + } + x--; + } + x--; + } + + x--; + + } +}