A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 杨兴庭 于 2013-8-7 13:16 编辑



  1. //输出二维数组中的最小值
  2. class GetMin
  3. {
  4. public static void main(String[] args)
  5. {
  6.   System.out.println(getMin());
  7. }
  8. public static int getMin()
  9. {
  10.   int[][] arr={{21,4,33,7,5},{65,34,7,9},{33,45,3}};
  11.   int x,y;int temp=0;
  12.   int[] a=new int[3];
  13.   for(x=0;x<arr.length-1;x++)
  14.   {
  15.    for(y=0;y<arr[x].length-1;y++)
  16.     {
  17.      if(arr[x][y]<arr[x][y+1])
  18.       temp=y;
  19.      else
  20.       temp=y+1;
  21.     }
  22.     a[x]=arr[x][temp];
  23.   }
  24.   
  25.   return Math.min(Math.min(a[0],a[1]),Math.min(a[1],a[2]));
  26. }
  27. }
复制代码
/*运行结果是0,我觉得可能是返回了数组中某个初始化为null的数据。

小弟刚刚开始学,请指导下,谢谢。
*/

评分

参与人数 1技术分 +1 收起 理由
杨兴庭 + 1

查看全部评分

7 个回复

倒序浏览
本帖最后由 刘劲松 于 2013-8-7 10:15 编辑

现在想想,应该是最后的二维数组直接赋值给一维数组,出现的错误。我原来以为arr[x][temp]只是数组的元素值,然而,在内存里面存储,arr放在栈,元素值放在堆分配的空间里,arr[x][temp]是指向堆中数据,,一维数组a[3]在堆里面分配的空间是顺序的,二维数组里面求得的三个min值存放不是顺序的。。。好吧我凌乱了,大神点拨~~
回复 使用道具 举报
这种方法写的代码阅读性太差。可以先定义一个获得某个一维数组中最大值的方法,然后对二维数组中的每个元数组调用这个方法得到每个元数组的最大值,把这几个最大值再存到一个数组中,最后再调用这个方法即可
回复 使用道具 举报
薛淑凯 发表于 2013-8-7 10:14
这种方法写的代码阅读性太差。可以先定义一个获得某个一维数组中最大值的方法,然后对二维数组中的每个元数 ...

刚刚开始写代码,写得不好,见笑,但是我的思路也是你那样的,内循环里面其实就是在对一维如arr[0],arr[1],arr[2]里面的元素进行比较。
回复 使用道具 举报
刘劲松 发表于 2013-8-7 10:20
刚刚开始写代码,写得不好,见笑,但是我的思路也是你那样的,内循环里面其实就是在对一维如arr[0],arr[1 ...

都是这样子过来的,你试试把方法封装了再调用,容易阅读找错
回复 使用道具 举报
薛淑凯 发表于 2013-8-7 10:27
都是这样子过来的,你试试把方法封装了再调用,容易阅读找错

好的,我试试。谢谢了。
回复 使用道具 举报
来来 看看这种方法
  1. import java.util.Arrays;
  2. class Test{
  3.         public static void main(String[] args) {
  4.                 int[][] a=new int[][]{{21,4,33,7,5},{65,34,7,9},{33,45,3}};
  5.                 System.out.println("max value1 is:" + getMax_1(a));
  6.                 System.out.println("max value2 is:" + getMax_2(a));
  7.         }
  8. /*
  9. 方法1:遍历二维数组的所有的元素与当前最大的值比较,并记录
  10. */
  11. static int getMax_1(int[][] a){
  12.         int maxValue = 0;//用于记录当然最大值
  13.         if(a!=null && a.length!=0)
  14.         for (int[] a1 : a) {
  15.                 for (int i : a1) {
  16.                         if(maxValue<i)maxValue = i;
  17.                         }
  18.                 }
  19.                 return maxValue;
  20.         }

  21. /*
  22. 方法2:对子数组进行排序,然后比较子数组中最大的值。当然这里只求最大值也没必要排序-_-!!,只是体现了一种思想
  23. */
  24. static int getMax_2(int[][] a){
  25.         int maxValue = 0;
  26.         if(a!=null && a.length!=0)
  27.         for (int[] a1 : a) {
  28.                 Arrays.sort(a1);//对a1进行排序,升序的
  29.                 if(maxValue<a1[a1.length-1])maxValue = a1[a1.length-1];//比较子数组中最大的值
  30.                 }
  31.                 return maxValue;
  32.         }
  33. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
杨兴庭 + 1

查看全部评分

回复 使用道具 举报
黄兴旺 发表于 2013-8-7 10:42
来来 看看这种方法

哈,明白了。。谢谢了。我上午用了第二个运行好了:)
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马