日期:2014-05-20  浏览次数:20732 次

新手问一个关于数组的问题,谢谢大家捧场

public class shuzutwo3 {
int grades[][]={
{37,78,96,43},
{26,17,99,11},
{40,90,86,81}
};
public static void main(String args[]){
shuzutwo3 m=new shuzutwo3();
System.out.println("最小的数:"+m.minimum());
System.out.println("最大的数:"+m.maximum());
}
public int minimum(){
int lowGrade=grades[0][0];
for(int row=0;row<grades.length;row++){
for(int column=0;column<grades [row].length;column++){
if(grades[row][column]<lowGrade)
lowGrade=grades[row][column];
}
}
return lowGrade;
}
public int maximum(){
int highGrade=grades[0][0];
for(int row=0;row<grades.length;row++){
for(int column=0;column<grades [row].length;column++){
if(grades[row][column]>highGrade)
highGrade=grades[row][column];
}
}
return highGrade;
}

}
这里面的highGrade=grades[0][0]是不是指的37
然后后面的return LowGrade和highGrade返回的值分别是是比37小的和比37大的值吗?
最后这一步:System.out.println("最小的数:"+m.minimum());
  System.out.println("最大的数:"+m.maximum());
是怎么得来的啊?
  希望能够得到大家的指点,谢谢!!

------解决方案--------------------
grades[0][0]=37是对的,
mininum和maxinum是返回最小的和最大的数值,
这是通过比较得出的结果。
对于返回最小值的比较的原理是这样的,首先是,假设grades[0][0]=37是最小的,然后通过循环来比较,如果碰到比它更小的就把更小的那个值赋给它(lowGrade)

对于最大值的原理也是一样的。
------解决方案--------------------
grades[0][0]=37。
你那个程序就是通过两层for循环,依次对比每个数,并分别把最小数和最大数用个变量存储起来作为返回值。

Java code

// 可以不用那么麻烦,下面是我想的,当然肯定还有更简单的方法。
Integer grades[][] = { { 37, 78, 96, 43 }, { 26, 17, 99, 11 },
                { 40, 90, 86, 81 } };
         List<Integer[]> a =  Arrays.asList(grades); //将二维数组转化为集合
         List<Integer> b = new ArrayList<Integer>();
         for(Integer[] x:a){
             for(Integer y:x){
                 b.add(y);  // 将全部数字放一个集合中
             }
         }
        System.out.println(Collections.max(b)); //使用jdk提供的工具方法来求最大,最小值。
        System.out.println(Collections.min(b));