黑马程序员技术交流社区

标题: 求出二维数组的最小元素。 [打印本页]

作者: 杨道红    时间: 2013-12-21 16:30
标题: 求出二维数组的最小元素。
本帖最后由 杨道红 于 2013-12-21 20:30 编辑

public class Min1 {
        public static void main(String[] args){
                int[][] arr = {{3,4,6,9,2},{12,3,6,4,5},{9,5,3,7},{7,3,1,5}};//定义一个二维数组
                int x=0;
                int y=0;//初始化操作,xy为下标
                for(int i = 0 ; i < arr.length; i++){        //一个for循环,获取每行的最小值
                        int min1=getMin(arr);        //将每行的最小值赋给min1;
                        if(arr[x][y]>arr[min1])        //如果每行的最小值比初始化的最小值还小,就交换
                        {
                                change(x,i);
                                change(y,min1);
                        }
                }
                System.out.println(x+""+y);
                System.out.println("最小元素为:"+arr[x][y]);
        }
        public static int getMin( int[] arr){
                int min=0;
                for(int i = 1 ; i < arr.length; i++){
                        if(arr<arr[min]){
                                change(i,min);
                        }
                }
                return min;
        }
        public static void change(int a ,int b){
                int temp = a;
                a = b;
                b = temp;
        }
}
哪里问题?


作者: 刘松703    时间: 2013-12-21 17:18
  1. public class Demo {
  2.         public static void main(String[] args) {
  3.                   int[][] arr = {{3,4,6,9,2},{12,3,6,4,5},{9,5,3,7},{7,3,1,5},{22}};
  4.                 int temp = arr[0][0];
  5.                 for(int i=0;i<arr.length;i++){
  6.                         for(int j=0;j<arr[i].length;j++){
  7.                                 //System.out.print(arr[i][j]+" ");//输出a[i][]的所有数字
  8.                                 if(temp>arr[i][j]){
  9.                                         temp = arr[i][j];
  10.                                 }
  11.                         }
  12.                         //System.out.println();
  13.                 }
  14.                
  15.                 System.out.println("最小数为:"+temp);
  16.         }
  17. }
复制代码


你看看这种方法把,其实你只要会输出二维数组,就能得到其最小值;
作者: 代文娟    时间: 2013-12-21 17:26
下面是我写的比较二维数组的代码,希望对你有帮助:
  1. public static void main(String[] args) {
  2.                 // TODO Auto-generated method stub
  3.                   int[][] arr = {{3,4,6,9,2},{12,3,6,4,5},{9,5,3,7},{7,3,3,5}};
  4.                   System.out.println(getMin(arr));
  5.         }
  6.         public static int getMin(int[][] arr)
  7.         {
  8.                 int [] chs=new int[arr.length];;
  9.                 int m=0;
  10.                 for(int i=0;i<arr.length;i++)
  11.                 {
  12.                         int min1=arr[i][0];
  13.                         for(int j=1;j<arr[i].length;j++)
  14.                         {
  15.                                  if(arr[i][j]<min1)
  16.                                  {
  17.                                          int temp=arr[i][j];
  18.                                          arr[i][j]=min1;
  19.                                          min1=temp;
  20.                                  }
  21.                         }
  22.                         chs[m++]=min1;
  23.                 }
  24.                 int min2=chs[0];
  25.                 for(int n=1;n<chs.length;n++)
  26.                 {
  27.                        
  28.                          if(chs[n]<min2)
  29.                          {
  30.                                  int temp2=chs[n];
  31.                                  chs[n]=min2;
  32.                                  min2=temp2;
  33.                          }
  34.                 }
  35.                 return min2;
  36.         }

  37. }
复制代码

作者: 杨道红    时间: 2013-12-21 17:42
代文娟 发表于 2013-12-21 17:26
下面是我写的比较二维数组的代码,希望对你有帮助:

我那代码就是最后定义的方法不对,我注释了一下,结果就对了
作者: 刘松703    时间: 2013-12-21 18:41
杨道红 发表于 2013-12-21 17:42
我那代码就是最后定义的方法不对,我注释了一下,结果就对了

其实你只是找二位数组的最小元素,只查找就可以,看你的代码里还有数据交换,这样没必要,效率不高
作者: 杨道红    时间: 2013-12-21 19:26
刘松703 发表于 2013-12-21 18:41
其实你只是找二位数组的最小元素,只查找就可以,看你的代码里还有数据交换,这样没必要,效率不高 ...

查找不要比较么?比较完不要交换?我想交换的是下标~
作者: 刘松703    时间: 2013-12-21 20:05
杨道红 发表于 2013-12-21 19:26
查找不要比较么?比较完不要交换?我想交换的是下标~

又不是排序,只是找到最小元素就可以,交换干嘛?
作者: 杨道红    时间: 2013-12-21 20:29
刘松703 发表于 2013-12-21 20:05
又不是排序,只是找到最小元素就可以,交换干嘛?

o,明白了,谢谢
作者: 次长风    时间: 2013-12-22 19:46
你这样太麻烦了,我感觉用冒泡排序法不更简单
作者: 杨道红    时间: 2013-12-24 22:32
次长风 发表于 2013-12-22 19:46
你这样太麻烦了,我感觉用冒泡排序法不更简单

好吧,那你整一份代码给我借鉴一下哈。谢谢
作者: 汗血黑马    时间: 2014-3-3 11:40
我觉得是你方法定义错了!
    public static int getMin( int[] arr){//传进来的数组格式应该是arr[] a[].
                int min=0;
                for(int i = 1 ; i < arr.length; i++){
                        if(arr<arr[min]){//这里我就完全看不懂了! arr是一个数组吧,现在被你定义成值了,
                                             //  arr[0]=={3,4,6,9,2}.
                                change(i,min);//我这里被搞晕了,呵呵,只会指出错误,我也还在学习!




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2