Hoy os traigo la solución al examen parcial de concurrencia que hemos hecho. Los enunciados estaban en papel por lo que no puedo dároslos, pero es tan simple que no cuesta trabajo explicarlo ;)
El examen pedía crear una class a la cual le pasáramos al menos como parámetro un entero n (Nota: Al menos significa que podemos meterle más cosas) y, de una matriz creada en el main, tomara la fila n y la pusiera en la columna n en otra matriz llamada matrizt y que sería su traspuesta.
El main creará matrices de tamaño y valores aleatorios y, mediante concurrencia con ésta class, creará su traspuesta. Luego la mostrará por pantalla.
Creo que no es muy difícil no? Bueno, si tenéis alguna duda preguntadme ;)
Aquí os dejo lo que hice en el examen:
import java.util.Random; public class examen extends Thread{ /** * @param args */ private static int[][]inicial; private static int[][]acabada; //volatile?? private int n; public examen( int row, int[][]fila, int[][]matrix) { inicial = fila; acabada = matrix; n = row; } public void run() { for(int i = 0; i<inicial[n].length; i++) { acabada[i][n] = inicial[n][i]; } } public static void main(String[] args) { // TODO Auto-generated method stub int max = 9; //Número maximo que pueden tomar los valores, así como filas y columnas Random rnd = new Random(); int filas = rnd.nextInt(max)+1; System.out.println("Filas: "+ filas); int columnas = rnd.nextInt(max+1); //Dará elementos de 0 a 10 System.out.println("Columnas: "+ columnas); int[][] matriz =new int [filas][columnas]; //Ahora rellenamos la matriz for(int f = 0; f < filas; f++) { for(int c = 0; c < columnas; c++) { matriz[f][c] = rnd.nextInt(max)+1; //Imprimo matriz inicial System.out.print(matriz[f][c]+ " "); } System.out.println(); } int[][] matrizt = new int [columnas][filas]; //Ya están definidos todos los valores if(filas!=0 && columnas!=0) { //Por si alguno de los valores es 0, No gasta recursos en vano. //Creamos array de threads para cada fila examen[] threads = new examen[filas]; for(int i = 0; i< filas; i++) { threads[i] = new examen(i, matriz, matrizt); threads[i].start(); } for(int i = 0; i< filas; i++) { try { threads[i].join(); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } //Ya ha acabado de crear la matriz así que la imprimimos System.out.println("\n\n"); for(int f = 0; f < columnas; f++) { for(int c = 0; c <filas; c++) { System.out.print(matrizt[f][c]+ " "); } System.out.println(); } } }Espero que no os haya costado demasiado. Si os soy sincero lo que más me costó fue la impresión de la traspuesta (lo que tiene el obcecarse en un for que está mal y no darse cuenta xD) Saludos gente;)
No hay comentarios:
Publicar un comentario