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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 邵震 高级黑马   /  2013-4-5 18:43  /  1428 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 邵震 于 2013-4-6 06:40 编辑

/**
找出具有m行n列二维数组Array的“鞍点”,即该位置上的元素在该行上最大,在该列上最小,其中1<=m,n<=10。
输入数据有多行,第一行有两个数m和n,下面有m行,每行有n个数。
按下列格式输出鞍点:Array[j]=x
其中x代表鞍点,i和j为鞍点所在的数组行和列下标,我们规定数组下标从0开始。
一个二维数组并不一定存在鞍点,此时请输出None
我们保证不会出现两个鞍点的情况,比如:
3 3
1 2 3
1 2 3
3 6 8
样例输入
3 3
1 2 3
4 5 6
7 8 9
样例输出
Array[0][2]=3
思路:
创建一个包含四个一维数组的二维数组,每个包含3个元素。
把从1到12的数字挨个输入进去,并打印出横三竖四的矩形。
用for语句进行双循环 外圈进行一维数组数组间的切换,内圈一进行横列取最大值循环,内圈二进行竖列取最小值循环,,
当求得横列最大之后进行外圈循环,当循环一圈后最值不变,则跳出循环并打印
*/
class Java0405d2
{
        public static void main(String[] args)
        {
                int a=1,b=0,temp=0,d=0,z=0;
                int [][]arr = new int [4][3];
                for (int x=0;x<4 ; x++)
                {
                        for (int y=0;y<3 ;y++ )
                        {
                                arr[x][y]=a;
                                a++;
                                System.out.print(arr[x][y]+"\t");
                        }
                        System.out.println();
                }
                for (int x=0;x<4;x++ )
                {               
                        for (d=0;d<3;d++ )
                        {
                                if (temp<arr[x][d])
                                {
                                        temp=arr[x][d];
                                }
                        }
                        b=arr[x][d];/*这里是为了记住第一个内循环找出的最值
                                                  为了和下一个循环的数进行对比 假如数值
                                                  不变就代表他是横排最大竖排最小的鞍值*/
                        for (z=0;z<4 ;z++ )
                        {
                                if (temp>arr[z][d])
                                {
                                        temp=arr[z][d];
                                }
                        }
                        if (b==arr[z][d])
                        {
                                System.out.println(arr[z][d]);
                                break;
                        }
                }
        }
}

4 个回复

倒序浏览
  1. package A;
  2. /**
  3. 找出具有m行n列二维数组Array的“鞍点”,即该位置上的元素在该行上最大,在该列上最小,其中1<=m,n<=10。
  4. 输入数据有多行,第一行有两个数m和n,下面有m行,每行有n个数。
  5. 按下列格式输出鞍点:Array[i][j]=x
  6. 其中x代表鞍点,i和j为鞍点所在的数组行和列下标,我们规定数组下标从0开始。
  7. 一个二维数组并不一定存在鞍点,此时请输出None
  8. 我们保证不会出现两个鞍点的情况,比如:
  9. 3 3
  10. 1 2 3
  11. 1 2 3
  12. 3 6 8
  13. 样例输入
  14. 3 3
  15. 1 2 3
  16. 4 5 6
  17. 7 8 9
  18. 样例输出
  19. Array[0][2]=3
  20. 思路:
  21. 创建一个包含四个一维数组的二维数组,每个包含3个元素。
  22. 把从1到12的数字挨个输入进去,并打印出横三竖四的矩形。
  23. 用for语句进行双循环 外圈进行一维数组数组间的切换,内圈一进行横列取最大值循环,内圈二进行竖列取最小值循环,,
  24. 当求得横列最大之后进行外圈循环,当循环一圈后最值不变,则跳出循环并打印
  25. */

  26. import java.util.Scanner;

  27. public class Test {
  28.   public static void main(String args[])
  29.   {
  30.           
  31.           System.out.println("请输入二维数组的行数:");
  32.           Scanner sc=new Scanner(System.in);
  33.           int line=sc.nextInt();
  34.           System.out.println("请输入二维数组的列数:");
  35.           Scanner sc2=new Scanner(System.in);
  36.           int row=sc.nextInt();
  37.        
  38.           int [][] arr= new int [line][row];
  39.           System.out.println("请输入数组中的数据::");
  40.           Scanner sc3=new Scanner(System.in);
  41.           for(int i=0;i<line;i++)//输入数组
  42.           {
  43.                   for(int j=0;j<row;j++)
  44.                   {
  45.                           arr[i][j]=sc3.nextInt();
  46.                   }
  47.           }
  48.           boolean fl=false;
  49.           int tem=0,a=-1,b=0;
  50.           s: for(int i=0;i<line;i++)//需要进行line次的外循环
  51.           {
  52.                   for(int j=0;j<row;j++)//循环找出行中的最大值
  53.                   {
  54.                           if(tem<arr[i][j])
  55.                           {
  56.                                   tem=arr[i][j];
  57.                                   a=i;
  58.                                   b=j;
  59.                           }

  60.                   }
  61.                   for(int j=0;j<line;j++)//在行的最大值的那一列中,找出是不是该列中最小值
  62.                   {
  63.                           if(arr[a][b]>arr[j][b])
  64.                           {
  65.                                   continue s;
  66.                           }
  67.                   }
  68.                  fl=true;
  69.           }
  70.           if(fl)
  71.           System.out.println("是第"+a+"行,"+b+"列的数据位鞍点,其数为:"+arr[a][b]);
  72.           else
  73.           System.out.println("该数组不存在鞍点。");
  74.   }
  75. }
复制代码
这个需要自己输入数组中的数据。然后比较找出鞍点。有错误的话请指出。

评分

参与人数 1技术分 +1 收起 理由
张熙韬 + 1 神马都是浮云

查看全部评分

回复 使用道具 举报
胡帅冰 发表于 2013-4-5 21:58
这个需要自己输入数组中的数据。然后比较找出鞍点。有错误的话请指出。

帅哥 谢谢你的代码 可是我需要的是找出我的错误 不是一段完整的代码

而且我现在没学键盘录入  虽然你的代码打得很好 也能算出结果

还是谢谢你
回复 使用道具 举报
邵震 发表于 2013-4-5 22:10
帅哥 谢谢你的代码 可是我需要的是找出我的错误 不是一段完整的代码

而且我现在没学键盘录入  虽然你的 ...

嗯。那我再看看哈。
回复 使用道具 举报
兄弟,你这个错误提示是 ArrayIndexOutOfBoundsException   你可以查一下java文档,对ArrayIndexOutOfBoundsException
的描述是:用非法索引访问数组时抛出的异常。如果索引为负或大于等于数组大小,则该索引为非法索引。   也就是说你的数组下标的标示越界。所以出现异常。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马