ArtG
ArtG

Reputation: 25

min and max value in 2d array java

I want to output max and min value of 2d array. Max works well, but min always outputs zero even when theres no zeros in array.I set Math.random() to 99 to prevent smaller chance to get zero in array for this example. Heres full code:

public class e {

public static void main(String[] args)   {

    int a[][] = new int [5][5];
    int l = a[0][0];
    int m = a[0][0];
    int i,j,r,k;


    for(i=0;i<a.length;i++)                   // 
        for(j=0;j<a[i].length;j++){           // 2d array random number generator
            a[i][j] =(int)(Math.random()*99); //
         }
    for(i=0;i<a.length;i++){               //
        for(j=0;j<a[i].length;j++)         //
                                           // create 2d array and output it
    System.out.print(a[i][j] + "\t");      //   
    System.out.println();                  //

}
    System.out.println("\t"); 
        for(r=0;r<a.length;r++){           //
            for(k=0;k<a.length;k++)        //
                if(a[r][k] < m){           // finds a min value
                    m = a[r][k];           //

            }
        }

    System.out.println("\t");               // 
        for(i=0;i<a.length;i++){            //
            for(j=0;j<a.length;j++)         // finds a max value
                if(a[i][j] > l){            //
                    l = a[i][j];            //

            }
        }
    System.out.println("min value is " + m); //outputs min value
    System.out.println("max value is " + l); // outputs max value
            }
       }

Upvotes: 2

Views: 8837

Answers (1)

Andy Turner
Andy Turner

Reputation: 140309

Because of the way you choose the random values in a, there will be no value less than zero - but there is also no guarantee that any of the values will be exactly zero. However, you initialize m to be zero, since that is the default value of the array elements; nothing can be smaller than this, so the answer is always zero.

You should initialize your m = a[0][0] immediately before you start the outer for loop in the block labelled "finds a min value", i.e.

    m = a[0][0];
    for(r=0;r<a.length;r++){           //
        for(k=0;k<a.length;k++)        //
            if(a[r][k] < m){           // finds a min value
                m = a[r][k];           //

        }
    }

Alternatively, you can set m = Integer.MAX_VALUE (and l = Integer.MIN_VALUE), since these are guaranteed to have values smaller and larger than them, respectively.

Upvotes: 4

Related Questions