Bonsoir tout le monde!
j'ai un souci à ce qui concerne les threads en java.
alors mon programme consiste à faire le calcul de deux matrices qui sont enregistrés déjà dans deux fichiers chacun est dans un fichier(là j'ai séparé entre les numéros des matrices avec des ";"). ces deux matrices sont carrés et se composent de 4 lignes et 4 colonnes pour chacun et on calcule leur produit qui va être enregistré par la suite dans un fichier déjà existant aussi dans notre projet java. Donc le calcule doit d’effectué en découpant d'abord chacun des deux matrices sur quatre parties (2 par 2) pour que le calcule du produit se devise sur 4 processus (chaque processus calcule une partie de la matrice résultante):
Alors voilà j'ai 3 class: class "Produit" où se trouve le calcule et qui hérite de la class thread, class "file" où se trouve des méthodes pour faire la lecture et l'écriture des fichiers ,et en fin la class "Test" qui contient le main .
j'ai 3 fichiers :
le 1er "m1.txt" =>contient le 1ere matrice
le 2em "m2.txt" =>contient la 2eme matrice
le 3em "m_rst.txt" =>contient la matrice resultante
exp de matrice :
1;2;4;12
12;2;5;7
5;8;9;4
0;1;6;8
class "file":
import java.io.*;
public class file {
private String nomfich;
private String sm1 [][]=new String[2][2];//Sous Matrice 1
private String sm2 [][]=new String[2][2];//Sous Matrice 2
private String sm3 [][]=new String[2][2];//Sous Matrice 3
private String sm4 [][]=new String[2][2];//Sous Matrice 4
public file(String nomfich){
this.nomfich=nomfich;
}
public file(){} //constructeur
public void Decoupage() throws IOException {
// lire une matrice à partir d'un fichier .txt et la divisé en 4 tableaux
String ligne ;
BufferedReader entree = new BufferedReader (new FileReader (nomfich)) ;
String t[][];
int j=0;
t=new String[4][4];
do
{ ligne = entree.readLine() ;
if (ligne != null){
t[j]=ligne.split(";");
j++;
}
}
while (ligne != null) ;
entree.close () ;
for(int i=0;i<=1;i++){
for (int k=0;k<=1;k++){
sm1[i][k]=t[i][k];
sm2[i][k]=t[i][k+2];
sm3[i][k]=t[i+2][k];
sm4[i][k]=t[i+2][k+2];
}}}
public String[][] getSM1(){
return sm1;
}
public String[][] getSM2(){
return sm2;
}
public String[][] getSM3(){
return sm3;
}
public String[][] getSM4(){
return sm4;
}
public synchronized static void Resultat(String R1[][],String R2[][],String R3[][],String R4[][]) throws IOException{
PrintWriter resultat;
resultat = new PrintWriter (new FileWriter ("m_rst.txt"));
for (int i=0;i<2;i++){
for (int j=0;j<1;j++){
resultat.println(R1[i][j]+" ; "+R1[i][j+1]+" ; "+R2[i][j]+" ; "+R2[i][j+1]);
}
}
for (int i=0;i<2;i++){
for (int j=0;j<1;j++){
resultat.println(R3[i][j]+" ; "+R3[i][j+1]+" ; "+R4[i][j]+" ; "+R4[i][j+1]);
}
}
resultat.close();
}
public void afficher() throws IOException {
System.out .println("----- "+nomfich+"-----");
String ligne ;
BufferedReader entree = new BufferedReader (new FileReader (nomfich)) ;
String t[][];
int j=0;
t=new String[4][4];
do
{ ligne = entree.readLine() ;
if (ligne != null){
System.out.println(ligne);
}
}
while (ligne != null) ;
entree.close () ;
System.out .println("----- Fin Matrice -----");
}}
et voilà la class "Produit":
import java.io.FileNotFoundException;
import java.io.PrintWriter;
public class Produit extends Thread{
String M1[][]=new String[2][2];
String M2[][]=new String[2][2];
String resultat[][]=new String[2][2];
public Produit(String M1[][],String M2[][]){
this.M1=M1;
this.M2=M2;
}
public void run() {
int produit ;
for (int i=0;i<2;i++){
for (int j=0;j<2;j++){
produit=0;
for (int k=0;k<2;k++){
produit=produit+(Integer.parseInt(M1[i][j])*Integer.parseInt(M2[i][k]));
}
resultat[i][j]=String.valueOf(produit);
} }}
}
et en fin la class "Test":
import java.io.*;
import java.util.Scanner;
public class Test {
public static void main(String[] args) throws IOException {
Scanner sc = new Scanner(System.in);
int choix;
String rep="oui";
file f1=new file();
file f2=new file();
//sleeeeeeeeep*************
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
//**************************
do{
System.out.println("^^^^^^^^^^^Calcule produit matriciel^^^^^^^^^^");
System.out.println(" 1=> Afficher les matrices");
System.out.println(" 2=> Calculer le produit des deux matrices");
System.out.println(" 3=> Afficher le résultat");
System.out.println("-----------------------");
choix=sc.nextInt();
switch(choix){
case 1 :
f1=new file("m1.txt");
f2=new file("m2.txt");
f1.afficher();
f2.afficher();
break;
case 2 :
f1.Decoupage();
f2.Decoupage();
Produit P1=new Produit(f1.getSM1(),f2.getSM1());
Produit P2=new Produit(f1.getSM2(),f2.getSM2());
Produit P3=new Produit(f1.getSM3(),f2.getSM3());
Produit P4=new Produit(f1.getSM4(),f2.getSM4());
//Démarage des 4 processus
P1.start();
P2.start();
P3.start();
P4.start();
//La création des résultats dans un fichier txt
file.Resultat(P1.resultat, P2.resultat, P3.resultat, P4.resultat);
break;
case 3 :
file prd=new file("m_rst.txt");
prd.afficher();
break;
}
System.out.println("Voulez-vous continuer Oui/Non !!");
rep=sc.next();
}while(rep!="oui");
}}
Je crois que le probleme est dans la class du Test lors de l'utilisation de methose start()
Heeeeeeelp
Merci