Hello everybody !
voila j’ai crée une class matrix :
import fr.jussieu.script.Deug;
class Matrix{
int [][] m1;
int[][] m2;
public Matrix(int[][] a, int[][] b){
m1=a; m2=b;
}
J’aimerais à présent écrire une fonction faisant la comme de deux matrices:
public int[][] somme(Matrix m){
int[][] res=new int[m1.length][];
/* LES DEUX MATRICES DOIVENT ÊTRE DE MEME TYPE */
for(int i=0; i<m1[i].length;i++){
if(m1.length!=m2.length || m1[i].length!= m2[i].length) Deug.exit(); }
for(int i=0;i<m1.length;i++){
for(int j=0;j<this.m1[i].length;j++) res[i][j]=m1[i][j]+m2[i][j]; }
return res;
}
à la compil aucune erreur mais a l’exécution j’ai :
"java.lang.ArrayIndexOutOfBoundsException: 2
at matrix.Matrix.somme(Main.java:19)
at matrix.Main.main(Main.java:50)
Exception in thread "main"
Java Result: 1 " 
donc si qqun voit où est l’erreur
…
Merci !
A priori ton modèle est mal fait :
public class Matrix {
private final int[][] data;
public Matrix(int[][] data) {
this.data = data;
}
public Matrix sum(Matrix m) {
if (m.data.length != data.length) {
throw new IllegalArgumentException(
'Matrice de taille invalide pour la somme (reçue ' +
m.data.length + ', attendue: ' + data.length + ')');
}
int[][] p = new int[data.length][];
for (int i = 0; i < data.length; ++i) {
if (m.data[i].length != data[i].length) {
throw new IllegalArgumentException(
'Ligne de taille invalide pour la somme (index: ' + i + ', reçue ' +
m.data[i].length + ', attendue: ' + data[i].length + ')');
}
p[i] = new int[data[i].length]; // sinon ne marche pas
for (int j = 0; j < data[i].length; ++j) {
p[i][j] = data[i][j] + m.data[i][j];
}
}
return new Matrix(p);
}
}
Plusieurs trucs:
- On ne fait pas un exit en cas d’erreur, on jette une exception adhoc.
- Les matrices sont des éléments de taille n * m. A priori, tu peux stocker deux entiers pour indiquer la taille, ce afin d’éviter de faire le test dans la boucle.
- Quand tu as une exception, tu vas sur la javadoc histoire de savoir à quoi elle correspond :
http://java.sun.com/javase/6/docs/api/java…sException.html
En gros, tu fais a[654656] alors que la taille de a c’est mettons 2 : il peut pas accéder à l’index donné, logique.
Voilà.
oks! Merci bcp ! 
je ne connaissais pas le "throw new…" , je me suis documenter, merci !
throw, try, catch, finally. C’est le mécanisme d’exception de java tout simplement;
et throws avec un S sur une méthode, pour remonter l’exception au niveau supérieur 