Java開發筆記(二十一)二維數組的擴展

来源:https://www.cnblogs.com/pinlantu/archive/2018/11/09/9937615.html
-Advertisement-
Play Games

前面介紹的數組容納的是一串數字,仿佛一根線把這組數字串了起來,故而它只是一維數組。一維數組用來表示簡單的數列尚可,要是表達複雜的平面坐標系,那就力不從心了。由於平面坐標系存在水平和垂直兩個方向,因此可用二維數組來保存平面坐標繫上的一組坐標頂點,其中第一維是頂點隊列,第二維是頂點的橫縱坐標。許多個平面 ...


前面介紹的數組容納的是一串數字,仿佛一根線把這組數字串了起來,故而它只是一維數組。一維數組用來表示簡單的數列尚可,要是表達複雜的平面坐標系,那就力不從心了。由於平面坐標系存在水平和垂直兩個方向,因此可用二維數組來保存平面坐標繫上的一組坐標頂點,其中第一維是頂點隊列,第二維是頂點的橫縱坐標。許多個平面組合起來變成一幅動畫,每個平面都構成動畫的一個幀,這樣就形成了三維數組。二維數組、三維數組,乃至更多維度的數組,統稱為多維數組。多維數組全由一維數組擴展而來,它們的用法大同小異,因而只要學會如何使用二維數組,即可舉一反三運用其他多維數組。下麵就以二維數組為例,統一介紹多維數組的常見用法。
如同一維數組那樣,二維數組也有兩種聲明形式,一種是在變數名稱後面添加兩對方括弧,例如“double triangle[][]”;另一種是在類型後面添加兩對方括弧,例如“int[][] triangle”。前述的二維數組triangle表示平面坐標繫上的三角形,其中第一對方括弧表示這個三角形有幾個頂點,第二對方括弧表示每個頂點由幾個坐標方向構成。
給二維數組分配存儲空間也有三種方式,分別說明如下:
1、利用語句“new 變數類型[頂點數量][方向數量]”分配空間,比如三角形triangle有三個頂點,每個頂點由橫縱兩個坐標方向組成,則可通過下麵這行語句實現:

		// 在兩對方括弧內分別填入數字,表示數組有多少行多少列
		triangle = new double[3][2];

 

2、在分配存儲空間的時候立即對數組進行初始化賦值,此時方括弧中間不填數字,而在方括弧後面添加花括弧,並且花括弧內部是以逗號分隔的幾個一維數組。此時初始化賦值的代碼如下所示:

		// 方括弧內留空,然後緊跟花括弧,花括弧內部是以逗號分隔的幾個一維數組
		double[][] triangle = new double[][]{
				new double[]{-2.0, 0.0},
				new double[]{0.0, -1.0},
				new double[]{2.0, 1.0}
		};

 

3、可見上面的第二種寫法實在啰嗦,完全可以參照一維數組的簡化寫法,把多餘的“new double***”統統去掉,於是整個初始化代碼精簡如下:

		// 賦值等號右邊直接跟著花括弧,花括弧又內嵌好幾個花括弧分別表示對應的一維數組
		double[][] triangle = { {-2.0, 0.0}, {0.0, -1.0}, {2.0, 1.0} };

以上的賦值等號右邊直接跟著花括弧,花括弧裡面又有三組花括弧,每組花括弧分別容納兩個數字。這便告訴編譯器:該二維數組需要分配三個頂點,並且每個頂點都有兩個坐標方向。

若要獲取二維數組裡面的某個元素,可採取“數組名稱[元素行號][元素列號]”的形式,表示當前操作的是第幾行第幾列的數組元素。與一維數組不同的是,對於二維數組來說,“數組名稱.length”不能獲得所有元素的數量,而是獲得該數組的行數;要想獲取某行的列數,則需通過“triangle[行號].length”來得到,把所有行的列數累加起來,才能求得該二維數組的元素個數。下麵是聲明一個浮點型的二維數組,並對每個數組元素賦值,最後遍歷列印各元素的完整代碼例子:

		// 以下是聲明二維數組的第一種形式:“變數類型 數組名稱[][]”
		double triangle[][];
		// 以下是分配二維數組空間的第一種形式
		// 在兩對方括弧內分別填入數字,表示數組有多少行多少列
		triangle = new double[3][2];
		// 數組名稱後面的“[數字1][數字2]”,就是數組元素的行列下標,表示當前操作的是第幾行第幾列的數組元素
		triangle[0][0] = -2.0;
		triangle[0][1] = 0.0;
		triangle[1][0] = 0.0;
		triangle[1][1] = -1.0;
		triangle[2][0] = 2.0;
		triangle[2][1] = 1.0;
		// 下麵通過迴圈語句依次讀出數組中的所有元素。
		// “二維數組名稱.length”表示獲取該數組的行數
		for (int i=0; i<triangle.length; i++) {
			// “triangle[i].length”表示獲取該數組第i行的列數
			for (int j=0; j<triangle[i].length; j++) {
				// 列印第i行第j列的數組元素
				System.out.println("triangle["+i+"]["+j+"]="+triangle[i][j]);
			}
		}

 

上述示例代碼中的二維數組,存放了平面坐標繫上的三個頂點,它們的坐標分別是(-2.0, 0.0)、(0.0, -1.0)、(2.0, 1.0)。這三個坐標點構成了一個三角形的三個頂點,正如下圖所示的A點(坐標為(-2,0))、B點(坐標為(0,-1))、C點(坐標為(2,1))。

看到了熟悉的平面坐標圖,這下平面幾何的知識可派上用場了,例如根據兩點的坐標來計算兩點之間的距離。既然三角形有三個頂點A、B、C,接下來不妨計算它的三條邊長,包括AB、AC和BC三條邊的長度。於是分別求得兩個頂點在橫軸方向的距離,以及在縱軸方向的距離,然後利用勾股定理算出連接兩頂點的斜邊長度。以下便是由二維數組保存的坐標數值求解三角形各邊長的演示代碼:

		// 下麵通過迴圈語句依次計算三角形每條邊的長度
		// 假設第一個數組元素代表點A,第二個數組元素代表點B,第三個數組元素代表點C,
		// 則本迴圈將依次求得AB、AC、BC這三條邊的長度
		for (int i=0; i<triangle.length-1; i++) {
			for (int j=i+1; j<triangle.length; j++) {
				// 獲取兩個頂點在橫軸方向的距離
				double xDistance = Math.abs(triangle[j][0] - triangle[i][0]);
				// 獲取兩個頂點在縱軸方向的距離
				double yDistance = Math.abs(triangle[j][1] - triangle[i][1]);
				// 根據勾股定理計算連接兩頂點的斜邊長度
				double distance = Math.sqrt(xDistance*xDistance + yDistance*yDistance);
				System.out.println("i="+i+",j="+j+",distance="+distance);
			}
		}

 

運行上述的演示代碼,列印出來的三角形邊長計算結果如下所示:

i=0,j=1,distance=2.23606797749979
i=0,j=2,distance=4.123105625617661
i=1,j=2,distance=2.8284271247461903

  


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 單表操作: 一、添加 (1)方式一 from mysite.models import * def add(request): book= Book(name="python",price=99,author="python作者") book.sava() return HttpResponse(" ...
  • 前面5章收穫不大,更多的是 中間的部分,如何實際寫出一種高效優美的代碼,如何封裝 類,構建子程式,如何定義好的命名。同重構有很多部分的重疊。 其中感觸最深的一節,軟體工程最首要的核心技術: 控制複雜度!!!控制複雜度!!!需要學習的朋友可以通過網盤免費下載pdf版 (先點擊普通下載 再選擇普通用戶就 ...
  • 查詢銀行賬戶的數量 1.建立一個項目導入jar包(ioc aop dao 連接池 資料庫驅動 ),拷貝容器對應的配置文件到src下 2.在配置文件中開啟組件掃描 3.寫一個DAO介面定義一個查詢方法 4.定義一個JdbcTemplate的成員變數 4.1在類上加@Repository標註 4.2註入 ...
  • 基於 SpringSecurity 實現標準用戶名密碼登錄,基於 SpringSocial 實現QQ登錄,基於 OAuth2 實現認證伺服器。在完成登錄功能的同時,一步步分析 spring security、spring social、oauth 的實現原理,源碼分析等。 ...
  • 系統:Windows10 軟體:Java SE 8 配置詳細過程 1.“此電腦”,右鍵→“屬性,選擇“高級系統設置” 1.“此電腦”,右鍵→“屬性,選擇“高級系統設置” 2.選擇環境變數,再系統環境變數 3.新建 在新建頁面,輸入變數名“JAVA_HOME”;變數值“你的JDK的路徑,然後點擊“確定 ...
  • 按"指針"傳遞 python中 變數賦值、參數傳遞都是通過"指針"拷貝的方式進行的 。除了按"指針"拷貝,還有一種按值拷貝的方式,關於按值、按指針拷貝的細節,參見 "按值傳遞 vs. 按指針傳遞" 。 所以在python中,變數賦值、參數傳遞,都只是拷貝了源數據的一個地址,而不會拷貝記憶體中完整的數據 ...
  • 廢話不多說啦,直接上代碼: 這裡需要註意的是: 要想以 x-www-form-urlencoded 方式發送,最關鍵是發送的數據格式。 方式from-data試發送的數據用的是array格式,而方式為 x-www-form-urlencoded 時需要用key=value&key=value的格式發 ...
  • 問題 因為想在多個應用之間共用用戶的登錄態,因此實現了自己的 ,使用Kryo把 序列化然後放到redis之中去,同時也使用了 來使用shiro自己的存儲。然而之後一直出現丟失更新的問題,例如 分析 DEBUG之後發現,從Subject中取到的Session並不是我們在SessionDAO中創建的Si ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...