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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 梁耀今 中级黑马   /  2013-4-23 22:32  /  1723 人查看  /  11 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 梁耀今 于 2013-4-25 00:04 编辑

1  2  9  10  25
4  3  8  11  24
5  6  7  12  23
16 15 14 13  22
17 18 19 20  21

这二维数组,如何编写!详细说一下算法!

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

11 个回复

倒序浏览
  1. int arr[][] = {{1, 2, 5, 9, 25},{4, 3, 8, 11, 24},
  2.                                 {4, 5, 7, 12, 23,},{16, 15, 14, 13, 22},
  3.                                 {17, 18, 19, 20, 21}};
复制代码
回复 使用道具 举报
二维数组
其实就是一维数组的每个元素,又是一个数组
  1. int[][] ns={
  2.                         {1,2,3},
  3.                         {4,5,6},
  4.                         {7,8,9}
  5.                         {.....}//继续
  6.                  };
  7.                  System.out.println(ns[1][2]);
复制代码
声明数组的格式
                数据类型[] 数组名=new 数组类型[数组大小];
使用数组,数组使用下标来操控数组中的数居
                例如
                数组名[0]=78;
                数组名[1]=80;
数组的下标是从0开始的,最大的下标为“数组大小-1”
例外:声明加赋值
  1. int[] grades={78,80,90};//注意,该数组现在容量为3
复制代码
例如
  1. String[] ss={
  2.                         "张三","李四","王五"       
  3.                 };
  4.                 System.out.println(ss[1]);
复制代码
回复 使用道具 举报
陈湘林 发表于 2013-4-24 00:49
二维数组
其实就是一维数组的每个元素,又是一个数组声明数组的格式
                数据类型[] 数组名=new 数组类型[数 ...

你先看清楚题目好么???
回复 使用道具 举报
本帖最后由 lipingan0520 于 2013-4-24 11:30 编辑

就是一个5*5的矩阵

int [][] s = new int[5][5];
for(int i = 0 ; i < 5 ;i++)
   for(int j = 0 ; j < 5 ; j++)
      s[j] = j ;
回复 使用道具 举报
lipingan0520 发表于 2013-4-24 08:04
就是一个5*5的矩阵

int [][] s = new [5][5];

我只能对你说一句话!无语!
回复 使用道具 举报
  1. public class test {

  2.         public static void main(String[] args) {

  3.                 int i = 0, j = 0;//定义一个开始角标
  4.                 int a[][] = new int[20][20];//定义一个2维数组
  5.                 int lap = 1;//一个标记用来和N做比较,循环的圈数
  6.                 int m = 1;//设置2维数组元素的起始值
  7.                 int n = 5;//控制输出的个数
  8.         
  9.                 a[i][j] = m++;
  10.                 lap++;
  11.                 //判断矩阵值
  12.                 while (lap <= n) {
  13.                         if (lap % 2 == 0) {
  14.                                 for (j++; i < lap; i++)
  15.                                         a[i][j] = m++;i--;
  16.                                 for (j--; j >= 0; j--)
  17.                                         a[i][j] = m++;j++;
  18.                         } else {
  19.                                 for (i++; j < lap; j++)
  20.                                         a[i][j] = m++;
  21.                                 j--;
  22.                                 for (i--; i >= 0; i--)
  23.                                         a[i][j] = m++;
  24.                                 i++;
  25.                         }
  26.                         lap++;
  27.                 }
  28.                 //打印矩阵
  29.                 for (i = 0; i < n; i++) {
  30.                         for (j = 0; j < n; j++) {
  31.                                 System.out.print(a[i][j]+" ");        
  32.                         }
  33.                                 System.out.println();
  34.                
  35.                 }

  36.         }
  37. }
复制代码
能不能看懂就看你自己的理解能力了!

评分

参与人数 1技术分 +1 收起 理由
田磊阳 + 1

查看全部评分

回复 使用道具 举报
harborbest 发表于 2013-4-24 09:50
能不能看懂就看你自己的理解能力了!

可以把while循环里面的步骤说一下么?
回复 使用道具 举报
梁耀今 发表于 2013-4-24 09:45
我只能对你说一句话!无语!

改了改了:(
回复 使用道具 举报
肖川 发表于 2013-4-23 22:41

高手在民间...
回复 使用道具 举报
本帖最后由 殇_心。 于 2013-4-24 14:02 编辑

姑且这么解释吧。不懂再说吧。
刚看了那哥们代码,确实不错..  就懒得自己写了。

/判断矩阵值
                /*
                   2
                 4 3   双圈, 上->下
                 
                     9
                     8
                 5 6 7  单圈,下->上
                 */

                while (lap <= 5) //循环5个圈。
                {

                        if (lap % 2 == 0) //双圈
                        {

                                for (j++; i < lap; i++)  //竖列 如:2 3
                                {
                                        a[j] = m++; //累加。
                                }
                                i--; // 减一,因为上面for计算多加了1
                                for (j--; j >= 0; j--) //行列
                                {
                                        a[j] = m++;
                                }
                                j++;//同理

                        } else {//单圈

                                for (i++; j < lap; j++)// 行列 如:5 6 7
                                {
                                        a[j] = m++;
                                }
                                j--;

                                for (i--; i >= 0; i--)  //竖列 如: 8 9
                                {
                                        a[j] = m++;
                                }
                                i++;
                        }

                        lap++;//圈数增加。

                }
  1. 根据对角线的值来写。
  2. public class Main
  3. {
  4.         public static void main(String[] args)
  5.         {
  6.                 int a[][] = new int[10][10];
  7.                 a[0][0] = 1;
  8.                 int i, j, q;
  9.                 for( i = 1; i < 5; i++ )
  10.                 for( j = 1; j < 5; j++ )
  11.                 {
  12.                         if( i == j )
  13.                         {
  14.                                 a[i][j] = a[i-1][j-1] + 2*i;//得出对角线的值
  15.                                 if( i%2 == 1 )
  16.                                 {
  17.                                         for(  q = i-1; q >= 0 ; q-- )
  18.                                         {
  19.                                             a[q][j] = a[q+1][j] - 1;
  20.                                         }
  21.                                         for(  q = j-1; q >= 0 ; q-- )
  22.                                         {
  23.                                             a[i][q] = a[i][q+1] + 1;
  24.                                         }
  25.                                 }
  26.                                 else
  27.                                 {
  28.                                         for(  q = i-1; q >= 0 ; q-- )
  29.                                         {
  30.                                             a[q][j] = a[q+1][j] + 1;
  31.                                         }
  32.                                         for(  q = j-1; q >= 0 ; q-- )
  33.                                         {
  34.                                             a[i][q] = a[i][q+1] - 1;
  35.                                         }
  36.                                 }
  37.                         }
  38.                 }
  39.                 for( i = 0; i < 5; i++ )
  40.                 {
  41.                     for( j = 0; j < 5; j++ )
  42.                     {
  43.                             System.out.print(a[i][j]+"\t");
  44.                     }
  45.                     System.out.println("");
  46.                 }
  47.         }
  48. }
复制代码

点评

两种方法···还有详细的介绍···很好  发表于 2013-4-24 14:20

评分

参与人数 1技术分 +2 收起 理由
田磊阳 + 2

查看全部评分

回复 使用道具 举报
如果问题未解决,请继续追问,如果问题解决了,请将问题分类改为“已解决”,谢谢
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马