为了账号安全,请及时绑定邮箱和手机立即绑定

怎么把坐标值保存到一维数组里

怎么把坐标值保存到一维数组里

一叶追寻 2016-12-07 16:06:43
最好能提供一个示例
查看完整描述

3 回答

?
朕日理万机

TA贡献27条经验 获得超28个赞

题目不是很完整。我理解是比如说把n个(二维)坐标值,保存到长为n的一维数组里,数组里每个元素对应一个坐标?

取巧的方法,因为你没说一维数组是什么类型的,比如你定义一个Coordinate类,里面存储坐标值:

class Coordinate{
    public int x;
    public int y;
}

那你的一维数组就存储这个Coordinate类

Coordinate[] array

如果你的数组要求是个int类型的,这看起来像是关系到可计算理论,可数和等势的问题了。说白了就是让二维(假设你是二维坐标值)数和自然数建立一一映射的关系。看起来像是个算法题,记得以前见过这种类似的面试题。

要求是首先你的坐标值不可以是实数,因为实数本身不可数,更别提二维实数了。

假设你的坐标也全是int类型。那么问题转化为如何建立一对<int, int> 和 一个int 的一一对应的关系。如果你学过有理数和自然数是如何一一对应的,应该可以解答,因为有理数可以看做两个自然数的商。假设坐标值非负,那么可以用三角形数法,按照组零:(0,0) 组一(0,1) (1,0) 组二(0,2) (1,1) (2,0) 组三(0,3) (1,2) (2,1) (3,0)这样一路数下来。每一组的横纵坐标相加等于组号,而第k组有k+1个坐标。

比如给你个坐标(m,n),先找它对应的组是m+n。在它之前的组总共有(m+n+1)*(m+n)/2个坐标了,再加上(m,n)是这一组的第m+1个坐标(或者叫偏移量),所以(m,n)是第(m+n+1)*(m+n)/2+m+1个坐标,你如果喜欢从零开始计数,就是(m+n+1)*(m+n)/2+m。于是成功将(m,n)映射成为了一个自然数。举例(3,4)对应的自然数就是31,把它作为相应的一维int数组元素。

输入(0,0), (1,2), (3,4)

输出array={0,7,31}

而从自然数解码出二维数组,就把上面的过程反过来。

如果考虑负数,比较方便的比如用菱形数法,|x|+|y|=k作为第k组,该组有4k个元素,然后从(0,k)开始顺时针计算偏移量。不赘述了。

把二维坐标扩展到任意有限维有理数都是可以的,因为都是可数的。

查看完整回答
反对 回复 2016-12-09
?
歌神彭于晏

TA贡献14条经验 获得超3个赞

  百度上找的,,我也要学习一下

java将动态产生的坐标值存到数组当中,可以将数据放入二维数组中,如下代码:

public class test{

    public static void main(String[] args){

        int [] arr1 = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}; // 假设这是你的坐标(1,2),(3,4),……

        int [][] arr2 = new int[arr1.length / 2][2]; // 创建一个行为原数组长度一半,列为2的二维数组

        for (int i = 0; i < arr1.length; i++) {

            // 遍历原数组,赋值给新数组

            arr2[i / 2][i % 2] = arr1[i];

        }

        for (int i = 0; i < arr2.length; i++ ) {

            for (int j = 0; j < arr2[i].length; j++ ) {

                System.out.print(arr2[i][j] + " ");

            }

            System.out.println();

        }

    } 

}

  


查看完整回答
反对 回复 2016-12-07
  • 3 回答
  • 0 关注
  • 5331 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信