Reputation: 25
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
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