JAVA动态二维数组

Mr_LuL 2017-06-08 03:37:14
用JAVA声明一个m*n的二维数组,类似于这样的

输出1 6 2 11 7 3 16 12 8 4这种规律的代码怎么写啊
...全文
203 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
a350062174 2017-06-09
  • 打赏
  • 举报
回复
我想到两种方法: 1. 直接用双重循环. 第一层循环次数是 矩形的 宽+高-1 (x+y-1). 第2层循环 起点在矩形的左边(x=0)或下边(y=h), 终点在矩形的上边(y=0)或下边(x=w). 代码如下:
int[][] a = {{1,2,3,4,5},{6,7,8,9,10},{11,12,13,14,15},{16,17,18,19,20},{21,22,23,24,25},{26,27,28,29,30}};
        int h=a.length;//矩形高
        int w=a[0].length;//宽
        for(int i=0;i<h+w-1;i++)
            for(int y=i<h?i:h-1,x=i-y;y>=0&&x<w;x++){
                System.out.println(a[y][x]);
                y--;
            }
2. 个人感觉这种比第一种稍微复杂一点.但这种比较符合面向对象的思维. 将x , y 坐标以及值 组成对象. 把二维数组转成 对象列表. 再对列表进行排序. x+y 小的排在前面, 如果x+y相等 则把 x小的排在前面. 代码如下:
import java.util.*;
public class Test {
    public static void main(String[] args) {
        int[][] a = {{1,2,3,4,5},{6,7,8,9,10},{11,12,13,14,15},{16,17,18,19,20},{21,22,23,24,25},{26,27,28,29,30}};
        List<Test> ts = new ArrayList<>();
        for(int i=0;i<a.length;i++){
            for(int j=0;j<a[0].length;j++){
                ts.add(new Test(j,i,a[i][j]));
            }
        }
        ts.sort((o1,o2)-> o1.x+o1.y!=o2.x+o2.y ? o1.x+o1.y-(o2.x+o2.y) : o1.x-o2.x );
        for(Test v : ts)
            System.out.println(v.value);
    }
    int x;
    int y;
    int value;
    Test(int x,int y ,int value){
        this.x=x;
        this.y=y;
        this.value=value;
    }
}
Mr_LuL 2017-06-09
  • 打赏
  • 举报
回复
嗯嗯,就是这个!蟹蟹啦

51,412

社区成员

发帖
与我相关
我的任务
社区描述
Java相关技术讨论
javaspring bootspring cloud 技术论坛(原bbs)
社区管理员
  • Java相关社区
  • 小虚竹
  • 谙忆
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧