亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

怎么把坐標值保存到一維數組里

怎么把坐標值保存到一維數組里

一葉追尋 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 關注
  • 5475 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號