// has debug info commented out
public class Array2D
{


public static double getTotal(double [][]matrix)
{    double sum;
     sum = 0;
   
       for (int i = 0; i < matrix.length; i++)
		    for (int j = 0; j < matrix[i].length; j++)
			 {  
			   sum = sum + matrix[i][j];
			 //  System.out.println ("matrix[" + i + "], [" + j + "] is " + 
				 //  matrix[i][j] + " and current sum is " + sum);
			 }   
		return sum;	 
} // end getTotal

public static double getAverage (double [] [] matrix)
//    result = Array2D.getAverage(matrix);
{
      double average;
      double sum;
		int numRows, numCols;
		
		sum = getTotal (matrix);
	//	System.out.println (" in getAverage, total of elements is " + sum);
		numRows = matrix.length;
//		System.out.println (" in getAverage, number of rows is " + numRows);
		numCols = matrix[numRows-1].length;
	//	System.out.println (" in getAverage, number of columns is " + numCols);
      
		average = sum / (numRows*numCols);
  //    System.out.println (" total number of elements is " + numRows * numCols);
	//	System.out.println (" average is " + average);
		return average;
}// end getAverage

   public static double getRowTotal (double [] [] matrix, int ii)
	//	         result = Array2D.getRowTotal(matrix, ii);
{
     double rowTotal;
	  rowTotal = 0.0;
	  
	 // System.out.println ("ii is " + ii);
     if (ii < matrix.length)
	  {
  	     for (int i = 0;i < matrix[ii].length; i++)
	     {
	  //     System.out.println (" number of columns in row " + ii + " is " + 
	   //      matrix[ii].length) ;
  			rowTotal = rowTotal + matrix[ii][i];
      //   System.out.println (" current matrix value is " + matrix[ii][i]);
	     // System.out.println (" current sum is " + rowTotal);
         }
		}	
     else
	     rowTotal = Double.MIN_VALUE;
     return rowTotal;
	  

} // end getRowTotal


    public static double getColumnTotal (double [][] matrix, int ii)
//       result = Array2D.getColumnTotal(matrix, ii);
{ 
       double colTotal;
       colTotal = 0.0;
        
		// System.out.println (" column is " + ii);
	    if  (ii < matrix[0].length)
		 {  
  		    for (int i = 0; i < matrix.length; i++)
			 {
		        colTotal = colTotal + matrix[i][ii];
			 //    System.out.println (matrix[i][ii] + " makes column total " + colTotal);	  
			 }	  
		 }
		 else
		    colTotal = Double.MIN_VALUE; 	 

     return colTotal ;
} // end getColumnTotal

    public static double getHighestInRow (double [] [] matrix, int ii)
	 //        result = Array2D.getHighestInRow(matrix, ii);
{   
    double highest;
    highest = Double.MIN_VALUE;
   // System.out.println ("ii is " + ii);
     if (ii < matrix.length)
	 
  
    for (int i = 0; i < matrix[ii].length;i++)
	 {
	    if (matrix [ii][i]> highest)
		    highest = matrix[ii][i]; 
   //   System.out.println (matrix[ii][i] + " makes highest : " + highest);	  
     } // end for  
	 return highest;
} // end getHighestInRow

   public static double getLowestInRow (double [] [] matrix, int ii)
//     result = Array2D.getLowestInRow(matrix, ii);
   {
       double lowest;
		 lowest = Double.MAX_VALUE;
	//	  System.out.println ("ii is " + ii);
     if (ii < matrix.length)
	 
		 for (int i = 0; i < matrix[ii].length; i++)
	    {
	    if (matrix [ii][i]< lowest)
		    lowest = matrix[ii][i]; 
  //     System.out.println (matrix[ii][i] + " makes lowest : " + lowest);	  
       }// end for
	   return lowest;


}// end getLowestInRow

} // end class