找出一个二维数组的鞍点,
即该位置上的元素的在该行上最
大,在列上最小。也可能没有鞍点。
   二维数组自己随便定义一个  行列都为4。

解决方案 »

  1.   

    public static void main(String[] args) {
    int[][] arr = new int[4][4];
    for (int i = 0; i < 4; i++) {
    for (int j = 0; j < 4; j++) {
    arr[i][j] = i + j;
    }
    }
    for (int i = 0; i < 4; i++) {
    int amax=arr[i][0];
    int column=0;
    for (int j = 1; j < 4; j++) {
    if(arr[i][j]>amax)
    {
    amax=arr[i][j];
    column=j;
    }
    }
    int row=0;
    for(int k=1;k<4;k++)
    {
    int amin=arr[k][column];

    if(arr[k][column]<amin)
    {
    amin=arr[k][column];
    row=k;
    }
    }
    if(row==i)
    {
    System.out.println("行:"+row);
    System.out.println("列:"+column);
    System.out.println("值:"+amax);
    }
    }

    }
      

  2.   

    public class andian {    public andian() {
        }
        
        
        public static void main(String[] args) {
            
            int max=0;
            boolean cunzai=false;
            int min=0;
            int hang=0;
            int lie=0;
            int an[][]=new int[4][4];
            System.out.println(" 随机产生的数组为:");
            for (int i=0;i<4;i++){//随机产生4×4数组
                for(int m=0;m<4;m++){
                    an[i][m]=(int)(Math.random()*100+1);
                    System.out.print(an[i][m]+" ");
                    if(m==3){
                        System.out.println("");
                    }
                }
            }
            //开始判断鞍点的位置
             for (int i=0;i<4;i++){
                for(int m=0;m<4;m++){//找出行中的最大值及位置
                    if(an[i][m]>max){
                        max=an[i][m];
                        hang=i;
                        lie=m;
                        min=max;
                    }
                }
                for(int e=0;e<4;e++){//判断找出的最大值是不是列中的最小值
                    if(an[e][lie]<min){
                        cunzai=false;
                        break;
                    }else{
                        cunzai=true;
                    }
                }
                
             }
            if(cunzai){
                    System.out.println("随机产生的数组存在鞍点: "+min);
                    System.out.println("位于第"+(hang+1)+"行,第"+(lie+1)+"列。");
                }else{
                     System.out.println("随机产生的数组不存在鞍点!");
                }
        }
        

      

  3.   

    int amin=arr[k][column];
    应该为int amin=arr[k-1][column];
    public class Andian{
    public static void main(String[] args) {
    int[][] arr ={
    {67,164,786,22},
    {681,764,39,81},
    {7,12,7,21},
    {616,310,24,23}
                   }; 
        int n=0;
            for (int i = 0; i < 4; i++) 
            {
                int amax=arr[i][0];
                int column=0;
                for (int j = 1; j < 4; j++) 
                {
                    if(arr[i][j]>amax)
                    {
                        amax=arr[i][j];
                        column=j;
                    }    
                }
                int row=0;
                for(int k=1;k<4;k++)
                {
                    int amin=arr[k-1][column];
                    
                    if(arr[k][column]<amin)
                    {
                        amin=arr[k][column];
                        row=k;
                    }
                }
                if(row==i)
                {
                    System.out.println("行:"+row);
                    System.out.println("列:"+column);
                    System.out.println("值:"+amax);
                    n++;
                }
            }
            if(n==0)
               System.out.println("不存在鞍点!");
        }
    }
      

  4.   

                   System.out.println("行:"+row); 
                    System.out.println("列:"+column); 
                    System.out.println("值:"+amax); 
    改为System.out.println("鞍点为:"+"arr["+row+"]["+column+"]"+"="+amax);比较好点,因为输出来的时候,行列的值都是相应加一的,那只是下标。