Originariamente inviato da John360
scusami, comunque intendo miglioramenti visivi... non so se mi spiego, l'algoritmo è giusto però mi sembra scritto male....
Manca qualche test.

A me è venuta questa soluzione:
codice:
    public static boolean isQM(int M[][]){
    	if( M.length != M[0].length )
    		return false;
    	
    	int n = M.length, m = M[0].length;
    	int c = 0, diagpsum = 0, diagssum = 0;
    	
    	// test righe e colonne
	for(int i = 0; i < n; i++) {
		int rowsum = 0, colsum = 0;
   		for(int j = 0; j < m; j++) {
       		rowsum += M[i][j];
       		colsum += M[j][i];
       		diagpsum += (i == j) ? M[i][j] : 0;
   		}
   		c = (i == 0) ? rowsum : c;
   			
   		if ( c != rowsum || c != colsum )
      		return false;
	}
		
	// test diagonale principale
	if ( c != diagpsum )
		return false;
		
	// test diagonale secondaria
	int row = 0, col = m - 1;
	while( row - col < m ) 
     	diagssum += M[row++][col--];

	return c == diagssum;
    }