// 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
			{
				System.out.println("Your row " + ii + " is too large. Minimum value returned.");
            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
			{
				System.out.println("Your column " + ii + " is too large. Minimum value returned.");
            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 
			else
			{
				System.out.println("Your row " + ii + " is too large. Minimum value returned.");
				highest = Double.MIN_VALUE;
			} 
         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
   		else
			{
				System.out.println("Your row " + ii + " is too large. Minimum value returned.");
				lowest = Double.MIN_VALUE;
			} 
         return lowest;
      
      
      }// end getLowestInRow
   
   } // end class