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