/**
 * Une classe definissant une matrice carree
 * @author Luc Dartois
 * @version 1.0
 */
public class MatriceCarre{
	private int n; //taille de la matrice
	private int[][] m; //La matrice

/**
 * Constructeur creant une matrice vide
 *@param t La taille de la matrice
 */
	public MatriceCarre(int t){
		this.n=t;
		this.m=new int[t][t];
	}
/**
 * Constructeur copiant une matrice donnee dans une nouvelle matrice
 *@param a La matrice à copier
 */	
	public MatriceCarre(MatriceCarre a){
		this.n=a.n;
		this.m=new int[this.n][this.n];
		for(int i=0;i<this.n;i++){
			for(int j=0;j<this.n;j++){
				this.m[i][j]=a.m[i][j];
			}
		}
	}	
/**
 * Methode permettant de definir le coefficient d'une matrice
 *@param i Le coefficient de ligne
 *@param j Le coefficient de colonne
 *@param val La valeur du coefficient
 */
	public void setCoeff(int i,int j,int val){
	if(i>=this.n||j>=this.n||i<0||j<0){
		throw new IllegalArgumentException("Erreur : Hors limites de la matrice.");
	}
		this.m[i][j]=val;
	}
/**
 * Methode permettant de recuperer le coefficient d'une matrice
 *@param i Le coefficient de ligne
 *@param j Le coefficient de colonne
 *@return Le coefficient
 */
	public int getCoeff(int i,int j){
	if(i>=this.n||j>=this.n||i<0||j<0){
		throw new IllegalArgumentException("Erreur : Hors limites de la matrice.");
	}
	return this.m[i][j];		
	}

	public String toString(){
		String 	s="  ";
	for(int j=0;j<this.n;j++){
			s+="| "+j;
	}
	s+="|\n";
	for(int i=0;i<this.n;i++){
		s+=i+" | ";
		for(int j=0;j<this.n;j++){
			s+=this.m[i][j]+"| ";
		}
		s+="\n";
	}
	return s;
	}

	public boolean equals(MatriceCarre a){
		if(this.n!=a.n)
			return false;

		for(int i=0;i<this.n;i++){
			for(int j=0;j<this.n;j++){
				if(this.m[i][j]!=a.m[i][j])
				return false;
			}
		}
		return true;
	}

}
